<?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>91933</bug_id>
          
          <creation_ts>2012-07-21 14:52:00 -0700</creation_ts>
          <short_desc>JSC should have property butterflies</short_desc>
          <delta_ts>2012-10-05 13:58:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91788</dependson>
    
    <dependson>92316</dependson>
    
    <dependson>92696</dependson>
    
    <dependson>92923</dependson>
    
    <dependson>93150</dependson>
    
    <dependson>94205</dependson>
    
    <dependson>94309</dependson>
    
    <dependson>94448</dependson>
    
    <dependson>95013</dependson>
    
    <dependson>95630</dependson>
    
    <dependson>96617</dependson>
          <blocked>96596</blocked>
    
    <blocked>96623</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>675271</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-21 14:52:00 -0700</bug_when>
    <thetext>In a butterfly object model, you point into the middle of an object, and one set of properties is offset to the left (negative address direction) of the pointer while another distinct set is offset to the right (positive).  JSC should use this approach for property storage, so that named (and private) properties grow to the left while indexed properties grow to the right.  This will immediately yield two benefits: (1) all objects will have fast indexed storage and (2) indexed storage access will not have to perform the array type check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678989</commentid>
    <comment_count>1</comment_count>
      <attachid>154570</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-26 01:08:46 -0700</bug_when>
    <thetext>Created attachment 154570
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679712</commentid>
    <comment_count>2</comment_count>
      <attachid>154739</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-26 13:36:47 -0700</bug_when>
    <thetext>Created attachment 154739
more

And still a lot more left to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679844</commentid>
    <comment_count>3</comment_count>
      <attachid>154770</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-26 15:31:27 -0700</bug_when>
    <thetext>Created attachment 154770
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679885</commentid>
    <comment_count>4</comment_count>
      <attachid>154779</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-26 16:05:35 -0700</bug_when>
    <thetext>Created attachment 154779
this isn&apos;t going to be a small change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681046</commentid>
    <comment_count>5</comment_count>
      <attachid>155041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-27 13:50:43 -0700</bug_when>
    <thetext>Created attachment 155041
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681113</commentid>
    <comment_count>6</comment_count>
      <attachid>155056</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-27 14:49:59 -0700</bug_when>
    <thetext>Created attachment 155056
even more

Most of the JSArray functionality is now moved to JSObject.

This code does not compile, or work, or anything, for that matter.  Still a lot more to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681216</commentid>
    <comment_count>7</comment_count>
      <attachid>155083</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-27 16:16:21 -0700</bug_when>
    <thetext>Created attachment 155083
it&apos;s getting there!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681317</commentid>
    <comment_count>8</comment_count>
      <attachid>155105</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-27 21:10:53 -0700</bug_when>
    <thetext>Created attachment 155105
a little more

I think I&apos;m getting close to having moved all of JSArray&apos;s indexed property handling into JSObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681469</commentid>
    <comment_count>9</comment_count>
      <attachid>155138</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-28 13:32:04 -0700</bug_when>
    <thetext>Created attachment 155138
JSObject appears to be done

Except of course for all of the JIT and LLInt code that needs to be rewritten.  And the hacks for property name iteration are probably not yet complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681471</commentid>
    <comment_count>10</comment_count>
      <attachid>155139</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-28 13:41:27 -0700</bug_when>
    <thetext>Created attachment 155139
rebased up to r123971</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681517</commentid>
    <comment_count>11</comment_count>
      <attachid>155156</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-28 21:15:34 -0700</bug_when>
    <thetext>Created attachment 155156
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681565</commentid>
    <comment_count>12</comment_count>
      <attachid>155176</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-29 10:17:12 -0700</bug_when>
    <thetext>Created attachment 155176
almost done with JSArray methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681586</commentid>
    <comment_count>13</comment_count>
      <attachid>155180</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-29 13:38:29 -0700</bug_when>
    <thetext>Created attachment 155180
JSObject and JSArray are done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703478</commentid>
    <comment_count>14</comment_count>
      <attachid>160268</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-23 15:43:49 -0700</bug_when>
    <thetext>Created attachment 160268
some rebasing

I&apos;ll have to rip out the type in IndexingHeader and replace it with an array mode in Structure.  Haven&apos;t done that yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703548</commentid>
    <comment_count>15</comment_count>
      <attachid>160281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-23 16:57:04 -0700</bug_when>
    <thetext>Created attachment 160281
more rebasing

Changed more of the code to use Structure::indexingType() rather than IndexingHeader::type().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703633</commentid>
    <comment_count>16</comment_count>
      <attachid>160305</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-23 18:33:31 -0700</bug_when>
    <thetext>Created attachment 160305
rebasing done

The code should now be using Structure::indexingType(), and Structure now has the notion of cacheable indexing type transitions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704403</commentid>
    <comment_count>17</comment_count>
      <attachid>160496</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-24 13:45:53 -0700</bug_when>
    <thetext>Created attachment 160496
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704651</commentid>
    <comment_count>18</comment_count>
      <attachid>160553</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-24 23:00:37 -0700</bug_when>
    <thetext>Created attachment 160553
a little more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704948</commentid>
    <comment_count>19</comment_count>
      <attachid>160629</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-26 22:07:59 -0700</bug_when>
    <thetext>Created attachment 160629
rebased again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706052</commentid>
    <comment_count>20</comment_count>
      <attachid>160894</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-27 21:40:54 -0700</bug_when>
    <thetext>Created attachment 160894
it&apos;s starting to sort of compile

By which I mean I can compile the LLIntOffsetsExtractor.  Still a lot of work to do though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706527</commentid>
    <comment_count>21</comment_count>
      <attachid>161014</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 11:06:26 -0700</bug_when>
    <thetext>Created attachment 161014
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706728</commentid>
    <comment_count>22</comment_count>
      <attachid>161059</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 14:23:29 -0700</bug_when>
    <thetext>Created attachment 161059
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706932</commentid>
    <comment_count>23</comment_count>
      <attachid>161103</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 17:49:05 -0700</bug_when>
    <thetext>Created attachment 161103
it builds.

And probably crashes on launch, though I wouldn&apos;t know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707061</commentid>
    <comment_count>24</comment_count>
      <attachid>161129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 21:02:05 -0700</bug_when>
    <thetext>Created attachment 161129
it runs things.

Most of the benchmarks run correctly.  I still smell bugs though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707124</commentid>
    <comment_count>25</comment_count>
      <attachid>161142</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 23:21:37 -0700</bug_when>
    <thetext>Created attachment 161142
zero regression on SunSpider

Still testing more things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707146</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-28 23:51:32 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Created an attachment (id=161142) [details]
&gt; zero regression on SunSpider
&gt; 
&gt; Still testing more things.

Zero regression on SunSpider, V8, or Kraken.  Possible speed-up on V8, but it&apos;s slight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708377</commentid>
    <comment_count>27</comment_count>
      <attachid>161416</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-30 00:48:16 -0700</bug_when>
    <thetext>Created attachment 161416
getting close

Tests are starting to pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709181</commentid>
    <comment_count>28</comment_count>
      <attachid>161593</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-30 17:09:54 -0700</bug_when>
    <thetext>Created attachment 161593
passes run-javascriptcore-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710087</commentid>
    <comment_count>29</comment_count>
      <attachid>161795</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-31 17:23:27 -0700</bug_when>
    <thetext>Created attachment 161795
making progress with LayoutTests/fast/js

Still not passing though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710148</commentid>
    <comment_count>30</comment_count>
      <attachid>161814</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-31 20:50:38 -0700</bug_when>
    <thetext>Created attachment 161814
almost there in fast/js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711586</commentid>
    <comment_count>31</comment_count>
      <attachid>162135</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-04 17:17:55 -0700</bug_when>
    <thetext>Created attachment 162135
more progress on fast/js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712872</commentid>
    <comment_count>32</comment_count>
      <attachid>162417</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-05 22:03:34 -0700</bug_when>
    <thetext>Created attachment 162417
fast/js gets as far as it&apos;s going to get

We fail corner cases of numeric setters.  But we pass everything else.  That&apos;s as good as it&apos;s going to get, for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715123</commentid>
    <comment_count>33</comment_count>
      <attachid>162906</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-07 16:49:56 -0700</bug_when>
    <thetext>Created attachment 162906
almost passing all tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715229</commentid>
    <comment_count>34</comment_count>
      <attachid>162933</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-07 19:21:13 -0700</bug_when>
    <thetext>Created attachment 162933
almost ready for review

Still need to write some 32-bit support code, and need to add files to the other build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715621</commentid>
    <comment_count>35</comment_count>
      <attachid>163018</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-09 15:29:24 -0700</bug_when>
    <thetext>Created attachment 163018
the patch

It works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715622</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-09 15:31:58 -0700</bug_when>
    <thetext>Attachment 163018 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSArray.h:125:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1088:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1165:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/runtime/JSObject.cpp:51:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/ArrayPrototype.h:36:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/ArrayPrototype.h:36:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/ArrayPrototype.h:36:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/IndexingHeaderInlineMethods.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/Butterfly.h:66:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Butterfly.h:85:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Butterfly.h:96:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Butterfly.h:98:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Butterfly.h:99:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/Butterfly.h:100:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/StringPrototype.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/SparseArrayValueMap.h:42:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/runtime/SparseArrayValueMap.h:65:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/SparseArrayValueMap.h:68:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/SparseArrayValueMap.h:79:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSArray.cpp:587:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/runtime/ArrayConventions.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSObject.h:187:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSObject.h:613:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/ArrayStorage.h:39:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/ArrayStorage.h:40:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/ArrayStorage.h:41:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/ArrayStorage.h:42:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 28 in 114 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715625</commentid>
    <comment_count>37</comment_count>
      <attachid>163018</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 15:54:04 -0700</bug_when>
    <thetext>Comment on attachment 163018
the patch

Attachment 163018 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13794693</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715626</commentid>
    <comment_count>38</comment_count>
      <attachid>163018</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-09 15:57:29 -0700</bug_when>
    <thetext>Comment on attachment 163018
the patch

Attachment 163018 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13793683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715627</commentid>
    <comment_count>39</comment_count>
      <attachid>163018</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-09 16:03:18 -0700</bug_when>
    <thetext>Comment on attachment 163018
the patch

Attachment 163018 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13796660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715628</commentid>
    <comment_count>40</comment_count>
      <attachid>163019</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-09 16:11:08 -0700</bug_when>
    <thetext>Created attachment 163019
the patch

Style fixes, and build fixes for Win and Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715629</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-09 16:14:58 -0700</bug_when>
    <thetext>Attachment 163019 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/JavaScriptCore/runtime/ArrayConventions.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 114 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715632</commentid>
    <comment_count>42</comment_count>
      <attachid>163019</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 16:38:28 -0700</bug_when>
    <thetext>Comment on attachment 163019
the patch

Attachment 163019 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13795652</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715640</commentid>
    <comment_count>43</comment_count>
      <attachid>163020</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-09 17:39:24 -0700</bug_when>
    <thetext>Created attachment 163020
the patch

Another style fix.  Also trying to fix Win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715653</commentid>
    <comment_count>44</comment_count>
      <attachid>163020</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 18:13:07 -0700</bug_when>
    <thetext>Comment on attachment 163020
the patch

Attachment 163020 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13799592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715657</commentid>
    <comment_count>45</comment_count>
      <attachid>163022</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-09 18:32:17 -0700</bug_when>
    <thetext>Created attachment 163022
the patch

Fix Windows, for real this time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717783</commentid>
    <comment_count>46</comment_count>
      <attachid>163022</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-11 18:01:48 -0700</bug_when>
    <thetext>Comment on attachment 163022
the patch

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

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:67
&gt; +# Constant for reasoning about butterflies.
&gt; +const IsArray = 1
&gt; +const HasArrayStorage = 8
&gt; +const AllArrayTypes = 15

The magical constants in the LLInt have been giving me fits lately. Would be nice to generate them through a .cpp file, so they auto-update.

&gt; Source/JavaScriptCore/runtime/ArrayStorage.h:39
&gt; +// This struct holds the actual data values of an array. A JSArray object points to it&apos;s contained ArrayStorage

Typo: &quot;it&apos;s&quot; =&gt; &quot;its&quot;.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:279
&gt; +    // Try indexed put first.

Would be nice for this comment to explain that this is required for correctness, and not just optimization.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:281
&gt; +    if (i != PropertyName::NotAnIndex) {

Since we think the &quot;not an index&quot; case is probably common, it would be nice to refactor toUInt32FromCharacters() to have an inline fast path for the first character being non-digit, and move all the other code out-of-line.

&gt; Source/JavaScriptCore/runtime/JSObject.h:542
&gt; +        ArrayStorage* arrayStorageOrZero()

Let&apos;s call this &quot;arrayStorageOrNull&quot;, since (ArrayStorage*)0 is better known as null.

&gt; Source/JavaScriptCore/runtime/JSObject.h:773
&gt; +inline void JSObject::setButterfly(JSGlobalData&amp; globalData, Butterfly* butterfly, Structure* structure)

When &apos;butterfly&apos; points to out-of-line storage, this function is a reference store between GC objects. Does it need to perform a write barrier?

&gt; Source/JavaScriptCore/runtime/JSObject.h:781
&gt; +inline void JSObject::setButterflyWithoutChangingStructure(Butterfly* butterfly)

Ditto.

&gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:104
&gt; +        entry.set(exec-&gt;globalData(), array, value);

Since &apos;this&apos; is a GC object now, it should be the owner in this set, not &apos;array&apos;.

&gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:139
&gt; +    entry.set(exec-&gt;globalData(), array, value);

Ditto.

&gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:190
&gt; +inline void SparseArrayValueMap::visitChildren(JSCell* thisObject, SlotVisitor&amp; visitor)

Since this is a GC object now, it needs to call through to Base::visitChildren().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717787</commentid>
    <comment_count>47</comment_count>
      <attachid>163022</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-11 18:04:23 -0700</bug_when>
    <thetext>Comment on attachment 163022
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718952</commentid>
    <comment_count>48</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-12 18:24:03 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 163022 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163022&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:67
&gt; &gt; +# Constant for reasoning about butterflies.
&gt; &gt; +const IsArray = 1
&gt; &gt; +const HasArrayStorage = 8
&gt; &gt; +const AllArrayTypes = 15
&gt; 
&gt; The magical constants in the LLInt have been giving me fits lately. Would be nice to generate them through a .cpp file, so they auto-update.

Yes!  I have been thinking about how to do that.  We should definitely do this.  https://bugs.webkit.org/show_bug.cgi?id=96587

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ArrayStorage.h:39
&gt; &gt; +// This struct holds the actual data values of an array. A JSArray object points to it&apos;s contained ArrayStorage
&gt; 
&gt; Typo: &quot;it&apos;s&quot; =&gt; &quot;its&quot;.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:279
&gt; &gt; +    // Try indexed put first.
&gt; 
&gt; Would be nice for this comment to explain that this is required for correctness, and not just optimization.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:281
&gt; &gt; +    if (i != PropertyName::NotAnIndex) {
&gt; 
&gt; Since we think the &quot;not an index&quot; case is probably common, it would be nice to refactor toUInt32FromCharacters() to have an inline fast path for the first character being non-digit, and move all the other code out-of-line.

The whole method is ALWAYS_INLINE, and the second thing it checks is for the first character not being a digit.  (The first thing it checks is for the string being zero-length.)

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.h:542
&gt; &gt; +        ArrayStorage* arrayStorageOrZero()
&gt; 
&gt; Let&apos;s call this &quot;arrayStorageOrNull&quot;, since (ArrayStorage*)0 is better known as null.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.h:773
&gt; &gt; +inline void JSObject::setButterfly(JSGlobalData&amp; globalData, Butterfly* butterfly, Structure* structure)
&gt; 
&gt; When &apos;butterfly&apos; points to out-of-line storage, this function is a reference store between GC objects. Does it need to perform a write barrier?

As per our discussions, I&apos;m leaving it as is.  None of the copying GC styles we can envision doing in the near future would require a barrier on accesses to m_butterfly.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.h:781
&gt; &gt; +inline void JSObject::setButterflyWithoutChangingStructure(Butterfly* butterfly)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:104
&gt; &gt; +        entry.set(exec-&gt;globalData(), array, value);
&gt; 
&gt; Since &apos;this&apos; is a GC object now, it should be the owner in this set, not &apos;array&apos;.

Ah!  Good catch.  Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:139
&gt; &gt; +    entry.set(exec-&gt;globalData(), array, value);
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/SparseArrayValueMapInlineMethods.h:190
&gt; &gt; +inline void SparseArrayValueMap::visitChildren(JSCell* thisObject, SlotVisitor&amp; visitor)
&gt; 
&gt; Since this is a GC object now, it needs to call through to Base::visitChildren().

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719021</commentid>
    <comment_count>49</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-12 21:19:01 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/128400</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735940</commentid>
    <comment_count>50</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-10-05 13:58:36 -0700</bug_when>
    <thetext>It appears that this patch caused some perf. regression: https://bugs.webkit.org/show_bug.cgi?id=93744</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154570</attachid>
            <date>2012-07-26 01:08:46 -0700</date>
            <delta_ts>2012-07-26 13:36:47 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>butterflies_patch_1.diff</filename>
            <type>text/plain</type>
            <size>33879</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzNzEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEyLTA3LTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBoYXZlIHByb3BlcnR5IGJ1dHRlcmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTkzMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldExl
bmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmFs
bG9jQmFzZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OkJ1dHRlcmZs
eSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpmcm9tQmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbik6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd1Byb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKiBydW50aW1l
L0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEluZGV4
aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNl
dExlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRUeXBlKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aEFuZFR5cGUpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9JbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFNwYXJz
ZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpTcGFyc2VBcnJh
eUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpyZW1vdmUp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpub3RGb3VuZCk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpiZWdpbik6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmVuZCk6CisKIDIwMTItMDctMjUg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWls
ZCBmaXggZm9yIDMyLWJpdCBhZnRlciByMTIzNjgyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDcwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3Rv
cmFnZV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQnV0dGVyZmx5OworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEg
dmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250
YWluZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBU
byBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0
b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0
byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRo
YXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUg
YWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBn
ZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5
U3RvcmFnZSB7CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRl
cmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkp
OyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhp
bmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAg
IAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBm
cm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQor
ICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5z
ZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3Ro
KHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsg
fQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2ln
bmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBm
b3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5k
ZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZf
dCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3IpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAor
I2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNs
dWRlIDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
R2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZs
eSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFT
U0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOwor
ICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZv
aWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNp
dHkgKyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0
aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5KTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVy
biBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSogcHJv
cGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisKKyAgICB2b2lkKiBiYXNl
KHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAg
dm9pZCogYmFzZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgQnV0dGVyZmx5
KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1By
b3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFz
IG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQ
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiwgc2l6ZV90IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2Fw
YWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVy
Zmx5KiB1bnNoaWZ0KHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0
ZXJmbHkuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7
CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEs
IHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVz
dWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlKGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDAp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rp
b24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UodmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBp
bmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0
b3IsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxp
bmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2Fw
YWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNh
cGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBj
cmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNh
cGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+
cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5
Q2FwYWNpdHkpLCB0b3RhbFNpemUob2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
Cit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRl
cigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKK3sKKyAgICBBU1NFUlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOwor
ICAgIHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisg
ICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEs
IHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBv
bGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgCit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmlu
ZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZs
eTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKworZW51bSBJbmRleGluZ1R5cGUgeworICAgIC8vIEZs
YWdzIHRoYXQgY2FuIGJlIHF1ZXJpZWQuCisgICAgSXNBcnJheSAgICAgICAgICAgICAgICAgID0g
MSwKKyAgICBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4LAorCisgICAgLy8gV2Ugc3BlY2lm
eSB0aGUgdmFsdWVzIG9mIHRoZXNlIGVudW0gZWxlbWVudHMgZXhwbGljaXRseSB0byBlbXBoYXNp
emUKKyAgICAvLyB0aGF0IHdlIHJlbHkgb24gdGhlaXIgb3JkZXJpbmcgYW5kIGJpdCBwYXR0ZXJu
cy4KKyAgICBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwLAorICAgIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZSwKKyAgICBBcnJheSAgICAgICAgICAgICAgICAg
ICAgPSBJc0FycmF5LAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBI
YXNBcnJheVN0b3JhZ2UKK307CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZUeXBlQml0cyA9IDQ7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mTGVuZ3RoQml0cyA9IDMyIC0gbnVtYmVyT2ZUeXBlQml0
czsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoTWFzayA9ICgxIDw8IG51bWJlck9m
TGVuZ3RoQml0cykgLSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
ID0gbGVuZ3RoTWFzazsKKyAgICAKKyAgICAvLyBUaGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IElu
ZGV4aW5nSGVhZGVyIGlzIGFsbCB6ZXJvJ3MgaXMgcGFydCBvZiB0aGUKKyAgICAvLyBjb250cmFj
dCBvZiB0aGlzIGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuIFRoZSBKSVQgYW5kIEdD
IGRlcGVuZAorICAgIC8vIG9uIGl0LgorICAgIEluZGV4aW5nSGVhZGVyKCkKKyAgICAgICAgOiBt
X2F1eFdvcmQoMCkKKyAgICAgICAgLCBtX2xlbmd0aEFuZFR5cGUoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGhBbmRUeXBl
ICYgbGVuZ3RoTWFzazsgfQorICAgIEluZGV4aW5nVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8SW5kZXhpbmdUeXBlPihtX2xlbmd0aEFuZFR5cGUgPj4gbnVtYmVyT2ZMZW5n
dGhCaXRzKTsgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoKGludDMyX3QgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9s
ZW5ndGhBbmRUeXBlID0gKG1fbGVuZ3RoQW5kVHlwZSAmIH5sZW5ndGhNYXNrKSB8IGxlbmd0aDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRUeXBlKEluZGV4aW5nVHlwZSB0eXBlKQorICAgIHsK
KyAgICAgICAgbV9sZW5ndGhBbmRUeXBlID0gKG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2sp
IHwgKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSA8PCBudW1iZXJPZkxlbmd0aEJpdHMpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aEFuZFR5cGUoaW50MzJfdCBsZW5ndGgsIElu
ZGV4aW5nVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVt
TGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGhBbmRUeXBlID0gbGVuZ3RoIHwgKHN0YXRpY19jYXN0
PHVpbnQzMl90Pih0eXBlKSA8PCBudW1iZXJPZkxlbmd0aEJpdHMpOworICAgIH0KKyAgICAKKyAg
ICB1aW50MzJfdCBhdXhXb3JkKCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9CisgICAgdm9pZCBzZXRB
dXhXb3JkKHVpbnQzMl90IGF1eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29yZDsgfQorICAgIAor
ICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0
dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJv
bShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAg
ICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQor
ICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFn
ZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRo
aXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHByZUNhcGFjaXR5KCk7CisgICAgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisKK3ByaXZhdGU6CisgICAgdWludDMy
X3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhl
IGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGhBbmRUeXBlOyAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0eXBlLgorfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNp
bmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXpl
X3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5k
ZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElL
RUxZKCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgYXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2
aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBz
dHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewot
ICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNw
YXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5
U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1
ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRy
eSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAg
ICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBM
ZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1
bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAg
ICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDAp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBz
dGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9
IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVk
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhl
Y1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
LSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVy
YXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAg
Ly8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1
bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21h
cC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAu
cmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0
dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29u
c3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3Jl
cG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBh
Y3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0
byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcg
dG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0
LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMu
ICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUg
dGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAv
IHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxh
YmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNp
emVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25l
ZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAg
ICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFz
ZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVw
aW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUg
bGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBO
ZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1
aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7
Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0g
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQot
ICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgV2Fsa2VyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUg
UHJvcGVydHlTdG9yYWdlX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0
b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJv
cGVydHlTdG9yYWdlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5
U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmlu
ZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisK
KyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVl
IGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlT
bG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Cisg
ICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7CisgICAgdHlwZWRlZiBI
YXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKwor
ICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VNb2Rl
ID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAgfTsKKworcHVibGljOgor
ICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBB
ZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAgICAgICAgOiBtX2ZsYWdz
KE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIHNwYXJz
ZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOworICAg
IH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0g
c3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKKyAgICB9CisKKyAgICBi
b29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBM
ZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgp
CisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBM
ZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRh
dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0Fy
cmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIGJvb2wgcHV0
RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOworICAgIGl0
ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8v
IFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0
IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1v
dmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7
IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2Yg
dGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlu
cyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9
CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZh
dGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVw
b3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3Bh
cnNlQXJyYXlWYWx1ZU1hcF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154739</attachid>
            <date>2012-07-26 13:36:47 -0700</date>
            <delta_ts>2012-07-26 15:31:27 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_2.diff</filename>
            <type>text/plain</type>
            <size>57087</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzNzg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMi0wNy0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldExlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5W
ZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OkJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0Mp
OgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hl
YWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5k
ZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldFR5
cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoQW5kVHlwZSk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5k
ZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6
ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmJ1dHRlcmZseSk6CisgICAgICAgICogcnVudGltZS9JbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdElu
ZGV4KToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdl
dEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NwYXJzZUluZGV4aW5nTW9k
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZz
ZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphZGRyZXNzT2ZCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAo
SlNDOjpTcGFyc2VBcnJheUVudHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJz
ZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFy
c2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3Bh
cnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1v
ZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25s
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAo
SlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpub3RGb3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlu
cyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAo
SlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6OmVuZCk6CisgICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBS
ZW1vdmVkLgorCiAyMDEyLTA3LTI2ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW1F0XVtBUk1dQVJNQXNzZW1ibGVyIG5lZWRzIGJ1aWxkZml4IGFmZXJ0
IHIxMjM0MTcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3Rv
cmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5k
ZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gKKworI2luY2x1ZGUgIklu
ZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1
YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBp
dCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3Zl
Y3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0
aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1w
b3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0
b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlv
bi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgor
Ly8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1
Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2Up
OworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3Rh
bnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVi
bGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0
ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5
KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4
aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAg
ICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMg
ZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0K
KyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+
c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1
cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0
aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7
IH0KKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNp
Z25lZCBtX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3Qg
Zm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbklu
ZGV4OworICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gK
KyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1
ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5j
bHVkZSA8d3RmL1Byb3BlcnR5T2Zmc2V0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
U0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJm
bHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMg
QnV0dGVyZmx5KiBlbXB0eVNpbmdsZXRvbigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjplbXB0
eVNpbmdsZXRvbigpLT5idXR0ZXJmbHkoKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90
YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICBy
ZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2Us
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNv
ZGVkSlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChK
U0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRl
cmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNy
ZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVy
aW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAg
ICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3Jh
Z2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBUKiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFQqPih0aGlzKTsgfQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4g
aW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQorCisgICAgdm9pZCogYmFzZShzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQq
IGJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEJ1dHRlcmZseSogZ3Jv
d1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpT
R2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNo
LgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0
KHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZp
bmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
eworICAgIHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJu
IGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5Q2Fw
YWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRleGlu
Z0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERh
dGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2Uodmlz
aXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRl
cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHByb3Bl
cnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0
dGVyZmx5OjpiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBiYXNl
KGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkpOworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xk
UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRp
YWxpemVkKGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9y
YWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0
b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
b2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAg
cmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICBBU1NFUlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAgIHZvaWQq
IGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAg
ICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHByb3BlcnR5
Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCks
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBv
bGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNp
dHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5i
YXNlKHByb3BlcnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUo
MCwgcHJvcGVydHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNh
cGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0
dXJuIHJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5
KCksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKCksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5l
TWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit1aW50NjRfdCBJbmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5k
ZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9w
ZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRlZiB1
bnNpZ25lZCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5j
ZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAg
ID0gMTsKK3N0YXRpYyBjb25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAg
ICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Ug
PSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAg
ID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0Fy
cmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9mVHlw
ZUJpdHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBudW1i
ZXJPZkxlbmd0aEJpdHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxl
bmd0aCA9IGxlbmd0aE1hc2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBlbXB0
eVNpbmdsZXRvbigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRl
eGluZ0hlYWRlcio+KCZzX2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhl
IGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBh
cnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBi
ZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRl
eGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGhB
bmRUeXBlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGluZ1R5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9sZW5n
dGhBbmRUeXBlID4+IG51bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNldExl
bmd0aChpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4
aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUg
JiB+bGVuZ3RoTWFzaykgfCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlwZShJ
bmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xl
bmd0aEFuZFR5cGUgJiBsZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkg
PDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGhB
bmRUeXBlKGludDMyX3QgbGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlw
ZSA9IGxlbmd0aCB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5n
dGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1f
YXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4
V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20o
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihhcnJh
eVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5
U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0
eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBcnJh
eVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHByZUNhcGFj
aXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisKK3ByaXZh
dGU6CisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxk
IGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGhBbmRUeXBl
OyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0
eXBlLgorICAgIAorICAgIHN0YXRpYyB1aW50NjRfdCBzX2VtcHR5U2luZ2xldG9uOyAvLyBVc2Ug
YSBQT0QgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgZ29vZCB0aGluZ3MuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIElu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5o
IgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoKQoreworICAgIGlmIChMSUtFTFko
ISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKQoreworICAgIGlm
IChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBhcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwOSArMzAsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBKU0FycmF5OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAot
ICAgIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3du
PiB7Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAg
ICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJv
cGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYp
IGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJh
eVZhbHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJh
eUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAg
ICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAg
ICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFw
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFk
ZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAg
ICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNp
dHkoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFn
cyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Zs
YWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5z
aWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVj
dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7Ci0gICAgICAg
IGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQotICAg
ICAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhl
IHJlc3VsdCBvZiB0aGUgZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7
IG1fbWFwLnJlbW92ZShpdCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBt
X21hcC5yZW1vdmUoaSk7IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRh
dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnModW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8gT25seSBhbGxv
dyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIE1hcCBtX21hcDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAgICAgc2l6ZV90
IG1fcmVwb3J0ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMg
dGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9p
bnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVjdCBieSBwb2lu
dGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBz
dHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0
aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJl
Zm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBxdWljayB1bnNo
aWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBh
dmFpbGFibGUgYnkgdXNpbmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFz
ICogc2l6ZW9mKEpTVmFsdWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0gICAgICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhlIGFycmF5Ci0g
ICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxs
b2NCYXNlOyAvLyBQb2ludGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBtYWxsb2MoKS4g
IEtlZXBpbmcgdGhpcyBwb2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9t
IHRoZSBsZWFrIGRldGVjdG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAg
IC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCi0gICAg
ICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBt
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0cl90IG1fcGFk
ZGluZzsKLSNlbmRpZgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07
Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9y
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Ip
OyB9Ci0gICAgfTsKLQogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBXYWxrZXI7CkBAIC0xNzAsMTggKzY3LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAg
ICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6
Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAg
ICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0
aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFi
bGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGly
ZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCkBAIC0xOTksNjQgKzg0LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBj
b3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkg
PCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpT
VmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25l
ZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRl
eChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5n
dGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9y
YWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0g
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0g
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5k
ZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBz
ZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAg
IC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1i
ZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBB
U1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxp
bmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1l
bnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVt
YmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4K
LSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0
dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQg
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVu
Z3RoKTsKIApAQCAtMzA1LDI1ICsxMzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKIAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAg
ICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKIAotICAgICAg
ICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVz
dHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAg
IHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNp
c3RlbmN5Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUg
dmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAv
LyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2Uu
CiAgICAgICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwogCi0gICAgICAgIC8vIEZJWE1FOiBN
YXliZSBTcGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2Vs
bD8KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQogICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9CiAgICAgICAgIHN0YXRp
YyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
QXJyYXksIG1faW5kZXhCaWFzKTsgfQogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIs
MTQ1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBw
dXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3Rv
dHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUg
bm90IGNhbGxlZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdp
dGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBz
ZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9
IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJv
cGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSBnZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNh
blNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwor
ICAgICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Cisg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0
IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwK
KyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9y
ZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsr
OworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbXBsZXRlSW5p
dGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhh
dmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisg
ICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0
b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVk
IG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgaXNTcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fc3BhcnNlTWFwOworICAgICAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFy
c2VNb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgLy8gcHV0
RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2RlZmluZU93blBy
b3BlcnR5JzoKICAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3Vs
dGVkCkBAIC0yMDMsOCArMzQyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZM
aW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQorICAgICAg
ICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
OyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHk7
IH0KKyAgICAgICAgCisgICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNv
bnN0CiAgICAgICAgIHsKQEAgLTIyNyw3ICszNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
bGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0
aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpOwogICAgICAgICAgICAgdmFsaWRhdGVP
ZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjcwLDE1ICs0MTIsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhl
Y1N0YXRlKiBleGVjKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3Jh
Z2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgc2V0QnV0
dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwogICAgICAgICAK
ICAgICAgICAgYm9vbCByZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYs
IHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVB
bmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OwogCi0gICAgICAgIHZvaWQqIGFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKQorICAgICAgICB2
b2lkKiBhZGRyZXNzT2ZCdXR0ZXJmbHkoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Jm1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKQEAgLTI5NCw3ICs0MzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0
b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KTsKKyAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkJ1dHRlcmZseSgpOwogCiAgICAgICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTM0Nyw4
ICs0ODksMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBm
aW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAg
ICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNl
QXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
KTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgICAg
ICB2b2lkIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZv
aWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpOworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIG5ld0xlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVT
dG9yYWdlOworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lz
dGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNo
ZWNrIH07CisgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlw
ZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgQnV0dGVyZmx5
IG1fYnV0dGVyZmx5OwogICAgIH07CiAKIApAQCAtNTQyLDcgKzY5OCw3IEBAIGlubGluZSBKU09i
amVjdCogYXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKIAogaW5saW5lIEpTT2JqZWN0OjpKU09iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDog
SlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShn
bG9iYWxEYXRhLCB0aGlzLCAwKQorICAgICwgbV9idXR0ZXJmbHkoZ2xvYmFsRGF0YSwgdGhpcywg
QnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyMzY5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQo
aXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7
CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9w
ZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFn
ZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0
eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9y
YWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisjZGVmaW5lIFNw
YXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxV
bmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAg
IFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3Qm
KSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKKyAgICBK
U1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOworCisgICAg
ZW51bSBGbGFncyB7CisgICAgICAgIE5vcm1hbCA9IDAsCisgICAgICAgIFNwYXJzZU1vZGUgPSAx
LAorICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKKyAgICB9OworCitwdWJsaWM6CisgICAg
dHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJl
c3VsdDsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQorICAgICAgICA6IG1fZmxhZ3MoTm9y
bWFsKQorICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9k
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQor
CisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0
aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wg
bGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0
aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAg
ICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0
aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0
aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkq
LCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJl
Y3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0
b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhp
cyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2Yg
dGhlIGZpbmQpLgorICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShp
dCk7IH0KKyAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQor
CisgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUg
bWFwLgorICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkp
OyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAg
ICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToK
KyAgICBNYXAgbV9tYXA7CisgICAgRmxhZ3MgbV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRl
ZENhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VB
cnJheVZhbHVlTWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rv
cmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3Rv
cmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJy
aWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAg
IFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwg
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwg
b3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0
eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3Jh
Z2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYs
IEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9z
dG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlT
dG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFn
ZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAq
bV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7
IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1
cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsg
cmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
bV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154770</attachid>
            <date>2012-07-26 15:31:27 -0700</date>
            <delta_ts>2012-07-26 16:05:35 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_3.diff</filename>
            <type>text/plain</type>
            <size>67209</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzODAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wNy0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldExlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjpzZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmNvcHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgICogcnVudGltZS9C
dXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNp
emUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ1BheWxvYWQp
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNl
dExlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRUeXBlKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aEFuZFR5cGUpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pT
Q2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJm
bHlPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAg
ICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2ts
eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXpl
SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0
T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlv
bik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9Qcm9wZXJ0eU9mZnNldC5oOgorICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAoU3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChK
U0M6OlNwYXJzZUFycmF5RW50cnk6OlNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OlNwYXJz
ZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFy
c2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9k
ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChK
U0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6Om5vdEZvdW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5z
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChK
U0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6ZW5kKToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpKU0NlbGwpOgorCiAyMDEyLTA3LTI2ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dQVJNQXNzZW1ibGVyIG5lZWRzIGJ1aWxkZml4
IGFmZXJ0IHIxMjM0MTcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisK
KyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gKKworI2luY2x1
ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRo
ZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50
cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0
byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3Qs
IHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQg
aXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBB
cnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9w
ZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVz
aW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUp
CitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0
b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5
IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5
LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5
KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0
dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIq
IGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7
IH0KKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJ
bmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBm
aWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3Jk
KCk7IH0KKyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFk
ZXIoKS0+c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkg
eyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxl
bmd0aCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29u
c3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3Ro
ZXIubV9zcGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7
CisgICAgICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9y
OworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25J
bmRleCA9IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYK
KyAgICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAg
dW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsK
KyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0
cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRp
b25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZs
eV9oCisjZGVmaW5lIEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
I2luY2x1ZGUgPHd0Zi9Qcm9wZXJ0eU9mZnNldC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNHbG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEJ1dHRlcmZseSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0
dGVyZmx5KCkgeyB9IC8vIE5vdCBpbnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogZW1wdHlTaW5nbGV0b24oKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6
ZW1wdHlTaW5nbGV0b24oKS0+YnV0dGVyZmx5KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAg
ICAgcmV0dXJuIChwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBi
YXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWU+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsg
MSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0
ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0K
KyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0
dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKworICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2
b2lkKiBiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdo
dChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMg
bXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogdW5z
aGlmdChzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisj
ZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQnV0dGVyZmx5Lmgi
CisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAgICAgICBDUkFTSCgpOworICAgIHJl
dHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1
dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBwcm9wZXJ0
eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgKnJlc3VsdC0+aW5k
ZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9i
YWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNl
KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdI
ZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKHNsb3RWaXNpdG9yLCAwLCBw
cm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIHZvaWQq
IEJ1dHRlcmZseTo6YmFzZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4g
YmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpLCBwcm9wZXJ0eUNhcGFjaXR5KTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3Qg
bmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+
IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5p
bml0aWFsaXplZChnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShyZXN1bHQtPnByb3BlcnR5
U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwgYmFzZShvbGRQcm9wZXJ0eUNhcGFjaXR5
KSwgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KCksIG9sZFByb3BlcnR5U3RvcmFnZSwgaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgQVNTRVJUKCFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpKTsKKyAgICB2
b2lkKiBiYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgKKyAgICAgICAgICAgICZiYXNlLAorICAgICAg
ICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gZnJvbUJhc2UodGVtcCwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBwcm9w
ZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cygpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNh
cGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBj
cmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3Vs
dC0+YmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgdG90YWxT
aXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9sZEluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IHJldHVybiByZXNpemVBcnJheShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eSgpLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcygpLCBuZXdQcmVDYXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlu
bGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordWludDY0X3QgSW5kZXhpbmdIZWFkZXI6OnNfZW1wdHlTaW5nbGV0b247CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAi
UHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBBcnJheVN0b3JhZ2U7CisKK3R5cGVk
ZWYgdW5zaWduZWQgSW5kZXhpbmdUeXBlOworCisvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJl
c2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGljIGNvbnN0IElzQXJyYXkgICAgICAgICAgICAg
ICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJyYXlTdG9yYWdlICAgICAgICAgID0gODsKKwor
Ly8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3RhdGljIGNvbnN0IE5vbkFycmF5
ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0IEFycmF5ICAgICAgICAgICAgICAg
ICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0g
SXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlR5cGVCaXRzID0gNDsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZMZW5ndGhCaXRzID0gMzIgLSBudW1iZXJP
ZlR5cGVCaXRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsZW5ndGhNYXNrID0gKDEgPDwg
bnVtYmVyT2ZMZW5ndGhCaXRzKSAtIDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGlt
dW1MZW5ndGggPSBsZW5ndGhNYXNrOworICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZW1wdHlTaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
SW5kZXhpbmdIZWFkZXIqPigmc19lbXB0eVNpbmdsZXRvbik7CisgICAgfQorICAgIAorICAgIC8v
IFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBp
cyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBu
b3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAg
SW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4V29yZCgwKQorICAgICAgICAsIG1fbGVu
Z3RoQW5kVHlwZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aEFuZFR5cGUgJiBsZW5ndGhNYXNrOyB9CisgICAgSW5kZXhp
bmdUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxJbmRleGluZ1R5cGU+KG1f
bGVuZ3RoQW5kVHlwZSA+PiBudW1iZXJPZkxlbmd0aEJpdHMpOyB9CisgICAgCisgICAgdm9pZCBz
ZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9
IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRU
eXBlICYgfmxlbmd0aE1hc2spIHwgbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFR5
cGUoSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSAo
bV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzaykgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5
cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0TGVu
Z3RoQW5kVHlwZShpbnQzMl90IGxlbmd0aCwgSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aEFu
ZFR5cGUgPSBsZW5ndGggfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9m
TGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVy
biBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBt
X2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBm
cm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4o
YXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9w
ZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJv
cGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAg
QXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1l
dGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJl
CisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVf
dCBwcmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygp
OworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2Yg
dGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVu
Z3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdl
IGFuZCBpdHMgdHlwZS4KKyAgICAKKyAgICBzdGF0aWMgdWludDY0X3Qgc19lbXB0eVNpbmdsZXRv
bjsgLy8gVXNlIGEgUE9EIHRvIGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIGdvb2QgdGhp
bmdzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRl
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAor
I2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KCkKK3sKKyAgICBp
ZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lu
bGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCkK
K3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNl
OwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAg
ICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZv
aWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURl
c2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29u
c3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3Mg
U3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwg
U3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFn
cyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEs
Ci0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1
YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0
eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBv
cnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlz
aXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFk
T25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNB
cnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9v
bCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQp
OwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQo
aSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQg
KGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVy
YXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2ln
bmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBk
byBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBu
b3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5z
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8v
IE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAg
ICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3Ry
dWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkg
b2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1
Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3Rv
cmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBi
ZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8g
cXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBv
aW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBt
X2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2Ugewot
ICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRo
ZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2
b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkg
bWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3Np
dGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5D
WQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBv
c2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1
aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRw
dHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
dmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwpAQCAtMTcwLDE4ICs2Nyw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0
KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25z
dWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAv
LyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxl
LCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBi
b29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBP
UlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIApAQCAtMTk5LDY0ICs4NCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwg
dW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7
IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQot
ICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5k
ZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZv
aWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBB
cnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkg
KyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJ
bmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAg
IEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRo
ZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0g
ICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFu
IHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+
bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0g
ICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NF
UlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5n
dGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFs
aXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0
aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRp
YWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFT
U0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAg
bV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAg
ICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAg
ICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7
CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVp
bnQzMl90IGxlbmd0aCk7CiAKQEAgLTMwNSwyNSArMTMyLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAogICAgICAgICBib29sIGdldE93
blByb3BlcnR5U2xvdFNsb3dDYXNlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVjdG9y
TGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJvb2wg
dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwogICAg
ICAgICAKICAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7
CiAKLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5
Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9
OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBO
b3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBtX3ZlY3Rvckxlbmd0
aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1bnNpZ25lZCBtX2lu
ZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2NrcyBiZWZvcmUgQXJy
YXlTdG9yYWdlLgogICAgICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsKIAotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUgcHV0IGludG8gaXRz
IG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVN
YXA7Ci0KICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQogICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KICAgICB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxU
YWcpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0
ZXJmbHkqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAogICAgIHB1YmxpYzoKQEAgLTE0MCw2ICsxNDAsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1f
YnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5
QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7Cisg
ICAgICAgIH0KIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUq
IHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRH
ZXQoKTsgfQpAQCAtMTcwLDYgKzE4MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAg
ICAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKICAgICB9OwogCiAgICAgaW5saW5lIEpTQ2VsbDo6
SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwyOSAr
ODYsNzAgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0K
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2Uo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBzaXplX3Qgc3Rv
cmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VT
aXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAg
ICBBU1NFUlQoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAg
QVNTRVJUKHN0b3JhZ2VTaXplKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNp
emVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2Ug
LSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5P
dGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFn
ZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0
eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsg
MTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsK
KyAgICBJbmRleGluZ0hlYWRlciYgaGVhZGVyID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KTsKKyAgICAKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IGhlYWRlci5wcmVDYXBh
Y2l0eSgpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGhlYWRlci5p
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpOworICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMg
PSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVj
a0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0Nv
bGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBh
bmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRU
YXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICBQcm9wZXJ0
eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpOwogICAg
ICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
VmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3Jh
Z2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxz
ZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAx
LCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBh
cnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChoZWFkZXIudHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdl
KCktPmNvcHlIZWFkZXJGcm9tKCpzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdTdG9yYWdlLT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1
ZSk7CisgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAg
IG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNp
emUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUu
CisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3IsIHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXApCisgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKQEAgLTEyMiw5ICsxNjMsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRP
ZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVy
Zmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkKKyAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CkBAIC0xNDIsOSArMTgzLDkg
QEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5
U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlm
IChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2Uodmlz
aXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JL
bm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2lu
Z2xldG9uKCkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1
dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZp
bmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7CiAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBA
IC02MDMsMjYgKzY0NCwxNCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJ
RChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9m
TGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6
ZV90IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIAogICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUo
KSwgc2luY2UKICAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlv
bi4KICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9vdXRP
ZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0b3Jh
Z2UgPSAwOwotCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFrZSBH
Q0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlwZS1w
dW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsKLSAg
ICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBDUkFTSCgpOwot
ICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVt
cCkgKyBuZXdTaXplICsgMTsKLSAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0g
b2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKLQotICAgIEFTU0VSVChuZXdQcm9w
ZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7CisgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsx
MjIsMTQ1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlz
IHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHBy
b3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBh
cmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5
IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFs
bCBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHko
cHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSBnZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICht
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
OworICAgICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1f
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBu
ZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgLy8gdHJ5Q3JlYXRl
VW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0
aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUg
bW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCisgICAgICAgICAgICAgICAgQVNT
RVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRl
eCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgo
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbXBsZXRl
SW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdl
IGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUu
CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBt
X3N0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxp
emVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKG1f
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgaXNTcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwOworICAgICAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5z
cGFyc2VNb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgLy8g
cHV0RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2RlZmluZU93
blByb3BlcnR5JzoKICAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29u
c3VsdGVkCkBAIC0yMDMsOCArMzQyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0
T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQorICAg
ICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVy
Zmx5OyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJm
bHk7IH0KKyAgICAgICAgCisgICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0
b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0K
KyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1
dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgICAgICBjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
IGNvbnN0CiAgICAgICAgIHsKQEAgLTIyNyw3ICszNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxv
Y2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpOwogICAgICAgICAgICAgdmFsaWRh
dGVPZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjY5LDE4ICs0MTEsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsgcmV0
dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCk7IH0KICAgICAgICAgdm9p
ZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFnZSBncm93T3V0T2ZMaW5lU3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgICAg
ICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9yYWdl
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0ZXJm
bHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgcmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0
dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7
CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZP
dXRPZkxpbmVTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9m
TGluZVN0b3JhZ2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5
T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAg
c3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMp
OwpAQCAtMjk0LDcgKzQzMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwotICAgICAg
ICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpOwogCiAgICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMyNiw3ICs0
NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJlbW92ZURpcmVjdChnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYsIFByb3BlcnR5
U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZs
eShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CkBAIC0zNDcsOCArNDgzLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IEhh
c2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRh
Jik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9u
KTsKKyAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOwor
ICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBk
ZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1f
b3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5v
cm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29u
c2lzdGVuY3lDaGVjayB9OworICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVu
Y3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKICAgICB9OwogCiAKQEAgLTU0
MSw4ICs2ODksNyBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB9
CiAKIGlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
Ci0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICA6IEpT
Q2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZz
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU9mZnNldC5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAg
aW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZhbGlkYXRl
T2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwot
ICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGlu
ZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQg
LSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6ZV90IG9mZnNldElu
UmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUHJv
cGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKworI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJz
ZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlF
bnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVC
YXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1
dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7
CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVy
dHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlW
YWx1ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5
LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwg
PSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9
IDIsCisgICAgfTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRv
cjsKKyAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAg
dHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKCkKKyAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2Fw
YWNpdHkoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CisKKyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZmxhZ3MgJiBTcGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisg
ICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFy
c2VNb2RlKTsKKyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZv
aWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGlj
X2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAv
LyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2
b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOworICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNp
Z25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU0Fy
cmF5KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4g
bV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlz
IHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShp
dGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWdu
ZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90
IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgp
IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9l
bmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1f
ZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24g
MTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
dG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7
Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlT
dG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNo
ZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAg
IHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAg
Ci0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRh
ZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3
U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRU
YWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3It
PigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4g
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4m
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQot
ICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2Niw5ICs1NjYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBpbmxpbmUg
SlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogbV9jbGFzc0luZm8oc3RydWN0
dXJlLT5jbGFzc0luZm8oKSkKICAgICAgICAgLCBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlz
LCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogICAgIHsKICAg
ICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154779</attachid>
            <date>2012-07-26 16:05:35 -0700</date>
            <delta_ts>2012-07-27 13:50:43 -0700</delta_ts>
            <desc>this isn&apos;t going to be a small change.</desc>
            <filename>butterflies_patch_4.diff</filename>
            <type>text/plain</type>
            <size>92481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzODA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBA
QAorMjAxMi0wNy0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpz
ZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmNvcHlIZWFkZXJG
cm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDog
QWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpp
bmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ1BheWxvYWQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAg
ICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChJbmRleGluZ0hlYWRlcik6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4
aW5nSGVhZGVyOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6dHlwZSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRMZW5ndGhBbmRUeXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmF1eFdv
cmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXV4V29yZCk6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNBcnJh
eSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJldmVu
dEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3Jh
Z2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1Nw
YXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpK
U09iamVjdCk6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZSk6
CisgICAgICAgIChKU0M6OmluZGV4UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAoSlNDOjpvZmZz
ZXRSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oOgor
ICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRp
bWUvUHJvcGVydHlTdG9yYWdlLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBy
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAoU3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6
OlNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoU3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFsdWVNYXApOgorICAg
ICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZvdW5k
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToKKyAg
ICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRk
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9u
U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2Vs
bCk6CisKIDIwMTItMDctMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBKU0FycmF5IGhhcyBtZXRob2RzIHRoYXQgYXJlIG5laXRoZXIgdXNlZCBub3IgZGVmaW5l
ZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVu
dGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKwor
I2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE92ZXJ2
aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkg
YmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICog
QSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJvcGVydGllcyB3aXRoIG5v
bi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXBy
ZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUg
aXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMg
aXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWdu
ZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBB
bGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMg
YW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwg
YXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBz
dG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBi
ZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJl
IChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJz
ZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAg
ICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUg
c3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBk
ZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9y
IChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5z
aXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAg
KiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFy
cmF5LgorCisvLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlz
IGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQorLy8gZnVuY3Rpb24gYmVs
b3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2gg
dGhhdCB0aGUgc3RvcmFnZQorLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAo
c2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwor
Ly8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJl
IDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCisjZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZG
RkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKKworLy8gVGhlc2UgdmFs
dWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhv
dXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8
cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
MTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBh
biBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCisjZGVmaW5lIE1BWF9B
UlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKKy8v
IGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChl
LmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCisgICAg
CisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3Ro
IGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgorI2RlZmluZSBGSVJT
VF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3Rv
ciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8gRm9yIGFsbCBhcnJheSBpbmRpY2Vz
IHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCisv
LyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGlu
dm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElm
IG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgorc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5saW5lIGJvb2wgaXNEZW5zZUVub3Vn
aEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKK3sKKyAgICBy
ZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVu
c2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDg3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3Rv
cmFnZV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworCisvLyBUaGlz
IHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0Fy
cmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1
Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdl
KCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNw
YWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVu
c2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlz
IGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdlKCkgeyB9
IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQgYXMgcGFy
dCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdl
KiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEFy
cmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9t
KEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIt
PmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVh
ZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAgICAv
LyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVu
Z3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9Cisg
ICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVy
KCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNv
cHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisgICAgeworICAgICAgICBt
X3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBtX2luZGV4QmlhcyA9IG90
aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBt
X2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAg
ICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1f
c3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVt
VmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVk
cyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJf
dCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRp
bmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAg
CisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9j
QmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxs
b2NCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJy
YXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9w
ZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitj
bGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citw
cml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGlj
OgorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAgCisg
ICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSog
ZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZs
eSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJv
cGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXIm
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
c3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5n
SGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMg
QnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRl
cigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVydHlT
dG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBhcnJh
eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9Cisg
ICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9Cisg
ICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2Uoc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5
U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3Vt
ZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAgIEJ1
dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVy
Zmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KHNpemVfdCBu
dW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0
dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVy
Zmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHZv
aWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGZyb21CYXNl
KHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHksIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHBy
b3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
OworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1
cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHByb3BlcnR5Q2FwYWNp
dHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5Ojpi
YXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlD
YXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGds
b2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUo
MCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdy
b3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNp
dHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NF
UlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAgIHZvaWQqIGJhc2UgPSBi
YXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJl
YWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAgICB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAor
ICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBmcm9tQmFz
ZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHks
IGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQ
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5iYXNlKHByb3Bl
cnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIHJlc2l6
ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3Bl
cnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KCksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50
NjRfdCBJbmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFk
ZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3Jh
Z2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRlZiB1bnNpZ25lZCBJ
bmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBh
YmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0
YXRpYyBjb25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBMaXN0IG9mIGFj
Y2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAgICAg
ICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJh
eVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJh
eTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFz
QXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9mVHlwZUJpdHM7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBudW1iZXJPZkxlbmd0
aEJpdHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxlbmd0aCA9IGxl
bmd0aE1hc2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBlbXB0eVNpbmdsZXRv
bigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KCZzX2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhh
dCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhl
CisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2Vk
LiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRl
cigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGhBbmRUeXBlKDAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGluZ1R5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9sZW5ndGhBbmRUeXBl
ID4+IG51bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChpbnQz
Ml90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0
aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiB+bGVuZ3Ro
TWFzaykgfCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlwZShJbmRleGluZ1R5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5
cGUgJiBsZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVy
T2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGhBbmRUeXBlKGlu
dDMyX3QgbGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChs
ZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IGxlbmd0
aCB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsK
KyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsg
fQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1
eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5
KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRl
eGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5k
ZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihhcnJheVN0b3JhZ2Up
IC0gMTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+
KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0
b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29u
c3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBcnJheVN0b3JhZ2Uq
IGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxB
cnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZs
eSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90
IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUKKyAgICAvLyB1c2Vk
IG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6ZV90IHByZUNhcGFjaXR5
KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisKK3ByaXZhdGU6
CisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRl
cGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGhBbmRUeXBlOyAv
LyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0eXBl
LgorICAgIAorICAgIHN0YXRpYyB1aW50NjRfdCBzX2VtcHR5U2luZ2xldG9uOyAvLyBVc2UgYSBQ
T0QgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgZ29vZCB0aGluZ3MuCit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNp
emVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoKQoreworICAgIGlmIChMSUtFTFkoISh0
eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJ
bmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKQoreworICAgIGlmIChM
SUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBhcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDU5ICs0NSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklB
TF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8g
UHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhy
ZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4K
LS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBl
bnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywg
d2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5z
aWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FS
UkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0g
dGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikg
YXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRo
ZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51
bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwK
LS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQg
d2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNw
YXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93
aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0v
LyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxs
IHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2ls
bCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRo
ZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEg
dGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3
aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBl
bnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZF
Q1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMg
YmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRp
b24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmlu
aXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNp
emUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2gg
aXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5
U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0
byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJ
QyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+
LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RP
UkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhG
RkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91
Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUK
LQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
dmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMg
Y3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykp
Ci0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRv
IHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBl
bGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8g
T3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3Bh
cnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIg
dGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9y
Ci0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQs
IHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGll
ciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpT
Tm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5
KX07CiAKIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0
ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKQEAgLTEwNSwxMSArNTIsNiBAQCBjb25zdCBD
bGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJhCiAvLyBUaGlzIHZhbHVlIGlzIGNhcHBl
ZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KIHN0YXRp
YyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKIAotc3RhdGljIGlubGluZSBib29sIGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17
Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAv
IG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQogc3RhdGljIGJvb2wgcmVq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVz
c2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkBAIC0xODcsMTM1ICsxMjksNiBAQCB2
b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5kZWFs
bG9jYXRlU3BhcnNlTWFwKCk7CiB9CiAKLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRS
ZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBp
KQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21h
cC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7
Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFw
OjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0
ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZp
cnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9u
IGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAot
ICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRv
bmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJh
eS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAg
ICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBl
bnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7
Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVy
KCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywg
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRl
bnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VS
VCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewot
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwot
ICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQot
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0
KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJ
S0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigp
OwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRo
b2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2Fs
bChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNl
TW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFz
ZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAu
ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCiB2b2lkIEpT
QXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAg
ICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CkBAIC0zMjgsNDIg
KzE0MSw2IEBAIHZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCiAgICAgbV9zcGFy
c2VWYWx1ZU1hcCA9IDA7CiB9CiAKLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVN
YXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxE
YXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNl
TW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5t
X2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3
IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAg
ICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVt
LgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVy
YXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAg
dm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8
QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1f
c3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0g
bmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFz
ID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KIHZvaWQgSlNBcnJheTo6cHV0RGVz
Y3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNj
cmlwdG9yKQogewogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTIzNjk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMDkgKzMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJh
eTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNl
QXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBl
ZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50
cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUq
LCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0
OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAg
SlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRI
YXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRf
dD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAw
LAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRP
bmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0
OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdz
KE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwot
Ci0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3Bh
cnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxG
bGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBs
ZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3Mg
JiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJ
c1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0
PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAg
ICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNB
cnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRk
UmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVu
c2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91
bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZp
bmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQp
OyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9
Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVu
ZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1w
dHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5k
IGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7
Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNp
dHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2
YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRh
aW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3Iu
ICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdl
dFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBv
cnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3Rv
cmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJh
dGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5n
OgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVl
KQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsg
Ly8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBt
X251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRl
ciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9p
bnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rv
ci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBh
IHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9p
bml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRp
YyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFz
ZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NC
YXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAg
ICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fs
a2VyOwpAQCAtMTcwLDE4ICs2Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1p
bGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0
aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNz
b3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAgICAgICAgIApAQCAtMTk5LDY0ICs4NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBi
b29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAg
Ym9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGgg
JiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVu
c2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8
IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAg
ICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAg
ICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgot
ICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsK
LSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5W
ZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBu
b3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMu
Ci0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdl
LT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJ
bml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMg
d2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBu
ZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVz
IGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NF
UlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5T
cGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5z
cGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNT
dGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKQEAgLTI3Nyw4
ICsxMDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICAg
ICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0zMDUsMjUgKzEzMCwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKICAgICAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBi
b29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsK
ICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0
YSYpOwogCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0
ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hl
Y2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JM
ZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQg
bV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3Jl
IEFycmF5U3RvcmFnZS4KICAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7CiAKLSAgICAg
ICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRv
IGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZh
bHVlTWFwOwotCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0K
ICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlD
ZWxsVGFnKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOworICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
QnV0dGVyZmx5Kik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKICAgICBwdWJsaWM6CkBAIC0xNDAsNiArMTQwLDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX2J1dHRlcmZseSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRl
cmZseUFkZHJlc3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5
OworICAgICAgICB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0
dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRh
dGVkR2V0KCk7IH0KQEAgLTE3MCw2ICsxODAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Nl
bGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
MjkgKzg2LDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAg
ICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9y
YWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90
IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9y
YWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwog
ICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAg
ICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9y
YWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5k
UGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0
b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2Fw
YWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdl
dCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAt
IDE7CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJl
Q2FwYWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFk
ZXIuaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5
dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7
CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJp
bmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1h
cmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJv
cGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVT
dG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXpl
IC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3Rv
cmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
dmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAg
ICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3Jh
Z2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJp
YXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQog
CiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC0xMjIsOSArMTYzLDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+
b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1
dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCisgICAgICAgIHRoaXNPYmpl
Y3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4
Myw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAg
ICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAg
ICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdl
KHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXpl
Rm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0
eVNpbmdsZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9y
LCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUp
OwpAQCAtMjQwLDYgKzI4MSw0OSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwog
fQogCit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPnR5cGUoKSkgewor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3Rv
cmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAgICAgaWYgKCFtYXApIHsKKyAgICAgICAgICAgIGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOyAvLyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhh
dCB0aGVyZSBtYXkgaGF2ZSBiZWVuIGEgcmVhbGxvY2F0aW9uLgorICAgICAgICAgICAgbWFwID0g
c3RvcmFnZS0+bV9zcGFyc2VNYXA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWFwLT5zcGFy
c2VNb2RlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VN
b2RlKCk7CisKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
YWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2Ug
Y2FuIHdyaXRlLAorICAgICAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28g
bm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
ICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fc3RvcmFnZS0+cmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIDAsIDApOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5
OworICAgICAgICBtX2J1dHRlcmZseS0+bV9pbmRleEJpYXMgPSAwOworICAgICAgICBtX2J1dHRl
cmZseS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSk7CkBAIC01MTUsOCArNTk5LDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXpl
KEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAg
ICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAg
ICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0
ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpw
cmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0K
QEAgLTYwMywyNiArNjg2LDE0IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRv
cklEKEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09i
amVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0
T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCiAgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVy
ZSgpLCBzaW5jZQogICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0
aW9uLgogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291
dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3Rv
cmFnZSA9IDA7Ci0KLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtl
IEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBl
LXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwot
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0
ZW1wKSArIG5ld1NpemUgKyAxOwotICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2Ug
LSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOwotCi0gICAgQVNTRVJUKG5ld1By
b3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwg
bmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYg
KzEyMiwxNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMg
aXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUg
cHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3Jz
IGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVy
dHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUg
YWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
KTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhl
IG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3Rv
cmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0cnlDcmVh
dGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVu
Z3RoLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6
ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0
aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY29tcGxl
dGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
d2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2
ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09
IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlh
bGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpc1NwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcCAmJiBtYXAt
PnNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICAv
LyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVmaW5l
T3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBj
b25zdWx0ZWQKQEAgLTIwMyw4ICszNDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Cisg
ICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0
ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRl
cmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsg
fQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1f
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzM2OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVf
dD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZz
ZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0g
bG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxp
ZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjksMTggKzQxMSwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsgfQogICAgICAgICB2
b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dPdXRPZkxpbmVTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAg
ICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eVN0b3Jh
Z2UsIFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdy
b3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1dHRl
cmZseSosIFN0cnVjdHVyZSopOwogICAgICAgICAKICAgICAgICAgYm9vbCByZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlm
TmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUq
KTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNz
YXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQqIGFkZHJlc3NP
Zk91dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1fb3V0
T2ZMaW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25h
cnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAg
ICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgdGhp
cyk7CkBAIC0yOTQsNyArNDMxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAg
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CiAKICAgICAgICAg
c3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzI2LDcg
KzQ2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVy
dHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVy
Zmx5KFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKQEAgLTM0Nyw4ICs0ODMsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3Qg
SGFzaEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERh
dGEmKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0
YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVz
Y3JpcHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhl
Y1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRp
b24pOworICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAg
ICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGRlc2lyZWRMZW5ndGgpOworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIg
bV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsg
Tm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRD
b25zaXN0ZW5jeUNoZWNrIH07CisgICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0
ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwogICAgIH07CiAKIApAQCAt
NTQxLDggKzY4OSw3IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkK
IH0KIAogaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCB0aGlzLCAwKQorICAgIDog
SlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigp
KQogewogfQogCkBAIC05NDMsMTMgKzEwOTAsMTMgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRSZWxh
dGl2ZVRvUGF0Y2hlZFN0bwogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQog
ICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgcmV0dXJu
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
IH0KIAogaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJu
IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0
b3JhZ2UoKTsKICAgICBBU1NFUlQoIShKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
JSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KQEAgLTk1Nyw3ICsxMTA0LDcgQEAgaW5saW5lIGludCBpbmRl
eFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5TwogaW5saW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewog
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0
KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBm
aXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6
ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0
b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKwor
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisj
aWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFw
X2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
U3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5
cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5
KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09i
amVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIHZv
aWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0Tm9uU3Bh
cnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307CisKK2NsYXNz
IFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3Bh
cnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAg
ICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0
aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1hcDo6aXRl
cmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisgICAgICAgICwg
bV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNw
YXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9m
bGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Cisg
ICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgQWRk
UmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBmaW5kKHVuc2ln
bmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNob3VsZCBBU1NF
UlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCisg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQorICAgIHZv
aWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAgICAvLyBUaGVz
ZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCisgICAgaXRl
cmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFpbnMo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8vIE9ubHkgYWxs
b3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIE1hcCBtX21h
cDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRl
ZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRS
ZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQg
aSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9t
YXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgp
OworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVh
cDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9y
dGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBh
ZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2Ug
Zmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21t
b24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90
CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUg
ZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFy
cmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwg
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigp
KTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0
ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3Qm
IHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFT
U0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkg
eworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigp
OworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30K
KworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6
Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5
OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlm
IChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0
ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJu
IGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0
eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNw
YXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJu
IEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1f
bWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJy
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFn
ZUJhcnJpZXIuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJy
aWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmll
ci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdl
QmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5
U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBz
dG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNo
ZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwq
LCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9
IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdT
dG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFn
ZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4g
Km1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3Rv
cmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBt
X3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFn
ZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Niw5ICs1NjYsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxp
bmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAg
IDogbV9jbGFzc0luZm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSkKICAgICAgICAgLCBtX3N0cnVj
dHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9idXR0ZXJmbHko
YnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155041</attachid>
            <date>2012-07-27 13:50:43 -0700</date>
            <delta_ts>2012-07-27 14:49:59 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_5.diff</filename>
            <type>text/plain</type>
            <size>117584</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBA
QAorMjAxMi0wNy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpz
ZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmNvcHlIZWFkZXJG
cm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDog
QWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpp
bmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ1BheWxvYWQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAg
ICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRl
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChJbmRleGluZ0hlYWRlcik6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4
aW5nSGVhZGVyOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6dHlwZSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6c2V0VHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRMZW5ndGhBbmRUeXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmF1eFdv
cmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXV4V29yZCk6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNBcnJh
eSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZmluYWxpemVBcnJheURhdGEpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxs
b2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhR
dWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
c1NwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hl
ZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAg
KEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheUVudHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVN
YXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVl
TWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojpub3RGb3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1wdHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
OmVuZCk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChK
U0M6OlNwYXJzZUFycmF5RW50cnk6OmdldCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50
cnk6OmdldE5vblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpKU0NlbGwpOgorCiAyMDEyLTA3LTI3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgSW5jcmVhc2UgaW5saW5lIHN0b3JhZ2UgZm9yIEpTRmlu
YWxPYmplY3RzIGJ5IG9uZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlD
b252ZW50aW9uc19oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJy
YXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAg
ICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2
ZWN0b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJv
cGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRo
YXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3
aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVj
aWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZG
RlUgYXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQg
YXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5
IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJl
cHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFY
X0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBl
aXRoZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5
IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246Cisv
LworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdp
bGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFy
cmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRv
IHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBN
QVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJl
IHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVw
ZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3Jl
ZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAg
ICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9w
dWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBN
QVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBp
biB0aGUgc3BhcnNlIGFycmF5LgorCisvLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQor
Ly8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBp
cyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQorLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5u
b3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkgKworLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9m
IHNpemVfdCkuCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkK
KworLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkg
YW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8g
YmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAo
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEgYml0IHdl
aXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIu
CisjZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFsdWUgQkFT
RV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2Un
bGwgYWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBj
aWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNU
T1JfTEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3Jv
dyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVk
LgorI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZvciB3aGVu
IHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8gRm9yIGFs
bCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1
c2UgYSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQg
aXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgorc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5saW5lIGJv
b2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZh
bHVlcykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwg
bGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisj
ZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVy
Zmx5OworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFu
IGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlT
dG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhl
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQg
CisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQg
dGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1
c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9j
YXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkg
LSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJy
YXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJl
IGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0
aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJy
YXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4g
aW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgSW5kZXhpbmdIZWFk
ZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhl
YWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyBy
ZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgo
dW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsg
fQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCkt
Pmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7
IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisg
ICAgeworICAgICAgICBtX3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBt
X2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZhbHVlc0luVmVj
dG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0
aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAg
IHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2Vz
LgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVp
bnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92
ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAor
CisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZz
ZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNs
b3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFu
dGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xl
dG9uKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZs
eSgpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBw
cm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhp
bmdIZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHBy
ZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3Qg
SW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihT
bG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNp
dG9yJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVy
KiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9
CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
cHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5n
UGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlT
dG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGlu
Z0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFz
ZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBw
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAg
IHZvaWQqIGJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEJ1dHRlcmZs
eSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQ
cm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHks
IHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJp
Z2h0KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBh
cyBtdWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
UHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xv
YmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHks
IHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1
bnNoaWZ0KHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gK
KyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHku
aCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAg
cmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGlu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3Bl
cnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5p
bmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGds
b2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UodmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGlu
Z0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAs
IHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9p
ZCogQnV0dGVyZmx5OjpiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVy
biBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5
ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVV
bmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNp
dHkpLCB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7
CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigp
LT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICBBU1NFUlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAg
IHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAg
ICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHBy
b3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5
Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVz
dWx0LT5iYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5l
d1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7Cisg
ICAgcmV0dXJuIHJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKCksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5
SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit1aW50NjRfdCBJbmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRl
ICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlw
ZWRlZiB1bnNpZ25lZCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBw
cmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAg
ICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4Owor
CisvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJy
YXkgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAg
ICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAg
PSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0Owor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJl
ck9mVHlwZUJpdHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8
PCBudW1iZXJPZkxlbmd0aEJpdHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4
aW11bUxlbmd0aCA9IGxlbmd0aE1hc2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVy
KiBlbXB0eVNpbmdsZXRvbigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KCZzX2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydz
IGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxk
IG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAg
ICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9s
ZW5ndGhBbmRUeXBlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRl
eGluZ1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4o
bV9sZW5ndGhBbmRUeXBlID4+IG51bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lk
IHNldExlbmd0aChpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFu
ZFR5cGUgJiB+bGVuZ3RoTWFzaykgfCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
VHlwZShJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9
IChtX2xlbmd0aEFuZFR5cGUgJiBsZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRM
ZW5ndGhBbmRUeXBlKGludDMyX3QgbGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3Ro
QW5kVHlwZSA9IGxlbmd0aCB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVy
T2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0
dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7
IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3Jh
Z2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2Uq
PihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQ
cm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3Rv
cmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAg
ICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3Qg
YmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6
ZV90IHByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KCk7CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBv
ZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9s
ZW5ndGhBbmRUeXBlOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3Jh
Z2UgYW5kIGl0cyB0eXBlLgorICAgIAorICAgIHN0YXRpYyB1aW50NjRfdCBzX2VtcHR5U2luZ2xl
dG9uOyAvLyBVc2UgYSBQT0QgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgZ29vZCB0
aGluZ3MuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVh
ZGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19o
CisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoKQoreworICAg
IGlmIChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKwor
aW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMo
KQoreworICAgIGlmIChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDU5ICs0NSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIEFT
U0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVydmlldyBvZiBK
U0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3Jl
ZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0
IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAqIEEgc3BhcnNl
IG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJp
YyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJs
ZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0
ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkg
b25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJp
dAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwg
YmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8gQWxsIHByb3Bl
cnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBh
cnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8gc3RvcmFnZSB2
ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxl
ZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVyZSAoaSA8IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3Rv
cmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGlu
IHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8gICAqIFdoZXJl
IChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVY
KSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2Ug
dmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBv
ZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0
b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRp
cGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAgICogV2hlcmUg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFs
dWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KLQot
Ly8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRh
bnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhl
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhl
IHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihB
cnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0
b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZG
RkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUg
LSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
IC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZl
IHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJv
ZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQot
I2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkg
aW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhfQVJSQVlfSU5E
RVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4
aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0vLyBmb3IgYW4g
YXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0g
bmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAotLy8gVGhl
IHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3
aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1RfVkVDVE9S
X0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdo
ZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgotLy8gV2hlbiBp
bmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwg
d2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNw
YXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5E
ZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8g
PSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0FycmF5KX07CiAKIC8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhl
IGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKQEAgLTEwNSwxMSAr
NTIsNiBAQCBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJhCiAvLyBUaGlz
IHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5l
ZCBhYm92ZS4KIHN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKIAotc3RhdGljIGlu
bGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQog
c3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwg
Y29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkBAIC0xNzks
MzQ4ICsxMjEsNiBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pCiAg
ICAgcmV0dXJuIHRoaXM7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25z
aXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19
Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5
RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAg
IHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9
IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9m
KHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1f
cmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFy
c2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8g
VG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhl
IHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEg
bmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRo
aXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4u
Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsK
LSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJv
dykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShl
bnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1
dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50
cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAg
ICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFz
ZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNh
bGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5k
KHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJh
eSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJy
YXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3Qg
YWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2Fz
ZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAg
Ly8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAt
IHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5p
c0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5l
IHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQot
ICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRh
KCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNw
YXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNW
YWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAo
TElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVl
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIg
PSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0g
ICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQot
Ci1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgp
OwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVy
U2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0
YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpT
VmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGlu
ZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVy
YXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNl
TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0g
bmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXpl
cih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1h
cCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1h
cCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAg
ICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAg
ICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFy
c2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwot
Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwg
bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGlu
IHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBh
bmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAg
ICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vj
b25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3
UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9y
YWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwg
c3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFn
ZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAg
ICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQot
ewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAo
ZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAo
b2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJ
bk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlk
aW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAg
ICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0
KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0g
ICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0
ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVj
dCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwot
Ci0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShl
eGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAg
ICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7
Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNj
ZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBp
biBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZG
RkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2Fz
ZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0g
ICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlm
IGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAg
ICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlz
c2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwot
ICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRv
IHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgot
ICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dF
eGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVj
LT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3Vy
cmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNw
YXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0K
LSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJs
ZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRl
ZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElm
IGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewot
ICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFE
ZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5
Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRh
YmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1
ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4g
YXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBu
ZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2
YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJv
cGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1l
ZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51
bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2Ny
aWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZp
ZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVk
IHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAg
ICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVm
YXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsK
LQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRl
ZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAg
ICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4g
RGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4g
Y3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEy
KS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQo
Y3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1
YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJ
ZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3Qs
IGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAg
aWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0Vu
dW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVd
XSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2Yg
ZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAm
JiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRy
dWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVz
Y3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZl
IGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2Ny
aXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAg
Ly8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQg
aXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQp
IGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBm
cm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVy
dHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0
eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
IGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0
ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAg
Ly8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZy
b20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5
4oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8g
YXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRl
cyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lmlz
RGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAg
ICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8g
MTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwg
dGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50
LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhl
IFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJs
ZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWku
IElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAg
ICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50
LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFs
dWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNj
ZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50Lmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVu
dC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JE
ZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90
aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1d
KSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
LSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tH
ZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVh
Y2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJl
c3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMs
IGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1
ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBC
YXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQot
ICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAg
IHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0
eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkg
Y29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xh
c3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBG
bGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9
IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAg
IHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAg
ICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9y
ZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNS
ZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRh
dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwg
SlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
Ym9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWdu
ZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZp
bmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFs
aWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShp
dGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVu
c2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9k
cyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRv
ciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRh
aW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAg
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAg
IC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0g
ICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMg
c3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJy
YXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBz
dHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBB
cnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0
U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1h
eSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQg
dG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVk
IHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkg
LSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2Ug
ewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9u
IHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQg
YnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBw
b3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1
cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAg
ICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVp
bnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwpAQCAtMTUzLDggKzUwLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAg
ICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRp
YWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXpl
IGFuZApAQCAtMTcwLDE4ICs2NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1p
bGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0
aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNz
b3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHBy
b3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CiAgICAgICAgIApAQCAtMTk5LDY0ICs4Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBi
b29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAg
Ym9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGgg
JiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVu
c2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8
IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAg
ICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAg
ICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgot
ICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsK
LSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5W
ZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBu
b3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMu
Ci0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdl
LT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJ
bml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMg
d2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBu
ZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVz
IGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NF
UlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5T
cGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5z
cGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNT
dGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKQEAgLTI3Nyw4
ICsxMDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICAg
ICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0zMDUsMjUgKzEyOCwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKICAgICAgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RTbG93Q2FzZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBi
b29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsK
ICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0
YSYpOwogCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0
ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hl
Y2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JM
ZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQg
bV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3Jl
IEFycmF5U3RvcmFnZS4KICAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7CiAKLSAgICAg
ICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRv
IGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZh
bHVlTWFwOwotCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0K
ICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlD
ZWxsVGFnKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOworICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
QnV0dGVyZmx5Kik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKICAgICBwdWJsaWM6CkBAIC0xNDAsNiArMTQwLDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNl
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX2J1dHRlcmZseSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRl
cmZseUFkZHJlc3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5
OworICAgICAgICB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0
dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRh
dGVkR2V0KCk7IH0KQEAgLTE3MCw2ICsxODAsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAgICAgICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fc3RydWN0dXJlOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0Nl
bGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYs
MjkgKzg2LDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAg
ICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9y
YWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90
IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9y
YWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwog
ICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAg
ICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9y
YWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5k
UGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0
b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2Fw
YWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdl
dCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAt
IDE7CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJl
Q2FwYWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFk
ZXIuaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5
dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7
CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJp
bmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1h
cmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJv
cGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVT
dG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXpl
IC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3Rv
cmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
dmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAg
ICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3Jh
Z2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJp
YXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQog
CiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC0xMjIsOSArMTYzLDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+
b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1
dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCisgICAgICAgIHRoaXNPYmpl
Y3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4
Myw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAg
ICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAg
ICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdl
KHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXpl
Rm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0
eVNpbmdsZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9y
LCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUp
OwpAQCAtMjQwLDYgKzI4MSw5MSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgCiAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwog
fQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9k
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVj
dG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUg
bWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0
dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYg
KHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisg
ICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEs
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlw
ZSBvbGRUeXBlID0gbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyLT50eXBlKCk7CisgICAgQVNT
RVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAg
bmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLnNldFR5cGUob2xkVHlwZSB8IEhhc0FycmF5
U3RvcmFnZSk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFy
ZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOwor
ICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5t
X3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbklu
ZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2Vu
ZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5z
dXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERh
dGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2UgQXJy
YXk6CisgICAgY2FzZSBOb25BcnJheTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworICAgICAgICByZXR1cm4gc3RvcmFnZTsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CkBAIC01MTUsOCArNjQx
LDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpT
T2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0g
ICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0
aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTYwMywyNiArNzI4LDE5NSBAQCBTdHJ1Y3R1
cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklE
OwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQor
dm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKK3sKKyAgICBpZiAoZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkK
KyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGRl
c2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRy
aWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcikgJiB+QWNjZXNzb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCogc2V0
dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAg
ICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgc2V0
dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0
ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChn
ZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlmICgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1
dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAvLyBG
SVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVz
IGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhv
d2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVz
IHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0
ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdp
dGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAoIWRl
c2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOworICAg
ICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJl
c3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlFbnRy
eSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIDIuIExl
dCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwg
cHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0
ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBpcyB1
bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBt
YXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9i
amVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
NC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVz
YykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAgICAgLy8g
bmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVt
ZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAgICAv
LyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmll
bGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5CisgICAgICAg
IC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAg
ICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlw
dG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKKyAgICAg
ICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5k
IFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5CisgICAg
ICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBp
cyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKKyAg
ICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmMuIFJl
dHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKKyAgICAg
ICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJl
YWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAgICAgIHB1
dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRz
KTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAgICAgICAg
ICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBp
cyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2Mg
YWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERl
c2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVu
dCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVu
dCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhl
eGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVs
ZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBv
dGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJy
ZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAg
ICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRh
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZl
cmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3Io
KSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gOS5h
LiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRy
dWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEK
KyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFBy
ZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzCisg
ICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1
dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bworICAg
ICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMuIEVs
c2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nl
c3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVzZXJ2
ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0NvbmZp
Z3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBh
bmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVm
YXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9y
KCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEw
LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9y
KERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBb
W0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAv
LyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHBy
ZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVW
YWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2Vu
dCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJy
ZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYg
dGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQg
YW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0
b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRo
ZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAg
ICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNl
LgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNj
cmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFt
ZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2
YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJ
bk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShKU0Nl
bGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVzdHJ1
Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVT
cGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRG
aW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9y
YWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFwOwor
ICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsK
IAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBz
dHJ1Y3R1cmUoKSwgc2luY2UKICAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEg
dHJhbnNpdGlvbi4KICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdl
ID0gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9w
ZXJ0eVN0b3JhZ2UgPSAwOwotCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0
byBzbGFrZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVu
Y2UgdHlwZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3Rv
cmFnZTsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9m
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBD
UkFTSCgpOwotICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3Rv
cmFnZT4odGVtcCkgKyBuZXdTaXplICsgMTsKLSAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlT
dG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBz
aXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKLQotICAgIEFTU0VS
VChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG9s
ZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDYgKzk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6
ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApAQCAtMTIy
LDYgKzEyNCwxNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0
aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNz
b3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVp
Y2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVu
c2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVl
IGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5D
WQorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcg
dGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPT0g
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0cnlD
cmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFs
TGVuZ3RoLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlh
bGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9i
YWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY29t
cGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2Ug
aGF2ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3Ro
ID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5p
dGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBpc1NwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcCAmJiBt
YXAtPnNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAg
ICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVm
aW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5v
dCBjb25zdWx0ZWQKQEAgLTIwMyw4ICszNDQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9
CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1
dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZM
aW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJu
IG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzM3MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBv
ZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgp
IC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2
YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjksMTggKzQxMywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkg
eyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsgfQogICAgICAg
ICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7CiAK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dPdXRPZkxpbmVT
dG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0g
ICAgICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eVN0
b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkq
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1
dHRlcmZseSosIFN0cnVjdHVyZSopOwogICAgICAgICAKICAgICAgICAgYm9vbCByZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBT
dHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1
cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQqIGFkZHJl
c3NPZk91dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1f
b3V0T2ZMaW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmxhdHRlbkRpY3Rp
b25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwg
dGhpcyk7CkBAIC0yOTQsNyArNDMzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0g
ICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CiAKICAgICAg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzI2
LDcgKzQ2NCw0MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJlbW92ZURpcmVjdChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYsIFBy
b3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAgdm9pZCB2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXpl
KTsKKworICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0cyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFn
ZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzks
NiArNTExLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAg
ICAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhK
U0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRl
PFB1dE1vZGU+CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBK
U0NlbGwqKTsKIApAQCAtMzQ3LDggKzUyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJv
cGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICBib29sIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAK
LSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBlbnVt
IENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07CisgICAgICAgIHZvaWQg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29u
c2lzdGVuY3lDaGVjayk7CiAgICAgfTsKIAogCkBAIC00OTEsMTggKzY3NywxMiBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6aXNHbG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9p
ZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVChidXR0
ZXJmbHkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmICghc3RvcmFnZSkgewotICAg
ICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFT
U0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQo
c3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0KICAgICBzZXRTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogfQogCiBp
bmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDEsOCArNzIxLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBh
c09iamVjdChKU1ZhbHVlIHZhbHVlKQogfQogCiBpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0Nl
bGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIHRoaXMsIDApCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBCdXR0
ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCiB7CiB9CiAKQEAgLTk0MywxMyArMTEyMiwxMyBAQCBp
bmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0
T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jh
c2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChv
ZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRl
cmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzEx
MzYsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUg
aW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBp
ZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1
cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEy
MzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBB
U1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmlu
ZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5
U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQ
cm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVy
dHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisjZGVm
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFy
cmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsK
KworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVy
dHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7
CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0
X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsK
KworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VN
b2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAgfTsKKworcHVibGlj
OgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3Vs
dCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAgICAgICAgOiBtX2Zs
YWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIHNw
YXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwor
ICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICBtX2ZsYWdz
ID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKKyAgICB9CisKKyAg
ICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3Mg
JiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25s
eSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3Mg
fCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBt
dXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBK
U09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29s
IHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOwor
ICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQor
ICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUg
cmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21h
cC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1v
dmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVu
ZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgp
OyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5j
b250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6
ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQor
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisK
K3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90
IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
X2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCisjaW5jbHVk
ZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNw
YXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNP
YmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7
CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKworICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAgIHNpemVfdCBjYXBh
Y2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRD
YXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSAr
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0ZWRDYXBh
Y2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUg
dm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRy
eSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBz
ZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFw
LgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0
eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0
aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJl
bW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEoZW50cnkuYXR0cmli
dXRlcyAmIEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKGFj
Y2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRl
clNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAgIGlmICghc2V0dGVyKSB7Cisg
ICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Cisg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Cisg
ICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwor
fQorCitpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRk
IHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhp
cyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNp
YmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3Zl
IGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgfQorCisgICAgZW50cnku
YXR0cmlidXRlcyA9IDA7CisgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXks
IHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlF
bnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVy
U2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsKKyAgICAgICAgc2xv
dC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNsb3Quc2V0
R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAoreworICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGluZSBK
U1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBh
cnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOworICAgIEFT
U0VSVChyZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0
dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIs
IGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxs
RGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3Bh
cnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFh
dHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9
IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
Jml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJz
ZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVy
X2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgi
Ci0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVm
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNs
YXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVu
Y2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBz
ZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdl
QmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAg
ICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0
KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAg
IHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0g
ICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7
IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4g
bV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9z
dG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShz
aXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0
eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlT
dG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjM2OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTY2LDkgKzU2NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2Vs
bChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBtX2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpKQogICAgICAgICAsIG1fc3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkK
KyAgICAgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155056</attachid>
            <date>2012-07-27 14:49:59 -0700</date>
            <delta_ts>2012-07-27 16:16:21 -0700</delta_ts>
            <desc>even more</desc>
            <filename>butterflies_patch_6.diff</filename>
            <type>text/plain</type>
            <size>142355</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxMi0wNy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6Y29weUhlYWRlckZyb20pOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6OmFsbG9jQmFzZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzaXplRm9yKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OkJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNl
dExlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRUeXBlKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aEFuZFR5cGUpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJl
dmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2Ny
aXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgp
OgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9y
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojppc1NwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0
ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9y
WmVybyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRv
UGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAg
ICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheUVudHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5
VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJh
eVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9k
ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpub3RGb3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Omlz
RW1wdHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmVuZCk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1
dCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6OmdldCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpKU0NlbGwpOgorCiAyMDEyLTA3LTI3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFo
bmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSW5jcmVhc2UgaW5saW5lIHN0b3JhZ2UgZm9y
IEpTRmluYWxPYmplY3RzIGJ5IG9uZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUg
QXJyYXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2Yg
SlNBcnJheQorLy8KKy8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9y
ZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVj
dCBwcm9wZXJ0eSBtYXAuCisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJz
ZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVy
aWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFi
bGUKKy8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVh
dGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5
IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1i
aXQKKy8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxs
IGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9w
ZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNp
Z25lZCBpbnRlZ2VyIGksCisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4g
YXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2Ug
dmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRs
ZWQgaW4gdGhlIGZvbGxvd2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0
b3JhZ2UgdmVjdG9yLAorLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBp
biB3aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVy
ZSAoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRF
WCkgdGhlIHZhbHVlIHdpbGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdl
IHZlY3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkg
b2YKKy8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVj
dG9yIGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0
aXBsaWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJl
IChNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZh
bHVlIHdpbGwgYWx3YXlzIGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisK
KyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGlt
dW1MZW5ndGgpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2Vk
IGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2gg
aW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmlu
ZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBp
cyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBh
biBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhl
IHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVs
ZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3
aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5l
IEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXpl
IHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Cisv
LyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGlj
eSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4K
Ky8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3
ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBs
b25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBh
IG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisK
K2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2Uu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheVN0
b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFk
ZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEJ1dHRlcmZseTsKKworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZh
bHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFp
bmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8g
YWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9y
YWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8g
bm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0
IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFj
dHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0
U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0
b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRl
OgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBD
YW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAg
CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAg
c3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIp
IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnJwZXRfY2FzdDxCdXR0ZXJmbHkq
Pih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdv
IGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3Ro
LgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdv
cmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hl
YWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgo
KSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVj
dG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgo
bGVuZ3RoKTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShj
b25zdCBBcnJheVN0b3JhZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBv
dGhlci5tX3NwYXJzZU1hcDsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4Qmlh
czsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlv
bkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRp
ZgorICAgIH0KKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9y
OworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50
cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXph
dGlvbkluZGV4OworICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBw
dHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6
ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pCisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNk
ZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUg
IkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVk
ZSA8d3RmL1Byb3BlcnR5T2Zmc2V0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0ds
b2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJmbHko
KSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQnV0
dGVyZmx5KiBlbXB0eVNpbmdsZXRvbigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjplbXB0eVNp
bmdsZXRvbigpLT5idXR0ZXJmbHkoKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxT
aXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1
cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
OworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2UsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVk
SlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0ds
b2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZs
eSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0
ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5n
Q29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAK
KyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hl
YWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2Uo
KSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENv
bnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4
aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUKiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQq
Pih0aGlzKTsgfQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5k
ZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlBy
b3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSA9PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KKworICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0g
cHJlQ2FwYWNpdHk7IH0KKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsK
KyAgICAKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMg
emVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNp
dHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5
KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OworICAgIEJ1dHRlcmZseSogdW5zaGlmdChzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVy
Zmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisj
aW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAg
ICAgICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0
IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChnbG9iYWxEYXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGlu
Z0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVE
dXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSksIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGlu
Z0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlKHNsb3RWaXNpdG9yLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAw
KTsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgp
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQo
bmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwg
bmV3UHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1l
bWNweShyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwgYmFz
ZShvbGRQcm9wZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHks
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKGdsb2Jh
bERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIG9sZFByb3BlcnR5U3RvcmFn
ZSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJv
cGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKCFpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eSgpKTsKKyAgICB2b2lkKiBiYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgKKyAgICAg
ICAgICAgICZiYXNlLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgMCwgcHJvcGVydHlDYXBh
Y2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlS
aWdodChnbG9iYWxEYXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQ
cmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIG5ld1By
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgbWVtY3B5KHJlc3VsdC0+YmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9w
ZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiByZXNpemVBcnJheShnbG9iYWxEYXRhLCBpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hl
YWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcmVDYXBhY2l0eSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hl
YWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordWludDY0X3QgSW5kZXhpbmdIZWFkZXI6OnNf
ZW1wdHlTaW5nbGV0b247CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdI
ZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBB
cnJheVN0b3JhZ2U7CisKK3R5cGVkZWYgdW5zaWduZWQgSW5kZXhpbmdUeXBlOworCisvLyBGbGFn
cyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGljIGNvbnN0
IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJyYXlTdG9y
YWdlICAgICAgICAgID0gODsKKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgor
c3RhdGljIGNvbnN0IE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3Qg
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0
IEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKworY2xhc3Mg
SW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZlR5cGVCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZMZW5n
dGhCaXRzID0gMzIgLSBudW1iZXJPZlR5cGVCaXRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBsZW5ndGhNYXNrID0gKDEgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKSAtIDE7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heGltdW1MZW5ndGggPSBsZW5ndGhNYXNrOworICAgIAorICAgIHN0
YXRpYyBJbmRleGluZ0hlYWRlciogZW1wdHlTaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPigmc19lbXB0eVNpbmdsZXRvbik7
CisgICAgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhpbmdI
ZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9mIHRo
aXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVwZW5k
CisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4V29y
ZCgwKQorICAgICAgICAsIG1fbGVuZ3RoQW5kVHlwZSgwKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgaW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aEFuZFR5cGUgJiBsZW5n
dGhNYXNrOyB9CisgICAgSW5kZXhpbmdUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxJbmRleGluZ1R5cGU+KG1fbGVuZ3RoQW5kVHlwZSA+PiBudW1iZXJPZkxlbmd0aEJpdHMp
OyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAgeworICAg
ICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aEFu
ZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgfmxlbmd0aE1hc2spIHwgbGVuZ3RoOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldFR5cGUoSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBtX2xlbmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzaykgfCAoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoQW5kVHlwZShpbnQzMl90IGxlbmd0aCwgSW5kZXhpbmdU
eXBlIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgp
OworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSBsZW5ndGggfCAoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAgIHVpbnQz
Ml90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1eFdvcmQo
dWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisgICAgc3Rh
dGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkp
IC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFycmF5
U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAg
IFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisg
ICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlz
KTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEp
OworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQor
ICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5z
ZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4
aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcygpOworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYXV4V29y
ZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBl
LgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5k
ZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KKyAgICAKKyAgICBzdGF0aWMgdWlu
dDY0X3Qgc19lbXB0eVNpbmdsZXRvbjsgLy8gVXNlIGEgUE9EIHRvIGVuc3VyZSB0aGF0IHRoZSBj
b21waWxlciBkb2VzIGdvb2QgdGhpbmdzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNf
aAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnBy
ZUNhcGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdl
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+
bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJy
YXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcxICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNU
UlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVy
dGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9j
YXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAg
KiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVz
LgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBp
ZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQg
aW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lO
REVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZh
bHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5v
dCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09i
amVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMg
aWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdo
ZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBi
ZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBt
YXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0v
LyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAg
dW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3Bl
cnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRo
ZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFy
c2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3
b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBh
dCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVz
IHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9J
TkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3Rv
cmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2Yg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24g
c3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2Fs
Y3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4
aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFn
ZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1
c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFu
Y2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2Rl
ZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZG
RiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQn
cyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8g
VGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9y
IGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRl
ZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVm
aW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBz
aXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50
Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBv
bGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1h
cC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
LCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBh
cyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVz
ZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7
Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmlu
YWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAK
LS8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQg
d2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMg
dGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZh
bHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBh
Ym92ZS4KLXN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGlu
ZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBu
dW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQogc3Rh
dGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29u
c3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkBAIC0xNzksMzQ4
ICsxMTYsNiBAQCBKU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pCiAgICAg
cmV0dXJuIHRoaXM7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBs
ZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2Vs
bCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0K
LWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50
cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgp
KTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNp
emVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1f
cmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVu
c2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVw
b3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VB
cnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8g
c2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNw
YXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3
IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMg
aXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0g
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAg
ICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRy
eS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnku
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBB
U1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9
IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0
ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxE
YXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZh
bHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwg
YXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXks
IGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3
YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0
aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8g
ZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNv
IHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4
dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHBy
b3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAg
IGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCks
IGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJz
ZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElL
RUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBh
c0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAg
ICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
bG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlF
bnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1p
bmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwot
ICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0
dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9
IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShn
ZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFs
dWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2
b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRv
ciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFw
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3
IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0
aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
Ci17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9
IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBp
ZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAg
ICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0g
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92
ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRo
ZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQg
YXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBp
ZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25k
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3
U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAg
Ci0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3Rv
cmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsK
LSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBt
X3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewot
ICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVz
Y3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xk
RGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1h
cC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAg
ICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclBy
ZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7
Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkK
LSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQ
cmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgp
OwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
Ci0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0g
ICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVj
KTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAg
ICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0K
LSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNz
b3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlw
dG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBF
UzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZG
Rik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTog
d2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAg
ICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0
dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAg
ICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2lu
ZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAg
ICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNl
dCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNl
cHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5n
bG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAg
ICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmlu
ZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAg
ICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNj
cmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0g
ICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxl
XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMK
LSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXds
eQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1
ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVy
dHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQ
IG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVy
YWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJl
ZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxk
IG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHBy
b3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAg
Ly8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVs
dHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQot
ICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1
bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERl
c2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3Vy
cmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4K
LSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3Vy
cmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxU
byhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0
aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYg
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBm
aWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFj
aCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBj
dXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
LSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNE
YXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRp
ZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0
b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8g
OS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlz
IHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHku
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKA
mHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0
dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMg
dG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8g
OS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20g
YW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8g
UHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCY
cyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0
byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0
YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAg
ICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0
YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAu
YS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhl
bgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50Lndy
aXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtb
V3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1d
IGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53
cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAg
ICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50Lltb
VmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUo
KSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0
YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5z
ZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNj
cmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0
cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNl
LCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBp
cyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkg
JiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRd
XSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2gg
YXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3Bv
bmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVu
dHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShF
eGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3Jp
dGFibGUoKSB8fCAhd3JpdGFibGUpOwpAQCAtNzcwLDE1MSArMzY1LDYgQEAgdm9pZCBKU0FycmF5
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRQogICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lz
dGVuY3koKTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0
c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5n
dGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2Ug
ZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQg
aGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4K
LSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRl
IG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5n
dGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8v
IENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFu
ZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8v
IHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVh
bGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAt
IGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRl
U3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFs
dWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAg
IGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJh
eSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1Jl
YWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBtYXAtPnB1dChleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUg
bV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29w
eSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhl
IG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVj
dG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwot
ICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVy
dHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFw
KSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJv
cGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBh
bGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGgg
aWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwot
ICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBh
cnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJ
c1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOwotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+
bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2lu
ZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAg
ICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUg
aXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZh
aWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0K
LSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0
ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBD
b3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0
aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmly
c3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7
Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBKU0FycmF5OjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKQEAgLTEwMDAsODQgKzQ1MCw2IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamUKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBK
U0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAg
ICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQot
ICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3Ro
ID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRM
ZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0
TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGlu
Y3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoK
LSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGgg
KiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBv
dmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNp
cmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6
ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVy
biBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQot
Ym9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0
aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQg
ZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRv
IHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRo
ZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgp
OwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdM
ZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIElu
IHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2lu
ZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NC
YXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgm
bmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVj
dG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFn
ZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRp
Y19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7
Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5v
dCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBv
dmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1f
aW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5n
dGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29t
IGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9
IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2Ug
PSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdl
U2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4
QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFT
U0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsK
LQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFz
ID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFn
ZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZSht
X3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8g
RnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUg
bmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTA5ICszMCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50
cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBh
dHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJh
eSopIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUg
Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgfTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50
NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFw
OwotCi0gICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAg
ICAgICAgIFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIs
Ci0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRv
ciBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAg
ICBib29sIHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIFNwYXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1f
ZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNS
ZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3Ro
SXNSZWFkT25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25s
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4o
bV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhl
c2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBh
ZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VS
VCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAg
ICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAg
ICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAg
ICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0K
LSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5j
b250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRp
b24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAg
ICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAg
IH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9m
IGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJy
YXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNj
ZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdl
KCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRv
IG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhh
dCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBU
aGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAv
LyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBz
dHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAi
bGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFz
ZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9l
cyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRy
X3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6
YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247
Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9y
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0K
LSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3Mg
SlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKQEAg
LTE1Myw4ICs1MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxp
emUoSlNDZWxsKik7Ci0KICAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAgICAg
Ly8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBv
ZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKQEAgLTE3MCwxOCArNjUsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6OnB1dERpcmVjdCogbWV0aG9k
czoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCi0g
ICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KLSAgICAgICAgLy8gVGhpcyBt
ZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVy
YWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9vbCBwdXRE
aXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChjYW5TZXRJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5k
ZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
aG91bGRUaHJvdyk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKQEAgLTE5OSw2NCArODIsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGNvdW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
Y291bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4g
aSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAg
SlNWYWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2ln
bmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldElu
ZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVj
dG9yW2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9y
YWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0
b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBp
bmRleCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVk
IHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAg
ICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51
bWJlciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAg
ICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlu
bGluZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMg
bWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBu
dW1iZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3Ro
LgotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09
IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9z
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0K
LQotICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9p
ZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBs
ZW5ndGgpOwogCkBAIC0yNzcsOCArMTAyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERh
dGEmKTsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMzA1LDI1ICsxMjgs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgICAgICB1
bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAg
ICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3
TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9y
U29ydGluZyhKU0dsb2JhbERhdGEmKTsKIAotICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tU
eXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ss
IFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShD
b25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAgICAg
IHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9y
Ci0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUg
c2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCiAgICAgICAgIEFycmF5U3RvcmFnZSAq
bV9zdG9yYWdlOwogCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVlTWFw
IHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNw
YXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1f
c3BhcnNlVmFsdWVNYXApOyB9CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpT
Q2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpT
Q2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNDZWxsKEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgcHVibGljOgpAQCAtMTQwLDYg
KzE0MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
ICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBt
X3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CkBAIC0xNzAsNiArMTgwLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
OwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAgICAg
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07
CiAKICAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAx
MjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBX
ZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBn
cm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2
YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBp
cyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUu
CitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFi
bGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzkxLDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFn
ZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0
ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwogICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAg
Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7
Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2Fw
YWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlT
dG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2
aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNh
cGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3Jh
Z2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJn
ZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdldCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAtIDE7CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRl
ciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAgCisgICAgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXpl
X3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJlQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFkZXIuaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMo
KTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisg
ICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndp
c2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBz
dG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBz
dG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1j
dXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAg
ICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdl
QmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAg
ICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFn
ZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQg
PSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJy
ZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdl
LT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5
ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3Bl
cnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPnByb3BlcnR5U3Rv
cmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8v
IE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xMjIsOSArMTY4LDkgQEAg
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3Rv
cmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChz
dG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRv
ciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93
bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2lu
Z2xldG9uKCkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1
dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5v
bkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OCw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09i
amVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChi
dXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICB0aGlzT2Jq
ZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVf
dCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlu
bGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMjQwLDYgKzI4Niw5NiBAQCB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgdGhpc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJv
cGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwogfQogCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlm
ICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEp
OworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
YXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBt
aW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFs
d2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNh
biB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVl
ZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQo
dGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwor
ICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCwgMCk7
CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9i
dXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9
IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7Cisg
ICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gbV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyLT50eXBlKCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xk
VHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgbmV3QnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLnNldFR5cGUob2xkVHlwZSB8IEhhc0FycmF5U3RvcmFn
ZSk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJl
c3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJz
ZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0g
MDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQor
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVT
cGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7
CisgICAgICAgIHJldHVybiBzdG9yYWdlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCiB2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKTsKQEAgLTUxNSw4ICs2NTEsNyBAQCB2b2lkIEpTT2JqZWN0OjpmcmVlemUo
SlNHbG9iYWxEYXRhJiBnbG9iCiAKIHZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoaXNKU0FycmF5KHRoaXMpKQotICAg
ICAgICBhc0FycmF5KHRoaXMpLT5lbnRlckRpY3Rpb25hcnlNb2RlKGdsb2JhbERhdGEpOworICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICBpZiAoaXNFeHRl
bnNpYmxlKCkpCiAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OnBy
ZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOwogfQpA
QCAtNjAzLDI2ICs3MzgsNDczIEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRv
cklEKEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09i
amVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVz
Y3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNj
cmlwdG9yKQogewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVl
KCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+
YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERl
c2NyaXB0b3IpICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8g
SXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgp
LCBzaW5jZQotICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9u
LgorICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
SlNPYmplY3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNl
bnQoKSkKKyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Cisg
ICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAg
ICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAg
IEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwor
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisg
ICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAg
ICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsK
KyAgICAgICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3Ip
OworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUu
MSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYp
OworCisgICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3Qg
Y2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5
CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0
IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UK
KyAgICAgICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNz
aW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisg
ICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8g
c2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisg
ICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4
Y2VwdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9
CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1
cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBT
cGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
CisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2li
bGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5k
ZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJ
ZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsK
KyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0K
KworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0
eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0
YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFs
dWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFu
IGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUg
bmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQg
dmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFBy
b3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFt
ZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0Vu
dW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNj
cmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRl
ZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAg
ICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRl
ZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7
CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3Jp
cHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0
aCkKKyAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkg
ZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZl
cnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBm
aWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0
aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5N
YXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3Jp
cHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Ug
dGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEu
IFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgor
ICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRv
ci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYg
dGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51
bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdh
dGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJl
c2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVz
YykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAg
aWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBF
bHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERl
c2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNE
YXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAg
ICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFi
bGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3Io
Y3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9i
amVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3Nv
ciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVk
IHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVy
YWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRy
aWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAg
ICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAg
ICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAv
LyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRl
cyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lmlz
RGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAg
ICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8g
MTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwg
dGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50
LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhl
IFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJs
ZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWku
IElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAg
ICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50
LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFs
dWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHku
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNj
ZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50Lmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVu
dC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JE
ZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90
aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1d
KSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tH
ZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVh
Y2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJl
c3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRv
cihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0
dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXpl
QXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVh
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2Jq
ZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sK
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1h
cDsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAgPSByZXN1bHQ7CisgICAgZ2xvYmFs
RGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZUFycmF5RGF0YSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KCkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsK
KyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBkZWxldGUgc3RvcmFnZS0+
bV9zcGFyc2VNYXA7CisgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworfQorCit2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5
IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJU
KGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9
IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVy
dHlTdG9yYWdlID0gMDsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcDsKIAotICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xh
a2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5
cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7
Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+
KHRlbXApICsgbmV3U2l6ZSArIDE7CisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFw
KSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJv
cGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBt
YXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
IG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0
aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMg
bm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlz
RXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1f
c3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFs
dWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Cisg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxs
b2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBp
bnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2
ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
CisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUg
b2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7
CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQ
cm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4pICogb2xkU2l6ZSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eTsKKyAgICBzd2l0Y2ggKGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
fHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0
ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0
ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2Uo
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9y
YWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlTdG9yYWdlOworYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBt
X3ZlY3Rvckxlbmd0aCk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAg
ICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEg
c3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBh
cnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5
IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVu
c2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNp
YmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUg
dmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9i
YWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0
b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8g
dGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBv
ciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBz
cGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJl
Y3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisKKyAgICAvLyBV
cGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJp
dCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBp
ZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJl
IGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBi
ZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFw
IGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBp
ZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5B
cnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVj
dG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisK
KyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVl
U2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVl
U2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisg
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Cisg
ICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2gg
KGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJh
eToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggfHwgIWlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVJbml0aWFsQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5z
aWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAg
IGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCisgICAg
ICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAg
ICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKKyAg
ICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNl
aWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUg
dG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRM
ZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAg
fQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKKworICAg
IGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7
CisKKyAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHJldHVybiBnZXROZXdWZWN0
b3JMZW5ndGgoZ2V0QXJyYXlMZW5ndGgoKSwgZGVzaWduZWRMZW5ndGgpOworfQorCitib29sIEpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJy
YXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBu
b3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2
ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2Fu
IGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0g
c3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7
CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xl
bmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4g
dGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4
QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0
ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIGlmICghbmV3QnV0dGVy
Zmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVtb3Zl
IHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNh
cHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4
QmlhcyA9IG1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5l
d1ZlY3Rvckxlbmd0aCk7CisgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFs
bG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCisgICAgdW5zaWduZWQgbmV3U3RvcmFn
ZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFzOworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAorICAg
ICAgICBnbG9iYWxEYXRhLAorICAgICAgICBpbmRleEJpYXMsIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAg
ICAgbmV3SW5kZXhCaWFzLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7
CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
Cit7CisgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0
YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKKyAg
ICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICAKKyAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xk
U2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsNiArOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXpl
QXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAs
OCArMTIyLDE3NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vz
c0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBj
YXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0
aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAg
LSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNj
ZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEg
cHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1
cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4
UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJv
dyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1Zh
bHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXpp
bmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkg
PT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0
cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0
aWFsTGVuZ3RoLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5p
dGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
Y29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsg
d2UgaGF2ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVu
Z3RoID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMg
aW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgYm9vbCBpc1NwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcCAm
JiBtYXAtPnNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAg
ICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAn
ZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlz
IG5vdCBjb25zdWx0ZWQKQEAgLTIwMyw4ICszNzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgp
OyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4g
bV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBt
X2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0
T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFn
ZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAg
ICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjksMTggKzQ0Mywx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVk
KCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsgfQogICAg
ICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7
CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dPdXRPZkxp
bmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7
Ci0gICAgICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0
eVN0b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJm
bHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYs
IEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwogICAgICAgICAKICAgICAgICAgYm9vbCByZWFsbG9j
YXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5
LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3Rv
cmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlm
TmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQqIGFk
ZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Jm1fb3V0T2ZMaW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAg
ICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgdGhpcyk7CkBAIC0yOTQsNyArNDYzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7
Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CiAKICAg
ICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAt
MzI2LDcgKzQ5NCw0MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJlbW92ZURpcmVj
dChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYs
IFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAgdm9pZCB2aXNp
dEJ1dHRlcmZseShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VT
aXplKTsKKworICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0cyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3Rv
cmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKQEAgLTMzOSw2ICs1NDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09i
amVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAg
ICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0ds
b2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3Bl
cnR5U2xvdCYsIEpTQ2VsbCopOwogCkBAIC0zNDcsOCArNTUyLDIzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5o
ZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4
ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3du
SW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxs
b2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBkZWFsbG9j
YXRlU3BhcnNlSW5kZXhNYXAoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAg
ICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIGJv
b2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywg
QXJyYXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGRlc2lyZWRMZW5ndGgpOworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIg
bV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsg
Tm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRD
b25zaXN0ZW5jeUNoZWNrIH07CisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CiAgICAgfTsK
IAogCkBAIC00OTEsMTggKzcxMSwxMiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxU
aGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBH
bG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldE91dE9mTGluZVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVChidXR0ZXJmbHkpOwogICAgIEFTU0VSVChzdHJ1
Y3R1cmUpOwotICAgIGlmICghc3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxp
bmVTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXpl
KCkpOwotICAgIH0KICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAg
ICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAg
IG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01
NDEsOCArNzU1LDcgQEAgaW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQog
fQogCiBpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMsIDApCisgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkp
CiB7CiB9CiAKQEAgLTk0MywxMyArMTE1NiwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0
aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4g
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5l
U3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwog
fQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4g
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJ
bk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3Rv
cmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAl
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzExNzAsNyBAQCBpbmxpbmUgaW50IGluZGV4
UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNl
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3
ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAg
ICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQo
b2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXpl
X3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3Rv
cmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNp
Zm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBf
aAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBT
cGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlw
ZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnko
KSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9p
ZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFy
c2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3Mg
U3BhcnNlQXJyYXlWYWx1ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFy
c2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAg
ICAgICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3Ro
SXNSZWFkT25seSA9IDIsCisgICAgfTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVy
YXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKCkKKyAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBt
X3JlcG9ydGVkQ2FwYWNpdHkoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3Bh
cnNlTW9kZSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1f
ZmxhZ3MgfCBTcGFyc2VNb2RlKTsKKyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHko
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAg
IH0KKworICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2Zs
YWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAg
ICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBtYXAKKyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBK
U09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBBZGRS
ZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VS
VCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAg
ICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9p
ZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNl
IG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVy
YXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxv
dyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFw
OworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVm
IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJl
c3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBp
KQoreworICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21h
cC5hZGQoaSwgZW50cnkpOworICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7
CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFw
OjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0
ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFk
ZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBm
aXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1v
biBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QK
KyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBk
b25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJy
YXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwor
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgeworICAg
ICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0g
ZW50cnkuQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkp
OworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRl
cigpOworICAgIAorICAgIGlmICghc2V0dGVyKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykK
KyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXks
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRk
UmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0
ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAg
IC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5k
IHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmln
aHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShy
ZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7CisgICAgfQorCisgICAgZW50cnkuYXR0cmlidXRlcyA9IDA7CisgICAgZW50
cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYg
c2xvdCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7CisgICAgQVNT
RVJUKHZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7
CisgICAgaWYgKCFnZXR0ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQor
CitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKSBjb25zdAoreworICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpn
ZXQoKSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6
OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgaWYg
KExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRl
cigpOworICAgIGlmICghZ2V0dGVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICByZXR1cm4g
Y2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5
TGlzdCgpKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3Bh
cnNlTW9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4g
QmFzZTo6Z2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaXRlcmF0b3IgZW5kID0gbV9t
YXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdl
QmFycmllci5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJp
ZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1
YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VC
YXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlT
dG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hl
Y2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCos
IFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0g
bmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5l
d1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdl
OyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAq
bV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9y
YWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1f
c3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdl
OwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTY2LDkgKzU2NiwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGlu
ZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAg
OiBtX2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3RydWN0
dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZseShi
dXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155083</attachid>
            <date>2012-07-27 16:16:21 -0700</date>
            <delta_ts>2012-07-27 21:10:53 -0700</delta_ts>
            <desc>it&apos;s getting there!</desc>
            <filename>butterflies_patch_7.diff</filename>
            <type>text/plain</type>
            <size>161323</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMi0wNy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6Y29weUhlYWRlckZyb20pOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6OmFsbG9jQmFzZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzaXplRm9yKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OkJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNl
dExlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRUeXBlKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aEFuZFR5cGUpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseU9mZnNldCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVy
Zmx5QWRkcmVzcyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3du
SW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rv
ckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxl
dGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NwYXJzZUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6c2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2JqZWN0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6Om9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OmluZGV4UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRv
QmFzZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oOgorICAgICAgICAoSlND
OjpvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlT
dG9yYWdlLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoU3BhcnNl
QXJyYXlFbnRyeSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6OlNwYXJzZUFycmF5
RW50cnkpOgorICAgICAgICAoU3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnJlbW92ZSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZvdW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmJlZ2luKToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToKKyAgICAgICAgKiBydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6
Z2V0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisKIDIwMTIt
MDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBmdW5jdGlvbmFsaXR5IG9mIE1hcmtlZEFsbG9jYXRvcjo6bV9jdXJyZW50QmxvY2sK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNp
Zm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisj
aW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0
aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2Nh
dGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAq
IEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMu
CisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlk
ZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5E
RVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFs
dWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90
IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2Jq
ZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBp
ZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hl
cmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1h
cC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8v
IGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1
bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVy
dGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhl
cgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJz
ZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdv
dWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0
IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMg
d291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9y
ZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggKEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3RoKQorCisvLyBUaGVzZSB2
YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0
aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2Vl
IDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90
IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFY
X0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4g
aXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQor
Ly8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGgg
KGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAg
ICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5n
dGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJ
UlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVj
dG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGlj
ZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4K
Ky8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUg
aW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4g
SWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAg
IHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5E
ZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gQXJyYXlDb252ZW50aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlT
dG9yYWdlX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRo
aXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpT
QXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0
cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFy
cmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3Jh
Z2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUg
c3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sg
dW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIg
aXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFz
ICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7
IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBw
YXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3Jh
Z2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZy
b20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRl
ci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsg
cmV0dXJuIHJlaW50ZXJycGV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGlu
Z0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0
aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhp
bmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgo
KSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExl
bmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5n
dGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFk
ZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5n
dGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhl
cikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAg
ICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlh
bGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVy
Lm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7
CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVy
cG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRy
X3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0
b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
cik7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVu
Z3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkg
KyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisj
aW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZzZXQu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RW
aXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1
dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlh
YmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xldG9u
KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZseSgp
OyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9w
ZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGlj
IEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHByZUNh
cGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
QnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5k
ZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNv
bnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9y
Jiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBp
bmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9Cisg
ICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVh
ZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlT
dG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5
bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9y
YWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3Rv
cmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hl
YWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZv
aWQqIGJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEJ1dHRlcmZseSog
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNp
emVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBt
dWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNo
aWZ0KHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNk
ZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0
dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5
Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRl
eGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2Jh
bERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2Uo
dmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hl
YWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHBy
b3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCog
QnV0dGVyZmx5OjpiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBi
YXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4g
b2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlT
dG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkp
LCB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7Cisg
ICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIo
KS0+cHJlQ2FwYWNpdHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigpLT5p
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
K3sKKyAgICBBU1NFUlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAgIHZv
aWQqIGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAg
ICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHByb3Bl
cnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2Fw
YWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0
LT5iYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNp
emUoMCwgcHJvcGVydHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1By
ZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAg
cmV0dXJuIHJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KCksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKCksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5s
aW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit1aW50NjRfdCBJbmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQ
cm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRl
ZiB1bnNpZ25lZCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVz
ZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAg
ICAgID0gMTsKK3N0YXRpYyBjb25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisv
LyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkg
ICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAg
ICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJ
c0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9m
VHlwZUJpdHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBu
dW1iZXJPZkxlbmd0aEJpdHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11
bUxlbmd0aCA9IGxlbmd0aE1hc2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBl
bXB0eVNpbmdsZXRvbigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJ
bmRleGluZ0hlYWRlcio+KCZzX2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlz
IHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5v
dCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJ
bmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5n
dGhBbmRUeXBlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGlu
Z1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9s
ZW5ndGhBbmRUeXBlID4+IG51bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNl
dExlbmd0aChpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0g
bWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5
cGUgJiB+bGVuZ3RoTWFzaykgfCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlw
ZShJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9ICht
X2xlbmd0aEFuZFR5cGUgJiBsZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlw
ZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5n
dGhBbmRUeXBlKGludDMyX3QgbGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5k
VHlwZSA9IGxlbmd0aCB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZM
ZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJu
IG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1f
YXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZy
b20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2Up
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihh
cnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3Bl
cnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9w
ZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUK
KyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6ZV90
IHByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7
CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0
aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5n
dGhBbmRUeXBlOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2Ug
YW5kIGl0cyB0eXBlLgorICAgIAorICAgIHN0YXRpYyB1aW50NjRfdCBzX2VtcHR5U2luZ2xldG9u
OyAvLyBVc2UgYSBQT0QgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgZ29vZCB0aGlu
Z3MuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisj
ZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGlu
Z0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoKQoreworICAgIGlm
IChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5s
aW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKQor
eworICAgIGlmIChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8v
IE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0
cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJl
Z3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0v
LyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3
aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5v
dCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUg
dmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHks
IHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4g
dW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5k
aWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8v
Ci0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFi
bGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lO
REVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhl
Ci0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkg
d2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAq
IFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3Rv
cmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGlu
IFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAu
Ci0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBp
biB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9u
IHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUg
dmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBt
aW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4K
LS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3Bh
cnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rp
b24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVk
IHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZs
b3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBt
dXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCku
Ci0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhl
c2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigp
IHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMs
IHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlz
IG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5l
IE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1Jf
TEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2Nh
dGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVu
Z3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRV
Ci0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8g
bGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmlu
ZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBh
IHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBp
bmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0
b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
YXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1
bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpT
QXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0
aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhp
cwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUg
bmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBj
b25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVk
IGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZv
clZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1
cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0
eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0
YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewog
ICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTE3OSwzNDggKzExNiw2IEBAIEpTQXJyYXkqIEpT
QXJyYXk6OnRyeUZpbmlzaENyZWF0aW9uVW5pbmkKICAgICByZXR1cm4gdGhpczsKIH0KIAotLy8g
VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIG9i
amVjdC4KLXZvaWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3Qt
PmNoZWNrQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwotICAgIHRoaXNP
YmplY3QtPmRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJzZUFycmF5VmFs
dWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXks
IHVuc2lnbmVkIGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAgICBlbnRyeS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRkUmVzdWx0IHJl
c3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAu
Y2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Ci0g
ICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5
IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNp
dHk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCBy
ZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAm
IGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0
aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJy
YXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5n
IHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0
ZXJhdG9yKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRl
clNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNz
b3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBpZiAoc2hv
dWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhv
ZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNhbGwoZXhlYywg
c2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQotaW5saW5lIGJv
b2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17
Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlF
bnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUg
YSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2Ug
bWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9w
ZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5v
dCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAg
IHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNo
b3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQg
aXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7
Ci0gICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5U2xvdCYgc2xvdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7
Ci0gICAgQVNTRVJUKHZhbHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0
dGVyKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+
Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0
ZXIpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFy
cmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0K
LSAgICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0
KS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAg
IHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhl
Yy0+ZW1wdHlMaXN0KCkpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXROb25TcGFyc2VNb2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAg
IHJldHVybiBCYXNlOjpnZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBl
bmQgPSBtX21hcC5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19
Ci0KLXZvaWQgSlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotewotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsK
LSAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQot
dm9pZCBKU0FycmF5OjpkZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFy
c2VWYWx1ZU1hcDsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5
OjplbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFs
bG9jYXRlU3BhcnNlTWFwKGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOwotICAgIH0KLQotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRo
aXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBj
aGVjayB3ZSBjYW4gd3JpdGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0
IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAg
IG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdS
YXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5l
d1N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAg
ICBtZW1jcHkobmV3U3RvcmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3
U3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgbV9pbmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0K
LQotdm9pZCBKU0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJy
YXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAg
ICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlw
dG9yLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRl
cyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3Ip
ICYgfkFjY2Vzc29yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0g
MDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAg
Z2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xk
RGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0g
b2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9
IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAg
IHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9
IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBh
Y2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVy
KQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdl
dHRlcik7Ci0gICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0
dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChv
bGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1h
cC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9s
ZERlc2NyaXB0b3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0Fy
cmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9u
KQotewotICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFy
c2VNb2RlKCkpIHsKLSAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxh
ciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2ls
bCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0
aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0
aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVy
cmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRl
ZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVk
aW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5h
dHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQot
Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBB
U1NFUlQobWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2Fs
bGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJv
cGVydHkgbmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1h
cCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxl
IGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2Yg
Ty4KLSAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBm
YWxzZSwgdGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5k
IGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewot
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShy
ZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlz
IG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dl
bmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwg
dGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBv
YmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5k
IFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3Jp
YmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBp
cyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQg
cHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVs
c2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVh
dGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0
IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJh
YmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2Mu
IElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRo
ZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMg
c2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgot
Ci0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1h
cC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJ
bk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAg
ICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3Io
ZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5k
ZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5n
dGggPSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUu
IFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2
LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJy
ZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1
ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNp
bmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3Jp
cHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFi
bGUoKSkgewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFi
bGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBj
b25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAg
ICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBE
ZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAo
ZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9
IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElm
IElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlk
YXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0
b3IoKSkgewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQp
IGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4K
LSAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlm
ICghY3VycmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hh
bmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5
LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRo
ZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0
YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5n
IHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tD
b25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSBy
ZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhl
aXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhl
IHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0
byBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3Rpbmcg
dmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5k
IFtbRW51bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJl
c3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVz
LgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUg
Ym90aCB0cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1
cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVl
LgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4x
LiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBT
YW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywg
ZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBj
dXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAg
ICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
QWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZp
Z3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlm
ICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJl
amVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigp
ICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9m
IGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlp
LiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2Ft
ZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0
ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRl
ciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVz
YyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0
ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhl
IGZpZWxkLgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwg
Y3VycmVudCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOwotfQot
CiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3
cml0YWJsZSkKIHsKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3cml0YWJsZSk7
CkBAIC02MzMsMzUgKzIyOCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QKICAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHkoZXhl
YywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICByZXR1
cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fc3RvcmFnZTsKLQotICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0g
ICAgICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAg
IGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0
KHNsb3QpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4gb2JqZWN0LT5KU09i
amVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0KIAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTY3MiwxMCArMjM5LDYgQEAgYm9vbCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAo
aSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApAQCAtNjg3LDI2ICsyNTAsNiBAQCBib29sIEpTQXJy
YXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsK
LSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAo
aSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2
YWx1ZSkgewotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5n
ZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RG
b3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtNzcwLDE1MSAr
MzEzLDYgQEAgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRQogICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNT
RVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRF
WCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBo
YW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgot
ICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBl
eHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNy
ZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAg
ICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwg
YmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAg
ICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAx
KSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBp
dCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgot
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRv
IGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFs
dWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
ICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9o
aWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAg
ICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3Rv
cmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRs
eSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBz
by4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJz
ZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0
aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgp
IHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewotICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNl
VmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0g
bV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJ
bkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2
ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8v
IFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQot
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBB
U1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
Ci0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwot
ICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAg
ICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSAr
IDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNl
IGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3Iu
Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZl
Y3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQg
dGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkp
OwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1cm4gbWFwLT5w
dXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB9Ci0KLSAg
ICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQ
cm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAg
ICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICBsZW5ndGggPSBpICsg
MTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8g
V2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2Fu
dCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFy
c2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNl
LCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkg
PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1h
cC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFs
dWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVh
c2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3Qp
Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9v
bCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihjZWxsKTsKQEAgLTEwMDAsODQgKzM5OCw2IEBAIHZvaWQgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamUKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQg
ZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1
bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUp
OwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0
aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJh
eVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50
IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkg
LyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5z
aWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5v
dCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
ZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAx
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgp
OwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RP
Ul9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3Rl
bnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNl
IHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50
IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAg
aWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdM
ZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdl
dE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUg
aXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4K
LSAgICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFn
ZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3Ro
KSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAg
IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9z
dG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0
b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAv
LyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVj
YXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQg
bmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBj
YXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVk
IG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAg
ICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NC
YXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVj
dG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5n
dGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVu
Z3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVC
YXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8v
IENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2
ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rv
ckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2Fs
bG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZl
Y3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBj
b3VudCkKIHsKQEAgLTE4MDEsNDcgKzExMjEsNSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0
Rm9yU29ydGluZyhKU0dsCiAgICAgcmV0dXJuIG51bURlZmluZWQ7CiB9CiAKLSNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQotCi12b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lz
dGVuY3lDaGVja1R5cGUgdHlwZSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0KLSAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24p
OwotCi0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5j
eUNoZWNrKQotICAgICAgICBBU1NFUlQoIW1fc3BhcnNlVmFsdWVNYXApOwotCi0gICAgdW5zaWdu
ZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3ZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spCi0gICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRv
IGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgotICAgICAgICAgICAgKytudW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09
IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICBB
U1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bV9sZW5ndGgpOwotCi0gICAgaWYg
KG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
aXQtPmZpcnN0OwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bV9sZW5ndGgp
OwotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAgICAgICAgQVNTRVJU
KGl0LT5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3Rl
bmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCku
aXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxs
b2NhdGVkLgotICAgICAgICB9Ci0gICAgfQotfQotCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lv
biAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEwOSArMzAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBKU0FycmF5OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHN0cnVj
dCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAg
ICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNl
QXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4
ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90
JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0Owot
ICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFw
IHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBX
VEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5v
cm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0
aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBl
ZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBB
ZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6
IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRp
Y19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNl
dExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3Rh
dGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhl
IG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3Rh
dGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAg
ICAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJhdG9y
IGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQotICAgICAgICAvLyBU
aGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBv
ZiB0aGUgZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJl
bW92ZShpdCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1v
dmUoaSk7IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNv
bnRlbnRzIG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4g
bV9tYXAuZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8gT25seSBhbGxvdyBjb25zdCBi
ZWdpbi9lbmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1h
cCBtX21hcDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAgICAgc2l6ZV90IG1fcmVwb3J0
ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVh
bCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0
J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVjdCBieSBwb2ludGluZyB0byBt
X3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVz
ZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0
IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUg
QXJyYXlTdG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hp
ZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUg
YnkgdXNpbmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9m
KEpTVmFsdWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1f
bGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhlIGFycmF5Ci0gICAgICAgIHVu
c2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxsb2NCYXNlOyAv
LyBQb2ludGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBpbmcg
dGhpcyBwb2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBsZWFr
IGRldGVjdG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIC8vIE5lZWRz
IHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCi0gICAgICAgIHVpbnRw
dHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBtX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0cl90IG1fcGFkZGluZzsKLSNl
bmRpZgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Ci0KLSAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBu
dW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
YWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0gICAg
fTsKLQogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBXYWxrZXI7CkBAIC0xNTMsOCArNTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgICAgIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFz
dCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjEgKzYyLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6
OnB1dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBp
cyBub3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4K
LSAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRl
cyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4K
LSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKQEAgLTE5
OSw2NCArODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5z
aWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0
b3JbaV07IH0KLSAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJu
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IGNhblNldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQot
ICAgICAgICB2b2lkIHNldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgo
aSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHgg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9s
ZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBp
bml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0g
ICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRp
YWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChp
ID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlD
cmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFs
TGVuZ3RoLAotICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXpl
IG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWdu
ZWQgbmV3TGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhh
dmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0g
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFn
ZS0+bV9sZW5ndGgpOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVz
IHRoZSBpbml0aWFsTGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAg
ICAgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwot
I2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVN
YXA7Ci0gICAgICAgICAgICByZXR1cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAg
ICB9Ci0KICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxs
RnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwogCkBAIC0yNzcsOCArMTAxLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9u
YXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwpAQCAtMzA1LDI1ICsxMjcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGVh
bGxvY2F0ZVNwYXJzZU1hcCgpOwogCiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xv
d0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKIAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVz
aXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93
Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1
bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKIAotICAgICAgICBlbnVt
IENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5
Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQg
bGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUg
bnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCiAgICAg
ICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwogCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBT
cGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQogICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9CiAgICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXks
IG1faW5kZXhCaWFzKTsgfQogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAg
ICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAg
cHVibGljOgpAQCAtMTQwLDYgKzE0MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9idXR0ZXJmbHkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAjaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1
Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CkBAIC0xNzAs
NiArMTgwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBjb25zdCBDbGFz
c0luZm8qIG1fY2xhc3NJbmZvOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0
cnVjdHVyZTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1f
YnV0dGVyZmx5OwogICAgIH07CiAKICAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdF
YXJseUNlbGxUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFy
cmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVy
aXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAw
LgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9H
Uk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisK
IEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzkxLDcwIEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXpl
KQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsK
LSAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgQVNTRVJU
KGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwogICAgIEFTU0VSVChz
dG9yYWdlU2l6ZSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAgICBzaXplX3QgY2Fw
YWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
Pik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdlIC0gY2FwYWNp
dHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNl
KGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgUHJvcGVydHlTdG9y
YWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNpdHk7Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdldCArIDE7Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAtIDE7CisgICAgSW5k
ZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAg
CisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJlQ2FwYWNpdHkoKTsK
KyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFkZXIuaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9u
KHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkg
dGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0g
bmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdl
IGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9y
IChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NF
UlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2
YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFy
cmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChu
ZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFn
ZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYg
YXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5jb3B5
SGVhZGVyRnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
U291cmNlID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCk7IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJy
ZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAg
ICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZh
bHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0
b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAg
ICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
LCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAg
ICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpTT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBA
IC0xMjIsOSArMTY4LDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3Rv
cmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9m
TGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91
dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSAhPSBC
dXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0
dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OCw5IEBAIHZvaWQg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFn
ZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0
b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5h
bE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRl
cmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigp
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVj
dCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEw
ICsyMDcsNDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAg
IHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3Jl
IGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQg
aXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0
eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgp
KSB7CisgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGkgPCBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAg
ICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+Zmlu
ZChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90
KTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0yNDAsNiArMzI0LDk2IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CiB9CiAKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFt
YXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisK
KyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcC0+
c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlz
IGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdy
aXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRv
IHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0aGlz
LCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
fQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX3N0b3JhZ2UtPnJlc2l6ZUFycmF5
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCAwKTsKKyAg
ICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPm1faW5kZXhCaWFzID0gMDsK
KyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1cm4g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXItPnR5cGUoKTsKKyAgICBBU1NFUlQob2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBl
ID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5n
cm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
IDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBuZXdCdXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkuc2V0VHlwZShvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlKTsK
KyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVj
dG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0
LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFw
ID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwor
ICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dp
dGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAg
ICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKIHZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpOwpAQCAtNTE1LDggKzY4OSw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0ds
b2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAg
IGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2li
bGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVu
dEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01
NzMsMTEgKzc0NiwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxs
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9j
YXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0
aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkg
ewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAg
IHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0
Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0
dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UK
QEAgLTYwMywyNiArNzc2LDUxNiBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0
b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNP
YmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVz
Y3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1
ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAt
PmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGRE
ZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUo
KSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlv
bi4KKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAg
IEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVz
ZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwor
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisg
ICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAg
ICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsK
KyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQor
ICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAg
ICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7
CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisg
ICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29y
KTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRl
c092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRv
cigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1
LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZG
KTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0
IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJh
eQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhh
dCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNl
CisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlz
c2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwor
ICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRv
IHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgor
ICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NF
UlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dF
eGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
fQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBj
dXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAg
U3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNp
YmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVu
ZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4g
SWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5l
IHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0
YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVy
dHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3Jp
dGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZh
bHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBh
biBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhl
IG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0
IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQ
cm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5h
bWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tF
bnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVz
Y3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUg
ZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0
ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAg
ICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBk
ZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUg
fCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMp
OworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2Ny
aXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5n
dGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkg
ZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5
IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2
ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcg
ZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3Jp
dGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUlu
TWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2Ny
aXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNl
IHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5h
LiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4K
KyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0
b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBv
ZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlm
IHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0Vu
dW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVn
YXRpb24gb2YgZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVBy
ZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUo
KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERl
c2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAg
IGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4g
RWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihE
ZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50Lmlz
RGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAg
ICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBv
YmplY3QgTyBmcm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNz
b3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRl
ZCBwcm9wZXJ0eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1l
cmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0
cmlidXRlcyB0bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAg
ICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAg
ICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJv
cGVydHkncyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAg
Ly8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0
ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5p
c0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAg
ICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8v
IDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Us
IHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVu
dC53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBv
ZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlp
LiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAg
ICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVs
ZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVu
dC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZh
bHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFs
dWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5
LiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFj
Y2VwdGFibGUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJl
bnQuc2V0dGVyUHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29y
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJv
dGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRd
XSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7
CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQg
b2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50Lltb
R2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclBy
ZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBl
YWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3Jy
ZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9i
amVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0
b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJl
dHVybiB0cnVlLgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6
ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRl
YWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09i
amVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVN
YXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2Jh
bERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1h
cCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7
CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJh
eSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3Bl
cnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNs
YWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0
eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdl
OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdl
Pih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1h
cCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91
bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1h
cC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3Is
IGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYm
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAg
IC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4g
cmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHBy
b3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAg
bWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5n
dGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlz
IG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3Ro
ID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKwor
ICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0
aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNl
IGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9v
IHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJ
bkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAg
IGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgs
IG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUs
IHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBt
X3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0lu
VmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZh
bHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwor
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkg
aW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
dmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAgc3dp
dGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHx8ICFpc0V4dGVu
c2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVJbml0aWFsQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aChpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7
CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisg
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKKyAg
ICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIC8vIEZpcnN0LCBoYW5kbGUg
Y2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlm
IChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNp
YmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQg
dGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAg
ICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0g
c3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEp
OworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNp
bmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlm
IChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsK
KyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMg
bGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAg
ICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3Rv
ciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhl
IHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAg
aWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5
IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVh
ZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAi
QXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVu
c2libGUuIik7CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRM
ZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEg
bWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8v
IFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBz
ZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMu
CisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4g
bWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKworICAg
IC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBt
X251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8v
IENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRl
IHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5m
aXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBu
ZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5OworICAgIHN3aXRjaCAoYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6
IHsKKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAg
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVj
dG9yTGVuZ3RoKDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5n
dGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAg
ICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKwor
ICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3Ro
ID0gbWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5ndGgg
PCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3Ro
OworICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAg
ICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNl
ZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAg
ICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUp
KTsKKyAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxv
dy4KKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVu
Z3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5j
cmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IG1p
bihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBtaW4o
aW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpCit7CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJheUxl
bmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVj
dG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQor
eworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5
IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMg
ZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZl
IHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2ll
bnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4Qmlh
czsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsK
KyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBuZXdW
ZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKKworICAgIC8vIEZh
c3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxs
b2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkgeworICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlS
aWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdW
ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAg
ICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwg
b2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxv
dyBhcnJheSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKGluZGV4Qmlh
cyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAg
ICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhl
IHByZS1jYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0
b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBz
dG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisg
ICAgICAgIGluZGV4Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRl
cmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0
eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEs
IHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAgIG1fYnV0
dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVl
OworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3Rv
cmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAodHlwZSA9
PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJz
ZU1hcCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgeworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAo
dHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICB2YWx1
ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVh
bGxvY2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAg
ICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBz
dG9yYWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVl
TWFwLT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBBU1NF
UlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgg
Pj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAg
ICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBM
aWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgIH0K
KyAgICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKworQnV0dGVyZmx5
KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUg
PiBvbGRTaXplKTsKIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVy
biBuZXdQcm9wZXJ0eVN0b3JhZ2U7CisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1
bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQorICAgIC8vIHdlIG1pZ2h0IGJl
IGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIAorICAgIHJldHVybiBtX2J1dHRl
cmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsK
IH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxMjkzLDQ2IEBAIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQor
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3Bl
cnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBp
ZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAo
aXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTQwMywyNiBAQCBwcml2YXRlOgog
ICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNr
IG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8v
IEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVy
dGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3
aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24t
Y29uZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBk
ZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4K
ICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8g
SWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAg
Ly8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3Qt
PmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAg
ICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlw
dG9yOwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAg
ICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTQ0OCw4IEBAIGJvb2wgSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3Jp
cHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJv
cGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAg
ICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJl
bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsx
NDYxLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9w
ZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNj
cmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAog
ICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBw
cm9wZXJ0eQpAQCAtNzg0LDggKzE0ODMsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0Vx
dWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9y
KGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1
cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMg
b2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNTAxLDcgQEAgYm9v
bCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3Qt
PmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1
ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7
CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNl
dHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEy
ICsxNTExLDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAg
ICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlw
dG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVz
Y3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAg
dW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChj
dXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJT
ZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpT
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGlu
ZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVk
IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBh
cmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisg
ICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRM
ZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhl
IGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBv
biBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMu
IFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJu
IHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShl
eGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
KyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwg
c2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDYgKzk2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAg
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBm
aW5hbGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIApA
QCAtMTIwLDggKzEyMiwxNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBhbGxv
d3NBY2Nlc3NGcm9tKEV4ZWNTdGF0ZSopOwogCisgICAgICAgIHVuc2lnbmVkIGdldEFycmF5TGVu
Z3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0
b3JMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAg
ICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8v
ICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3Jl
YXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQg
Y29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRl
eChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5T
ZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIEFT
U0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAgICAgICAg
ICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0
aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5
IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBz
dG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdl
IHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgs
IG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9w
cmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgbV9zdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgICAgICAgICAgICAgIHJldHVy
biBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7
CiAKICAgICAgICAgLy8gcHV0RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNp
b24gb2YgJ2RlZmluZU93blByb3BlcnR5JzoKICAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBj
aGFpbiBpcyBub3QgY29uc3VsdGVkCkBAIC0yMDMsOCArMzc0LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFn
ZS5nZXQoKTsgfQorICAgICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2Uo
KSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgICAgICBj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTIyNyw3ICs0MDEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGlu
ZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpOwogICAg
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjY5LDE4
ICs0NDMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCk7
IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUq
IGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFnZSBncm93
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
QnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
cmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRD
YXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxv
Y2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0
eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2
b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZs
YXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAg
ewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGds
b2JhbERhdGEsIHRoaXMpOwpAQCAtMjk0LDcgKzQ2Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpOwotICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
OwogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKQEAgLTMyNiw3ICs0OTQsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZW1v
dmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZp
c2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZv
aWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBz
dG9yYWdlU2l6ZSk7CisKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlT3JaZXJv
KCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERh
dGEmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKQEAgLTMzOSwxNiArNTQ0LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAg
CisgICAgICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7Cisg
ICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERpcmVj
dEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90
KFByb3BlcnR5U2xvdCYsIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVu
dHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25z
dDsKICAgICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsK
LQotICAgICAgICBTdG9yYWdlQmFycmllciBtX291dE9mTGluZVN0b3JhZ2U7CisgICAgICAgIAor
ICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5
RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7Cisg
ICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmKTsK
KyAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50
TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICBib29sIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisKKyAg
ICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ss
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lm
ICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsg
fQorI2Vsc2UKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVu
Y3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgfTsKIAogCkBAIC00
OTEsMTggKzcxOSwxMiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxUaGlzKCkgY29u
CiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxUaGlz
VHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldE91dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogeworICAgIEFTU0VSVChidXR0ZXJmbHkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwot
ICAgIGlmICghc3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAg
IH0KICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9m
TGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVy
Zmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDEsOCArNzYz
LDcgQEAgaW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQogfQogCiBpbmxp
bmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICwg
bV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMsIDApCisgICAgOiBKU0NlbGwoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCiB7CiB9CiAK
QEAgLTU5MCwxNSArODExLDE2IEBAIGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2Jq
ZWN0KEUKIAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0
aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUp
KSB7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpKSB7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcygpICYmIGxvY2F0aW9uLT5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7CisgICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgbG9jYXRpb24tPmdldCgpLCBvZmZzZXRGb3JMb2NhdGlvbihs
b2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBnZXREaXJlY3RPZmZz
ZXQob2Zmc2V0KSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBh
IGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAt
OTQzLDEzICsxMTY1LDEzIEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRT
dG8KIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJu
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmpl
Y3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOworICAgIHJldHVybiBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNl
dCkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiB9CiAKIGlubGluZSBp
bnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAg
QVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUgc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNl
dCk7CiB9CkBAIC05NTcsNyArMTE3OSw3IEBAIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFz
ZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAg
ICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlu
bGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9m
ZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAg
ICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0g
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJl
c3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3Bl
cnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBTcGFyc2VB
cnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFycmF5RW50
cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdyaXRlQmFy
cmllcjxVbmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRl
cygwKSB7fQorCisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBjb25zdDsK
KyAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0
eURlc2NyaXB0b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZh
bHVlTWFwIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnks
IFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dWludDY0X3Q+ID4gTWFwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIE5vcm1hbCA9
IDAsCisgICAgICAgIFNwYXJzZU1vZGUgPSAxLAorICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0g
MiwKKyAgICB9OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9y
OworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0
eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAoKQorICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQorICAgICAgICAsIG1fcmVwb3J0ZWRDYXBh
Y2l0eSgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9m
bGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAg
ICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJz
ZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNf
Y2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8v
IFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOworICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5z
aWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEFkZFJlc3VsdCBhZGQoSlNP
YmplY3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVy
biBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUg
aXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQgcmVtb3Zl
KGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92ZSh1bnNp
Z25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBu
b3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5vdEZvdW5k
KCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2lu
L2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAgRmxhZ3Mg
bV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGkpCit7CisgICAgU3Bh
cnNlQXJyYXlFbnRyeSBlbnRyeTsKKyAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpz
VW5kZWZpbmVkKCkpOworCisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRy
eSk7CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKKyAgICBpZiAoY2Fw
YWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7CisgICAgICAgIEhlYXA6OmhlYXAoYXJyYXkp
LT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAq
IChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAg
ICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsK
KyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwor
CisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBh
ZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0
aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVu
c2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1v
dmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNp
YmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlmIChz
aG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRy
eS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykK
KyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpn
ZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmpl
Y3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisg
ICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShz
ZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFy
Z3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6
OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBo
YXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYm
ICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRv
cik7CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5n
IHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsK
KyAgICB9CisKKyAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKKyAgICBlbnRyeS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOwor
CisgICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVj
dCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdl
dHRlcikgeworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lk
IFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNv
bnN0Cit7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1
dGVzKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5KSBjb25zdAoreworICAgIEpTVmFsdWUgcmVzdWx0ID0g
QmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBpZiAoTElLRUxZKCFyZXN1
bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBKU09i
amVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7CisgICAgaWYg
KCFnZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworfQor
CitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOworICAgIHJldHVybiBCYXNlOjpnZXQoKTsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKKyAg
ICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHJl
dmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VC
YXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgU3RvcmFnZUJhcnJpZXJfaAotI2RlZmluZSBTdG9yYWdlQmFycmllcl9oCi0KLSNpbmNs
dWRlICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLXR5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlT
dG9yYWdlOwotdHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFBy
b3BlcnR5U3RvcmFnZTsKLQotY2xhc3MgU3RvcmFnZUJhcnJpZXIgewotcHVibGljOgotICAgIGVu
dW0gVW5jaGVja2VkVGFnIHsgVW5jaGVja2VkIH07Ci0gICAgU3RvcmFnZUJhcnJpZXIoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFn
ZSkKLSAgICB7Ci0gICAgICAgIHNldChnbG9iYWxEYXRhLCBvd25lciwgc3RvcmFnZSk7Ci0gICAg
fQotICAgIAotICAgIFN0b3JhZ2VCYXJyaWVyKFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBVbmNo
ZWNrZWRUYWcpCi0gICAgewotICAgICAgICBzZXQoc3RvcmFnZSwgVW5jaGVja2VkKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgUHJvcGVydHlTdG9y
YWdlIG5ld1N0b3JhZ2UpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSwgVW5j
aGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9
Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9w
ZXJhdG9yLT4oKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9yKigpIHsgcmV0dXJuICptX3N0b3JhZ2U7IH0K
LSAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAg
ICAKLSAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0b3Jh
Z2U7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjYsOSArNTY2LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW5saW5lIEpTQ2VsbDo6SlND
ZWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
aW5saW5lIEpTQ2VsbDo6SlNDZWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IG1fY2xhc3NJbmZv
KHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpCiAgICAgICAgICwgbV9zdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgdGhpcywgc3RydWN0dXJlKQorICAgICAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKICAg
ICB7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155105</attachid>
            <date>2012-07-27 21:10:53 -0700</date>
            <delta_ts>2012-07-28 13:32:04 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>butterflies_patch_8.diff</filename>
            <type>text/plain</type>
            <size>170417</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NSBA
QAorMjAxMi0wNy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9B
cnJheVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6Y29weUhlYWRlckZyb20pOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6OmFsbG9jQmFzZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzaXplRm9yKToKKyAgICAgICAg
KiBydW50aW1lL0J1dHRlcmZseS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OkJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmVtcHR5
U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNl
dExlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRUeXBlKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aEFuZFR5cGUpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjpzZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3Bw
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJy
YXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZl
Y3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRl
eFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29t
cGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1NwYXJzZUlu
ZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6Om9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OmluZGV4
UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvQmFzZSk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oOgorICAgICAgICAoSlNDOjpvZmZzZXRJ
bk91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmg6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoU3BhcnNlQXJyYXlFbnRy
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6OlNwYXJzZUFycmF5RW50cnkpOgor
ICAgICAgICAoU3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxl
bmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRM
ZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Zmlu
ZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnJlbW92ZSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZvdW5kKToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6
ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmJlZ2luKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisKIDIwMTItMDctMjcgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGxpdCBm
dW5jdGlvbmFsaXR5IG9mIE1hcmtlZEFsbG9jYXRvcjo6bV9jdXJyZW50QmxvY2sKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJy
YXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAi
SW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpT
QXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Cisv
LyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFn
ZSB2ZWN0b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8g
UHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJz
IHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBv
ciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChz
cGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZG
RkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVy
ZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3Bl
cnR5IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIs
IHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0g
TUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBp
biBlaXRoZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFy
cmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246
CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVl
IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhl
IGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBp
bnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAg
IGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwg
ZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0
b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Cisv
LyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUg
cG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8
PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAg
ICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggKEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3RoKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2
ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRy
b2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8v
cHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUK
KyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5
IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lO
REVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFu
IGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9
IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRo
ZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkg
d2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RP
Ul9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3
aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIg
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4g
aW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQs
IHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBz
cGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWlu
RGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBs
ZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVs
dGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQXJyYXlDb252ZW50aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
KgorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gK
KworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0
IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2Jq
ZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBw
b2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFn
ZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRo
b2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVm
b3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAv
IHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxh
YmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9m
KEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90
IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEg
QnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20o
QnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9y
YWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhp
bmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlT
dG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJl
aW50ZXJycGV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciog
aW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQor
ICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVy
OiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExlbmd0aCh1bnNp
Z25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5ndGgpOyB9Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVu
Z3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5k
ZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7
CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAgICAgIG1faW5k
ZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlhbGl6YXRpb25J
bmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVyLm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5z
aWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
ICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisg
ICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0
cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3Rv
clsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9hbGxvY0Jhc2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAg
ICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JM
ZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQ
cm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOwor
CitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7
Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVi
bGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1
cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAg
CisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFj
aXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZs
eSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsg
cHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4
aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hl
YWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsg
cmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9
CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3Bl
cnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFz
c3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAg
IEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0
dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KHNpemVf
dCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVy
Zmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0
dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRl
ICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGZyb21C
YXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHks
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRl
cigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAs
IHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0
IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodmlzaXRvci5h
bGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHByb3BlcnR5Q2Fw
YWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5
OjpiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBiYXNlKGluZGV4
aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFj
aXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVy
dHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVk
KGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkg
LSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNp
emUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJv
cGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJu
IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2Fw
YWNpdHkoKSwgb2xkUHJvcGVydHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBB
U1NFUlQoIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAgIHZvaWQqIGJhc2Ug
PSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAgICB0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
LAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBmcm9t
QmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNp
dHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBv
bGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5iYXNlKHBy
b3BlcnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIHJl
c2l6ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHBy
b3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKCksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9k
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1
aW50NjRfdCBJbmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdI
ZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0
b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRlZiB1bnNpZ25l
ZCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBj
YXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsK
K3N0YXRpYyBjb25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBMaXN0IG9m
IGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAg
ICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNB
cnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNB
cnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwg
SGFzQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9mVHlwZUJpdHM7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBudW1iZXJPZkxl
bmd0aEJpdHMpIC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxlbmd0aCA9
IGxlbmd0aE1hc2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBlbXB0eVNpbmds
ZXRvbigpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hl
YWRlcio+KCZzX2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGZhY3Qg
dGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2Yg
dGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFu
Z2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hl
YWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGhBbmRUeXBl
KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGluZ1R5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9sZW5ndGhBbmRU
eXBlID4+IG51bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChp
bnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxl
bmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiB+bGVu
Z3RoTWFzaykgfCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlwZShJbmRleGlu
Z1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFu
ZFR5cGUgJiBsZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVt
YmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGhBbmRUeXBl
KGludDMyX3QgbGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IGxl
bmd0aCB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRz
KTsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29y
ZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9
IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJ
bmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
SW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihhcnJheVN0b3Jh
Z2UpIC0gMTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFn
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eVN0b3Jh
Z2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0
eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBcnJheVN0b3Jh
Z2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
bm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUKKyAgICAvLyB1
c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6ZV90IHByZUNhcGFj
aXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisKK3ByaXZh
dGU6CisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxk
IGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGhBbmRUeXBl
OyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0
eXBlLgorICAgIAorICAgIHN0YXRpYyB1aW50NjRfdCBzX2VtcHR5U2luZ2xldG9uOyAvLyBVc2Ug
YSBQT0QgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgZ29vZCB0aGluZ3MuCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIElu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5o
IgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoKQoreworICAgIGlmIChMSUtFTFko
ISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKQoreworICAgIGlm
IChMSUtFTFkoISh0eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIElu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNzEgKzQ1
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkp
OwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3
IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUg
c3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNP
YmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBz
cGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1u
dW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNl
bnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMg
Z3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMg
b25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQg
MzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQg
d2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwg
cHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4g
dW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJl
IGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9y
YWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBo
YW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChp
IDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRo
ZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1v
ZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICog
V2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3Rv
cmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5z
aXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChh
IHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5
TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBX
aGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRo
ZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5
LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRl
cGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cg
LSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhh
dCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6
ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8g
KHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9
IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5l
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZG
RkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVz
IGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQg
aW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAw
MDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBh
cnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJB
WV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZv
ciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcu
IGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0v
LyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFy
cmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9W
RUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBh
bmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVu
ZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBX
aGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9s
dmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1v
cmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNf
aW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBv
ZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMg
YSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJh
eSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBG
SVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJh
eVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3Ro
IDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxp
ZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVj
LCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0
aHJvd0V4Y2VwdGlvbikKQEAgLTE3OSwzNDggKzExNiw2IEBAIEpTQXJyYXkqIEpTQXJyYXk6OnRy
eUZpbmlzaENyZWF0aW9uVW5pbmkKICAgICByZXR1cm4gdGhpczsKIH0KIAotLy8gVGhpcyBmdW5j
dGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIG9iamVjdC4KLXZv
aWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTQXJyYXkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29u
c2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwotICAgIHRoaXNPYmplY3QtPmRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFk
ZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXksIHVuc2lnbmVk
IGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAgICBlbnRyeS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1f
bWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHko
KTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Ci0gICAgICAgIEhl
YXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBv
cnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBh
ZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2Ug
Zmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21t
b24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90
Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUg
ZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFy
cmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
LSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKLSAg
ICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwg
dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigp
KTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0
ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNhbGwoZXhlYywgc2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQotaW5saW5lIGJvb2wgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXks
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRk
UmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0
ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAg
IC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5k
IHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmln
aHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShy
ZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50
cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYg
c2xvdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNT
RVJUKHZhbHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7
Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7
Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQot
Ci1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpn
ZXQoKSwgYXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6
OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFs
dWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAo
TElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVy
KCk7Ci0gICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0g
ICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBj
YWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlM
aXN0KCkpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFy
c2VNb2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBC
YXNlOjpnZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQg
SlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewot
ICAgIG1fc3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9i
YWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0Fy
cmF5OjpkZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1h
cDsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3Bh
cnNlTWFwKGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAg
IH0KLQotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bWFwLT5zZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBh
bHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBj
YW4gd3JpdGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5l
ZWQgdG8gc2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRk
KHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
LSAgICB9Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdl
KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHko
bmV3U3RvcmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0g
ICAgbV9pbmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBK
U0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBl
bnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVl
KCkpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vz
c29yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0g
ZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3Jp
cHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9
IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2Ny
aXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9
IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAg
ICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0g
ICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKSAmIH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZp
bmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAg
IEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkp
IHsKLSAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0
eSB0byBhIHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXkn
bGwgZGVmYXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVy
dHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9t
IHRoZWlyIGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blBy
b3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVu
dGVyaW5nICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVz
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVz
Y3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBl
bnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQobWFw
KTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFt
ZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFk
ZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2
YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAgICAv
LyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhl
biBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2li
bGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBp
ZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRl
cmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRl
bnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNj
cmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVh
dGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3
aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmln
dXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERl
c2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQs
IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkg
aXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2Mg
bXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3du
IGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2Ug
W1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0
cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRoZSB2
YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1
dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRvIGl0
cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAgICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0
aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0
cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBlbnRy
eUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9z
dG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRl
eCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUuIFJldHVybiB0
cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1cm4g
dHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0
aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUg
Y29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNh
bWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50
OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0Vt
cHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewot
ICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
RGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAvLyA3
LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2Vu
dCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0
aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAoZGVzY3JpcHRv
ci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0
b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElmIElzR2VuZXJp
Y0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMg
cmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewot
ICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0Rh
dGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAgICAg
aWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3Ig
YW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5LmIuIElmIElz
RGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0
eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0
eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBv
ZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tDb25maWd1cmFi
bGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRo
ZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVs
dCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5
IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEg
cHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9m
IHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVy
YWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhl
IHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAg
ICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVz
Y3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
LCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29u
ZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIC8v
IDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAg
ICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3Qs
IGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUo
RGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRv
ci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUg
b2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1
ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50Lmdl
dHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAgICAv
LyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JE
ZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1d
IGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYg
dGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5b
W1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJl
bnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3Qs
IGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERl
c2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBj
dXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1
bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlz
IHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUg
cHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgot
ICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7
Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEpT
QXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkK
IHsKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3cml0YWJsZSk7CkBAIC02MzMs
MzUgKzIyOCw3IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QKICAg
ICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgs
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KGNlbGwpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
c3RvcmFnZTsKLQotICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0gICAgICAgIGlm
IChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFs
dWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAh
PSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4gb2JqZWN0LT5KU09iamVjdDo6ZGVm
aW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKIH0KIAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKQEAgLTY3MiwxMCArMjM5LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIApAQCAtNjg3LDI2ICsyNTAsNiBAQCBib29sIEpTQXJyYXk6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5n
dGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VW
YWx1ZU1hcCkgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7
Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtNzE0LDExICsyNTcsNiBAQCBi
b29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQXJyYXkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkgewotICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICB1
bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTczMywxOTQgKzI3
MSw5IEBAIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQKICAgICBKU09i
amVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
fQogCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAg
SlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09i
amVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhl
IHZlY3Rvci4KLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAg
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5
LgotICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAx
OwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVl
U2xvdCkKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLQotICAg
ICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUp
OwotICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMl4zMi0xIC0gdGhpcyBpcyBub3QgYW4gYXJyYXkg
aW5kZXggKHNlZSBFUzUuMSAxNS40KSwgYW5kIGlzIHRyZWF0ZWQgYXMgYSByZWd1bGFyIHByb3Bl
cnR5LgotICAgIGlmIChVTkxJS0VMWShpID4gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCB2YWx1ZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3Ig
YWxsIG90aGVyIGNhc2VzLCBjYWxsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGguCi0gICAg
dGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQot
dm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1h
cDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5
IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8g
SWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRp
Y3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJU
KGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5l
Y2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQg
aXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBn
cm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVu
Z3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVy
ZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBz
dG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3Ig
Y2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3Bh
cnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAg
IG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0
aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMg
bm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlz
RXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGgg
PSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0g
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFkIG1f
c3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZy
b20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVT
cGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVj
dG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwot
ICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0KLWJv
b2wgSlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8v
IGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBj
dXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNT
RVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50
bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAv
LyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQg
ZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NF
UlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBp
dCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRv
IGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSBy
ZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5k
IHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0
ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1h
cChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
ICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5Lgot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxl
bmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGgg
aXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwot
ICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGly
ZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0KLSAgICAvLyBSZXJlYWQg
bV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0lu
VmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMg
ZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0
ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2
ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07
Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBK
U0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25l
ZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTkyOCwzNSArMjgxLDYgQEAgYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU0FycmF5OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCi17
Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLQot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAK
LSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAg
ICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAg
ICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2
b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIHVuc2lnbmVkIGRhID0gKnN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkKj4oYSk7CkBAIC0xMDAwLDg0ICszMjQsNiBAQCB2b2lkIEpTQXJyYXk6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplCiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5z
aWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsK
LQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVh
c2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgp
Ci0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlT
aXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0
bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8g
MjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2ln
bmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3Qg
cHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRl
c2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsK
LQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1Jf
R1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50
IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2
YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBm
b3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlm
IChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVu
Z3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXRO
ZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlz
IG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0g
ICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2Ug
PSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCks
IHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxB
cnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBt
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9y
TGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
UmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5
LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5l
d0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2Fw
Y2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBu
ZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAg
dm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFz
ZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rv
ckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3Ro
KSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0
aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFy
cmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBD
b3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVj
dG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JM
ZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxv
Y0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0
b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSB1bmNsZWFyZWQuCiBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY291
bnQpCiB7CkBAIC0xODAxLDQ3ICsxMDQ3LDUgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZv
clNvcnRpbmcoSlNHbAogICAgIHJldHVybiBudW1EZWZpbmVkOwogfQogCi0jaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3Rl
bmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsK
LQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lD
aGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVk
IG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1f
bGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNo
ZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBj
cmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFs
dWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBT
b3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobnVt
VmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNT
RVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmICht
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0
LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsK
LSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChp
dC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlz
VW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
MTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
SlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3Qg
U3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAg
ICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFy
cmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYp
IGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAg
ICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7
Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RG
OjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3Jt
YWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJ
c1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRl
ZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRk
UmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBt
X2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
c2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNf
Y2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
ZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRM
ZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRp
Y19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBt
YXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRl
KiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAg
ICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBm
aW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhp
cyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2Yg
dGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1v
dmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3Zl
KGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250
ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVn
aW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAg
bV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVk
Q2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwg
ZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdz
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92
ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2Ug
dGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBp
cyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFy
cmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0
IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5
IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihK
U1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xl
bmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNp
Z25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8g
UG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRo
aXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBk
ZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0
byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRy
X3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5k
aWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVt
VmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFs
bG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
YWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07
Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xh
c3MgV2Fsa2VyOwpAQCAtMTUzLDggKzUwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0
aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3Jl
YXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAw
KTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3Qg
Y29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY3LDIxICs2Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0Ojpw
dXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMg
bm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0g
ICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMg
d3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0g
ICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCkBAIC0xOTks
NjQgKzgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2ln
bmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBj
YW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAg
ICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5p
dGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFs
aXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9
PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExl
bmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBt
b3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2Vu
ZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVk
IG5ld0xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZl
IGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0
aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAg
ICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNl
bmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
OwotICAgICAgICAgICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAg
fQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRC
dWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZy
YW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIApAQCAtMjc3LDE0ICsxMDAsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9u
YXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIHN1YmNsYXNzRGF0YSgpIGNvbnN0OwpAQCAtMzA1LDI1ICsxMjUsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwog
CiAgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgICAgICB1bnNp
Z25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAg
IGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVu
Z3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29y
dGluZyhKU0dsb2JhbERhdGEmKTsKIAotICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBl
IHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNv
cnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25z
aXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAgICAgIHVu
c2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9yCi0g
ICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6
ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCiAgICAgICAgIEFycmF5U3RvcmFnZSAqbV9z
dG9yYWdlOwogCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVlTWFwIHNo
b3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJz
ZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3Bh
cnNlVmFsdWVNYXApOyB9CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQogICAg
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
MTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTQ2Vs
bChDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTQ2Vs
bChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgcHVibGljOgpAQCAtMTQwLDYgKzE0
MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZt
X3N0cnVjdHVyZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBidXR0ZXJmbHlPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTQ2VsbCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04p
CiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0
cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CkBAIC0xNzAsNiArMTgwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwog
ICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAgICAgCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CiAK
ICAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM2
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBr
ZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93
bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1
ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBj
YXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitz
dGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVP
YmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNl
bGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzkxLDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBn
ZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0
eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJm
bHk6OmVtcHR5U2luZ2xldG9uKCkpOwogICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0g
ICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNp
dHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9y
YWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNp
dG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFj
aXR5SW5CeXRlcykpIHsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShj
YXBhY2l0eUluQnl0ZXMpKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQg
PSBuZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlID0gY3VycmVudFRhcmdldCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBj
dXJyZW50U291cmNlID0gc3RvcmFnZSAtIDE7CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9
ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3Qg
cHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJlQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFkZXIuaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsK
KyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAg
ICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2Uo
CisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9y
YWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9y
YWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJy
ZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAo
LS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAg
IH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFy
cmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAg
ICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAg
IHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFnZS0+
YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBu
ZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50
VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdlLT5t
X3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0g
bmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRp
ZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFn
ZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1h
cmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xMjIsOSArMTY4LDkgQEAgdm9p
ZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFn
ZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9y
YWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwg
c3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5v
bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+
YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xl
dG9uKCkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZp
bmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OCw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVj
dC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0
ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBz
dG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25G
aW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGlu
ZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsyMDcsNDggQEAgVVN0cmluZyBK
U09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAgIHJldHVybiBpbmZvLT5jbGFzc05h
bWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90
KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcg
b3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwg
Zm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28g
b3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsK
KyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgc3dpdGNoICht
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewor
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGl0LT5z
ZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKIH0KIAogLy8gRUNNQSA4LjYu
Mi4yCkBAIC0xNzQsNiArMjU4LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGws
IEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1
ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAg
IC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAg
ICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVy
ZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAg
SlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzI2LDE0MiBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChz
aG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7
CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAg
aWYgKFVOTElLRUxZKGkgPj0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToK
KyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRl
IGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAo
aSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICAgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgCisgICAgICAgIHZh
bHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAg
ICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAg
ICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcC0+c2V0U3BhcnNl
TW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5s
ZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3
IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAg
ICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVt
LgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVy
YXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX3N0b3JhZ2UtPnJlc2l6ZUFycmF5KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCAwKTsKKyAgICBpZiAoIW5l
d0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdC
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKG1f
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlz
dHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7Cisg
ICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXItPnR5
cGUoKTsKKyAgICBBU1NFUlQob2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5
KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIDAsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkuc2V0VHlwZShvbGRUeXBlIHwgSGFzQXJyYXlT
dG9yYWdlKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJl
c3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7Cisg
ICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1f
c3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5k
aWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7
Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1v
ZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQpAQCAtMzA0LDYgKzUyOCwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlm
ICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTYw
LDQ0IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1
cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3Rv
cmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90
Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBE
b250RGVsZXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB0aGlzT2JqZWN0CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQpAQCAtNTE1LDggKzc3Nyw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShK
U0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAg
ICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAg
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVu
c2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJl
dmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBA
IC01NzMsMTEgKzgzNCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxE
YXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIo
bG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1
bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIo
KSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zm
c2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxl
R2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVs
c2UKQEAgLTYwMywyNiArODY0LDUyNCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhl
cml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2Ug
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhl
ZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFw
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
RGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChk
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52
YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChv
bGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1
cmUoKSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNp
dGlvbi4KKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQ
cmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
CisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAg
ICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVy
UHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKwor
ICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhl
Yyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAg
ICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwor
CisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vz
c29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4g
RVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZG
RkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBG
YXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBh
cnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
dGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZh
bHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMg
bWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVl
JworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2Vk
IHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScp
LgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhy
b3dFeGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhp
c3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgfQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRl
bnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlz
IHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8g
NC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgor
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgp
KSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVm
aW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJv
cGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtb
V3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRl
IHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBv
ZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2Yg
dGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZh
dWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3Nv
ciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5
IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwg
W1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUg
ZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1
dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNy
ZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgor
ICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxl
dGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVs
dHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRl
c2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9s
ZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZl
cnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2
ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9m
IGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRp
bmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxn
b3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRy
eUluTWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRl
c2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8g
Ny5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1
ZS4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3Qs
IGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBb
W0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4g
bmVnYXRpb24gb2YgZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJs
ZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9y
KERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgor
ICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8g
OS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRv
cihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50
LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJh
YmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlw
dG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBv
ZiBvYmplY3QgTyBmcm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNj
ZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZl
cnRlZCBwcm9wZXJ0eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0Vu
dW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3Mg
YXR0cmlidXRlcyB0bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAg
ICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAg
ICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQg
cHJvcGVydHkncyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAg
ICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJp
YnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
KyAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFu
ZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAg
IC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3Vy
cmVudC53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5h
LmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
KyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3Vy
cmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQu
dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlz
IGFjY2VwdGFibGUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1
cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vz
c29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tT
ZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50
LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZv
ciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBj
b3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9m
IG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2Ny
aXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMu
IFJldHVybiB0cnVlLgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5h
bGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3Qt
PmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBK
U09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFs
dWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGds
b2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJv
KCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFT
U0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3Jh
Z2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1By
b3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFn
ZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRv
IHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5j
ZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9y
YWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2Yo
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9y
YWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hl
cmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFko
IW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBz
aG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJl
IG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0
b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFko
KGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcikp
ICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAg
ICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJl
ZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3Rv
cmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlz
IHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAg
ICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3Ro
IGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8
ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVu
Z3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0K
KworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdl
IHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8g
dXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUg
dG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1
ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwor
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5n
dGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVh
ZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVl
c0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxs
IHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAu
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsK
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVy
dHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAg
c3dpdGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVu
Z3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAx
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAg
QVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9J
TkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3Bh
cnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJy
ZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAg
ICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVy
ZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBB
U1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGgg
aWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhh
dCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5
IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZv
clZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEg
LSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwg
YW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAt
IGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAg
fQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAg
ICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJs
ZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3Ro
ID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKwor
ICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0
aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNl
IGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9v
IHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJ
bkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAg
IGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgs
IG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlz
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRl
ciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAg
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhl
IG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0
b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Cisg
ICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBp
cyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJS
QVlfSU5ERVgpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7
CisgICAgc3dpdGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7
CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVJbml0aWFsQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cs
IGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShn
bG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGkgKyAxLCBn
ZXROZXdWZWN0b3JMZW5ndGgoMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0Uo
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1Zl
Y3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3Ro
KQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heElu
aXRMZW5ndGggPSBtaW4oY3VycmVudExlbmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAoZGVzaXJl
ZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heElu
aXRMZW5ndGg7CisgICAgZWxzZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQorICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7
CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAg
aW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9y
OgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0
aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFs
IG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRl
c2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFT
U0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlT
aXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisgICAgcmV0
dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQor
CitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5z
aWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKGdl
dEFycmF5TGVuZ3RoKCksIGRlc2lnbmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGlu
dGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55
IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxs
ZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3Jl
IGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVuc2ln
bmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOworCisg
ICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2Vz
IGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7Cisg
ICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdy
b3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CisgICAgICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFJlbW92ZSBzb21lLCBidXQg
bm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90
IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBtaW4o
aW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5n
dGgpOworICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29t
IGZvciB0aGUgcHJlLWNhcGFjaXR5LgorICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9
IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFs
RGF0YSwKKyAgICAgICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAgIG5ld0luZGV4
QmlhcywgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgIGlmICgh
bmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgbWVtY3B5KG5l
d1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRT
aXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7Cisg
ICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9pZCBKU09iamVj
dDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlT
dG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlTdG9yYWdlOworICAgIEFTU0VSVCghc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7
CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCgh
c3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAg
ICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRo
ZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0
ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZl
Y3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFs
dWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFs
dWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0Owor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGl0
LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNV
bmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2Nh
dGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAg
IEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCisgICAgLy8gd2Ug
bWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCisgICAgCisgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzEzODksNDYgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmli
dXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAg
ICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNzA0LDI2ICsxNDk5LDI2IEBAIHBy
aXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAg
Ly8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHku
CiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92
ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGlj
dWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFs
bG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVz
IHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhp
cyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAK
ICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBu
b3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAo
IW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkg
ewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9s
ZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7
CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAg
IH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSkKQEAgLTc0OSw4ICsxNTQ0LDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJp
YyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlz
dGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkg
ewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0g
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzYyLDggKzE1NTcsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
CiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAg
ICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4
aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTU3OSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRy
aWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERl
c2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1
bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE1OTcs
NyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
R2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBA
IC04MTIsMTIgKzE2MDcsMzcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNF
cXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cisg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7
CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4g
YXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRl
ZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZh
bHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBm
YWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4g
U2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4g
Q2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4
LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFy
Z3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgorICAgICAgICAvLyBm
LiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFBy
b3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBl
eGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5
cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNiArOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1Ymxp
YzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCkBAIC0xMjAsOCArMTIyLDE3NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBi
b29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0
QXJyYXlMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IGdldFZlY3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2Rz
OgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAg
ICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1l
dGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJh
YmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERp
cmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAg
c2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2Fu
R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkg
JiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAg
ICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdl
IGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKKyAgICAg
ICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVj
dG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRv
IG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGll
cy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4
IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRp
ZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5l
d0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVy
IG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAg
ICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0g
bV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NwYXJzZUluZGV4aW5nTW9kZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2Jh
bERhdGEmKTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVj
a2VkIHZlc2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJv
dG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKQEAgLTIwMyw4ICszNzQsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxp
bmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAg
ICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQwMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFn
ZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24g
KyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
b3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBA
IC0yNjksMTggKzQ0MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1Jl
aWZpZWQoKTsgfQogICAgICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4
ZWNTdGF0ZSogZXhlYyk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9y
YWdlIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSk7Ci0gICAgICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBQcm9wZXJ0eVN0b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOwogICAgICAgICAKICAgICAg
ICAgYm9vbCByZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVB
bmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9s
ZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFs
bG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCi0g
ICAgICAgIHZvaWQqIGFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gJm1fb3V0T2ZMaW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAgICAg
IHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcyk7CkBAIC0yOTQsNyArNDYzLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCk7CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIApAQCAtMzI2LDcgKzQ5NCw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJlbW92ZURpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFn
ZShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAg
ICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwg
c2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkgfCBIYXNBcnJh
eVN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3Jh
Z2VPclplcm8oKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBcnJheVN0b3JhZ2UqIGNy
ZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM5LDE2ICs1NDQsMzkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAgICAgICAgdm9pZCBpc1N0cmluZygpOwog
ICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3Jh
Z2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgICAgIGJvb2wg
cHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgICAgICBib29s
IGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRp
b24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKIAogICAgICAgICBjb25z
dCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFs
RGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3Bh
cnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYg
b2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwg
dW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25l
ZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIGJv
b2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3Ro
KTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVu
Y3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNr
IH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHZvaWQgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lD
aGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShD
b25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOworI2VuZGlmCisg
ICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xv
dFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB9Owog
CiAKQEAgLTQ5MSwxOCArNzE5LDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRo
aXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEds
b2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGlu
ZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUo
KSk7Ci0gICAgfQogICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAg
IG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAg
bV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0
RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0
MSw4ICs3NjMsNyBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB9
CiAKIGlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
Ci0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICA6IEpT
Q2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkK
IHsKIH0KIApAQCAtNTkwLDE1ICs4MTEsMTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0
b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSkpIHsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAg
ICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAg
IGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxv
Y2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERp
cmVjdE9mZnNldChvZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3co
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8g
aW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rp
b24sCkBAIC02ODQsNiArOTA2LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0
dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAg
ICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpOwogCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKQEAgLTk0MywxMyArMTE2NiwxMyBAQCBpbmxpbmUg
c2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5l
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zm
c2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQp
KQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6
aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4g
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzExODAsNyBA
QCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9m
ZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNP
dXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyMzY5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQo
aXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7
CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9w
ZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFn
ZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0
eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9y
YWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisjZGVmaW5lIFNw
YXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxV
bmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAg
IFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90
JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAg
SlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAg
IGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VNb2RlID0g
MSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAgfTsKKworcHVibGljOgorICAg
IHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRS
ZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAgICAgICAgOiBtX2ZsYWdzKE5v
cm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIHNwYXJzZU1v
ZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOworICAgIH0K
KworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3Rh
dGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKKyAgICB9CisKKyAgICBib29s
IGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5n
dGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCisg
ICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5n
dGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU09iamVj
dCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERp
cmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0
ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8v
IFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0
IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1v
dmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7
IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2Yg
dGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlu
cyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9
CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZh
dGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVw
b3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3Bh
cnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKyNk
ZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNPYmplY3Qq
IGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7CisgICAg
ZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKworICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAgIHNpemVfdCBjYXBhY2l0eSA9
IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0
eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChj
YXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9
IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBT
cGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXks
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRk
UmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0
ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAg
IC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5k
IHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmln
aHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShy
ZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAm
IEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7
CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBK
U1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKGFjY2Vzc29y
LmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRl
cihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAgIGlmICghc2V0dGVyKSB7CisgICAgICAg
IGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRl
ci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7CisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CisgICAgY2Fs
bChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOworfQorCitp
bmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3Bh
cnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8v
IFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRo
ZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0
aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWlu
LgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2Jq
ZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgfQorCisgICAgZW50cnkuYXR0cmli
dXRlcyA9IDA7CisgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6
Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gQmFz
ZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoIXZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVy
KHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRV
bmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNsb3Quc2V0R2V0dGVy
U2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAoreworICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGluZSBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSkg
Y29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVChy
ZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0
dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxE
YXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
YXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJy
YXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhdHRyaWJ1
dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5z
ZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNk
ZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0
b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tl
ZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmll
cihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAg
c2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAg
ICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQo
UHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAg
IG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9y
YWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVy
YXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
W2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdl
IGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0
eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTY2LDkgKzU2NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKICAgICAgICAgOiBtX2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQog
ICAgICAgICAsIG1fc3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKKyAgICAg
ICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155138</attachid>
            <date>2012-07-28 13:32:04 -0700</date>
            <delta_ts>2012-07-28 13:41:27 -0700</delta_ts>
            <desc>JSObject appears to be done</desc>
            <filename>butterflies_patch_9.diff</filename>
            <type>text/plain</type>
            <size>190635</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNCBA
QAorMjAxMi0wNy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNpemVGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVy
Zmx5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tQmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNl
KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5o
OgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50
aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlT
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIp
OgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OmJ1dHRlcmZseSk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6cHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0Fj
dGl2YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4
ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJ
bmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNTcGFyc2VJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0
Rm9yTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2VPclplcm8pOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9C
YXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdF
eHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFy
c2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VN
b2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25s
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdl
QmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAxMi0wNy0yNyAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IGZ1bmN0aW9uYWxpdHkg
b2YgTWFya2VkQWxsb2NhdG9yOjptX2N1cnJlbnRCbG9jawpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3Rh
bmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFy
ZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
ZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKyNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpCisKKy8vIFRo
ZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4o
KSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBp
cyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmlu
ZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9S
X0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9j
YXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxl
bmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0
VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJv
IGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZp
bmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2Ug
YSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkg
aW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVj
dG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBm
dWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7
CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAv
IG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBB
cnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKKwor
Ly8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4g
IEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQor
Ly8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWlu
ZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0
U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1h
eSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBx
dWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9p
bnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRl
eEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFn
ZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVk
IGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5
U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFn
ZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
KCkgeyByZXR1cm4gcmVpbnRlcnJwZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIElu
ZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpm
cm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBp
bmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQg
c2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3Jk
KGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGlu
Z0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3JhZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1hcDsK
KyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1W
YWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9p
bml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
b3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBtX2luZGV4
QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVu
dCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OworICAgIHVp
bnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseV9oCisjZGVmaW5lIEJ1dHRlcmZseV9o
CisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5o
IgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9wZXJ0eU9m
ZnNldC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkgeyB9IC8vIE5vdCBpbnN0
YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZW1wdHlTaW5n
bGV0b24oKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24oKS0+YnV0dGVy
Zmx5KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9
PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgcmV0dXJuIChwcmVDYXBhY2l0eSAr
IHByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIHNpemVvZihJbmRl
eGluZ0hlYWRlcikgKyBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBz
dGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+KGJhc2UpICsg
cHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25z
dCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9u
KFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZp
c2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgSW5kZXhpbmdIZWFk
ZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhp
bmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJh
eVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBi
YXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJu
IHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9Cisg
ICAgdm9pZCogYmFzZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgQnV0dGVy
Zmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jv
d1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5
UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRz
IGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBv
bGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcmVDYXBhY2l0
eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHVuc2hpZnQoc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNf
aAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZs
eS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYg
aW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJv
cGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICpyZXN1bHQt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUo
Z2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9
CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihT
bG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9t
QmFzZSh2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4
aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShzbG90VmlzaXRvciwg
MCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSB2
b2lkKiBCdXR0ZXJmbHk6OmJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0
dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0
eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9s
ZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNp
dHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNp
dHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksIGJhc2Uob2xkUHJvcGVydHlDYXBh
Y2l0eSksIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
K3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBpbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eSgpLCBvbGRQcm9wZXJ0eVN0b3JhZ2UsIGluZGV4aW5nSGVhZGVy
KCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIEFTU0VSVCghaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSk7Cisg
ICAgdm9pZCogYmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICAmYmFzZSwKKyAg
ICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0
eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
cHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVy
dHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShy
ZXN1bHQtPmJhc2UocHJvcGVydHlDYXBhY2l0eSksIGJhc2UocHJvcGVydHlDYXBhY2l0eSksIHRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
bmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICByZXR1cm4gcmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAg
ICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAt
MTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAm
Q2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZh
bHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NO
YW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordWludDY0X3QgSW5kZXhpbmdIZWFk
ZXI6OnNfZW1wdHlTaW5nbGV0b247CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5k
ZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7Citj
bGFzcyBBcnJheVN0b3JhZ2U7CisKK3R5cGVkZWYgdW5zaWduZWQgSW5kZXhpbmdUeXBlOworCisv
LyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGlj
IGNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJy
YXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5
cGVzLgorc3RhdGljIGNvbnN0IE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMg
Y29uc3QgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGlj
IGNvbnN0IEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3Qg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKwor
Y2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1iZXJPZlR5cGVCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZMZW5ndGhCaXRzID0gMzIgLSBudW1iZXJPZlR5cGVCaXRzOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBsZW5ndGhNYXNrID0gKDEgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKSAtIDE7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1MZW5ndGggPSBsZW5ndGhNYXNrOworICAgIAor
ICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZW1wdHlTaW5nbGV0b24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPigmc19lbXB0eVNpbmds
ZXRvbik7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5k
ZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0
IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0Mg
ZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1f
YXV4V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoQW5kVHlwZSgwKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgaW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aEFuZFR5cGUg
JiBsZW5ndGhNYXNrOyB9CisgICAgSW5kZXhpbmdUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxJbmRleGluZ1R5cGU+KG1fbGVuZ3RoQW5kVHlwZSA+PiBudW1iZXJPZkxlbmd0
aEJpdHMpOyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAg
eworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xl
bmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgfmxlbmd0aE1hc2spIHwgbGVuZ3RoOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFR5cGUoSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzaykg
fCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoQW5kVHlwZShpbnQzMl90IGxlbmd0aCwgSW5k
ZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1M
ZW5ndGgpOworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSBsZW5ndGggfCAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAg
IHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1
eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisg
ICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0
ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9t
KEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAg
IAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdl
Pih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhp
cyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRo
ZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhl
IEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpOworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1f
YXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJh
eSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0
aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KKyAgICAKKyAgICBzdGF0
aWMgdWludDY0X3Qgc19lbXB0eVNpbmdsZXRvbjsgLy8gVXNlIGEgUE9EIHRvIGVuc3VyZSB0aGF0
IHRoZSBjb21waWxlciBkb2VzIGdvb2QgdGhpbmdzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0
b3JhZ2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFk
ZXI6OnByZUNhcGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlT
dG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3Jh
Z2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYg
SGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBA
QCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0
KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3lt
Ym9sVGFibGUoKS5lbmQoKTsKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9
Ci0gICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRP
d25Qcm9wZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJp
YWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMK
KyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246
OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3MSArNDUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NFUlRfSEFTX1RSSVZJ
QUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQotLy8KLS8v
IFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRo
cmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAu
Ci0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkg
ZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMs
IHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKLS8vIGFzIGFuIHVu
c2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9B
UlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAt
IHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKLS8vIGludGVnZXIp
IGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0
aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBu
dW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGks
Ci0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5k
IHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBz
cGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxv
d2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAot
Ly8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFs
bCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdp
bGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0
aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKLS8vICAgICBkYXRh
IHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQg
d2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUg
ZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlz
IGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8vIFRoZSBkZWZpbml0
aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZp
bml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBz
aXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNo
IGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3Mg
dG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQ
SUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkx
Pi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLS8vIDB4
RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhv
dWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVV
Ci0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFycmF5IHRoYXQgd2Fz
IGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMp
KQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1cHBlciBib3VuZCB0
byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3Qg
ZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCi0KLS8v
IE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNw
YXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5kaWNlcyBncmVhdGVy
IHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3Rv
cgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0
LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxp
ZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZK
U05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJh
eSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFm
dGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMg
Zm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgotLy8g
VGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRl
ZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Ci19
Ci0KIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRp
b24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9uKQpAQCAt
MTc5LDM0OCArMTE2LDYgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aQogICAgIHJldHVybiB0aGlzOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQg
bXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6
ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5
VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VB
cnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRl
ZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsK
LSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0
eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNp
emVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAg
ICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAg
U3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAg
IC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRv
IHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBp
cyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxl
LCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFn
YWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgp
KSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxk
VGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0
cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7
Ci0gICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBz
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlm
ICghc2V0dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVy
LCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFw
cGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
YXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRE
aXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZp
cnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9u
IGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAot
ICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRv
bmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJh
eS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRl
ZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9
Ci0KLSAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAg
IEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAg
aWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikg
ewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJz
ZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17
Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsK
LX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpn
ZXQoKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dl
dHRlclNldHRlcigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRl
cikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGlu
ZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewot
ICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1p
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNw
YXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1h
cCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5h
bGl6ZXIodGhpcywgZmluYWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFy
c2VNYXAoKQotewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFs
dWVNYXAgPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7
Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUo
KTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5n
dGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRy
eSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAg
Ly8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3It
PnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQq
IG5ld1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgp
OwotICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5
U3RvcmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3Jh
Z2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7
Ci0gICAgbV92ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRv
cikKLXsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVu
dHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9i
amVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OwotICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQotICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKLQotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUoZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0
R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikK
LSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0
ZXIpOwotCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGFjY2Vzc29yKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmlj
RGVzY3JpcHRvcigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmlu
ZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4
RkZGRkZGRkYpOwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0
IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJh
eQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhh
dCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNl
Ci0gICAgICAgIC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3Rz
IG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1
ZScKLSAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNl
ZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUn
KS4KLSAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAg
QVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRo
cm93RXhjZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGljdGlvbmFyeU1vZGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0gICAgLy8gMS4gTGV0
IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAg
ICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVu
c2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElmIGN1cnJlbnQgaXMg
dW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KLSAgICAvLyA0
LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCi0g
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkp
IHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNE
YXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9w
ZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tX
cml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29y
IFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkg
bmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBb
W0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBk
ZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3Jl
YXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0g
ICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0
cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9y
LCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQot
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk
IGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAo
OS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgZW50cnlJbk1hcC0+
Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9y
LmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
Ny4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVu
Ci0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgIC8vIDcuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUg
W1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJh
YmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9u
IG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50
KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBp
cyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAo
IWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIC8vIDkuIEVsc2Us
IGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
aGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
ICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHBy
b3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJv
cGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFi
bGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRy
aWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAg
ICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAg
ICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KLSAgICAgICAgICAg
IC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJp
YnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
LSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFu
ZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KLSAgICAgICAgICAg
IC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3Vy
cmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMC5h
LmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
LSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3Vy
cmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQu
dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlz
IGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVu
dC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1
cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vz
c29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tT
ZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50
LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTIuIEZv
ciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBj
b3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9m
IG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0RGVzY3JpcHRvcihl
eGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAvLyAxMy4gUmV0dXJu
IHRydWUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3Jp
dGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQogewogICAgIEFTU0VSVChpc0xl
bmd0aFdyaXRhYmxlKCkgfHwgIXdyaXRhYmxlKTsKQEAgLTYzMywzNSArMjI4LDcgQEAgYm9vbCBK
U0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXkt
PmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9u
KTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17
Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5E
RVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRv
ciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNs
b3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQog
CiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpA
QCAtNjcyLDEwICsyMzksNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBA
IC02ODcsMjYgKzI1MCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzI1Nyw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1
dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9
IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjcxLDkgQEAgdm9pZCBKU0FycmF5
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVu
Z3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49
IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1
LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElL
RUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNh
bGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBB
U1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
Ci0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwot
ICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAg
ICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSAr
IDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNl
IGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3Iu
Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFBy
b2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAg
ICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0g
ICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVh
c2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3Qp
Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxp
ZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAg
IEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJz
dCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1h
cC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBu
b3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFu
ZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7
Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2lu
Y2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rv
ci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAt
PnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkg
KyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAv
LyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3
YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNw
YXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFy
c2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJh
eSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1W
YWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNy
ZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFs
dWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0
aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNv
bmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xv
dCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xv
dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1
ICsyODEsNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09i
amVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkg
ewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
c3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihh
KTsKQEAgLTk2NCwxMTggKzI4OCwxNCBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQo
Y29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5h
bWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBp
bmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJl
bnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZl
cmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZh
bHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5y
ZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAg
ICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3Qp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCks
IHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRM
ZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVu
Z3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkK
LSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICgh
bV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVu
Z3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVu
Z3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3Jl
YXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNp
cmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBk
ZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3Ro
LCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgp
Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFs
bHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVl
cyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhh
dmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmlj
aWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAg
ICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0
b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3Qg
Y2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2Mg
bWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZv
aWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXpl
KHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFn
ZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAg
ICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVu
Z3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0
eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUg
bmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4K
LSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJ
bmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5
KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhl
IHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJl
dF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlh
cyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250
ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9y
YWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9u
LCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Fs
bG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0
aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KQEAgLTEzNjQsMzQgKzU4NCw2IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAg
ICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4s
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFS
S19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAg
IHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlz
aXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2Up
LCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1f
aW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0
b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2Ug
PSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4o
YmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMp
OwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VT
dG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxv
Y0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTgwMSw0NyArOTkzLDUg
QEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbAogICAgIHJldHVybiBu
dW1EZWZpbmVkOwogfQogCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0Fy
cmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAg
ICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3Nw
YXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVl
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0
b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVN
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+
PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlm
ICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBj
cmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQotICAgIH0KLX0K
LQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtu
b3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkg
e30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQ
cm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VN
b2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0g
ICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAg
ZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNl
TW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwot
ICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAg
ICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAg
ICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNl
TW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9k
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJz
ZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5Owot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVu
Z3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1h
eSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAg
ICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5Kiwg
dW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
bWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUg
aXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJl
bW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVt
b3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBp
dGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29s
IGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9
Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0g
ICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0g
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxh
Z3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8v
IFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBB
IEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAg
ICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRh
aW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAg
Ly8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRo
ZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlz
IHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxs
b2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9y
YWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0
b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3Bl
cnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0
dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBm
YWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25t
ZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4Owot
ICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAg
ICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsg
fQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0
aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwpAQCAtMTUzLDggKzUwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsK
LQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVV
bmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9z
ZSBzaXplIGFuZApAQCAtMTY3LDIxICs2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAg
IC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAg
LSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0
ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNv
bmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0
SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKICAgICAgICAgCkBAIC0xOTksNjQgKzgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAot
ICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rv
ckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0
SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbkdldElu
ZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJl
dHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9y
YWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAg
ICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2Vx
dWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1W
YWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNr
IHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJv
cGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBj
b21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVy
dGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdM
ZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHBy
b3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0dXJuIG1hcCAm
JiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIApA
QCAtMjc1LDE3ICs5OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0ds
b2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogc3ViY2xhc3NEYXRhKCkgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0U3ViY2xhc3NEYXRhKHZvaWQqKTsKQEAgLTMwNSwyNSArMTIzLDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
IAogICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3dDYXNlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHZvaWQgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgdW5z
aWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwotICAgICAg
ICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xl
bmd0aCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgY291bnQpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNv
cnRpbmcoSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlw
ZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBT
b3J0Q29uc2lzdGVuY3lDaGVjayB9OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29u
c2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1
bnNpZ25lZCBtX3ZlY3Rvckxlbmd0aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3Rvcgot
ICAgICAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNp
emVkIGJsb2NrcyBiZWZvcmUgQXJyYXlTdG9yYWdlLgogICAgICAgICBBcnJheVN0b3JhZ2UgKm1f
c3RvcmFnZTsKIAotICAgICAgICAvLyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBz
aG91bGQgYmUgcHV0IGludG8gaXRzIG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1fc3BhcnNlVmFsdWVNYXA7Ci0KICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFy
c2VWYWx1ZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3Nw
YXJzZVZhbHVlTWFwKTsgfQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KICAg
ICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZp
c2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9p
ZCBKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKTsK
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOworICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
Kik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAKICAgICBwdWJsaWM6CkBAIC0xNDAsNiArMTQwLDE2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2J1dHRl
cmZseSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJl
c3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5OworICAgICAg
ICB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZh
bGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7
IH0KQEAgLTE1OCw2ICsxNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkg
aW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xh
c3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUg
ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FT
U0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAg
ICAgc3RhdGljIFVTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0
YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNW
YWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkBAIC0xNzAsNiArMTgxLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAgICAgCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CiAKICAg
ICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTIz
Njk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lk
IEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVj
dC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KSkgewpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzNjk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2Vl
cCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24u
ICBXZSB1c2UgdGhpcworLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUg
dG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2Fw
cGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3Rh
dGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2Jq
ZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5ICs5MSw3MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0
Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlT
dG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSog
YnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOwor
ICAgIEFTU0VSVChidXR0ZXJmbHkpOworICAgIEFTU0VSVChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5
OjplbXB0eVNpbmdsZXRvbigpKTsKICAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwogICAgIAotICAg
IHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAg
IEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5
ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFn
ZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRv
ci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0
eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2Fw
YWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0g
bmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3
U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3Vy
cmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAq
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHBy
ZUNhcGFjaXR5ID0gaGVhZGVyLnByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzID0gaGVhZGVyLmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7Cisg
ICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAg
ICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAg
ICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFn
ZS0+cHJvcGVydHlTdG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFn
ZVNpemU7IGNvdW50LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVu
dFNvdXJjZSktPmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0t
Y3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9
Ci0gICAgICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJp
ZXI6OlVuY2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHN0b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBz
d2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAg
ICBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb20oKnN0b3JhZ2UtPmFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVu
dFRhcmdldCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3
U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRh
cmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbmV3U3RvcmFnZS0+bV9z
cGFyc2VNYXApCisgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVz
LgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJr
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChoZWFkZXIudHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0
Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE2OCw5IEBAIHZvaWQg
SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFn
ZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0
b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25G
aW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1
dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRv
bigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJm
bHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5h
bE9iamVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbjsKQEAgLTE0Miw5ICsxODgsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5v
dXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3Qt
PnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVy
Zmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkKKyAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CiAKICAgICBzaXplX3Qgc3Rv
cmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktub3duRmlu
YWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVT
dG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwxMCArMjA3LDQ4IEBAIFVTdHJpbmcgSlNP
YmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamUKICAgICByZXR1cm4gaW5mby0+Y2xhc3NOYW1l
OwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91
ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZv
ciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92
ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cisg
ICAgCisgICAgaWYgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpdC0+c2Vj
b25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgOC42LjIu
MgpAQCAtMTc0LDYgKzI1OCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUp
IHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAv
LyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAg
ICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUg
YXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpT
VmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzMyNiwxNDIgQEAgdm9pZCBKU09iamVjdDo6cHV0
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwor
ICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlm
IChVTkxJS0VMWShpID49IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUs
IHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobV9idXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBs
ZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkg
Pj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1
ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAg
ICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tDb25z
aXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAg
ICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1h
cC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1v
ZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVu
Z3RoKCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBl
bnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAg
ICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4K
KyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0
b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdC
dXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdC
dXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0Fy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAg
IEluZGV4aW5nVHlwZSBvbGRUeXBlID0gbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyLT50eXBl
KCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5Umln
aHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisg
ICAgICAgIENSQVNIKCk7CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3
QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLnNldFR5cGUob2xkVHlwZSB8IEhhc0FycmF5U3Rv
cmFnZSk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1
bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAg
IHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3Nw
YXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4
ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlm
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
SW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0
dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOwor
fQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2Rl
KCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKQEAgLTMwNCw2ICs1MjgsMTAgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhl
Y1N0YXRlKiBleAogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAo
IXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09iamVj
dC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU2MCw0
NSBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVy
dHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAodGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNh
c2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Cisg
ICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9u
dERlbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIG1hcC0+cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBA
IC00NjUsNiArNzI4LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0
LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklY
TUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVy
eSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJy
YXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBj
ZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJh
eS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBl
KCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9y
W2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+
c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAg
ICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3Qp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtl
eXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVz
KGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzgyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShK
U0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAg
ICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAg
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVu
c2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJl
dmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBA
IC01NzMsMTEgKzg4MCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxE
YXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIo
bG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1
bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIo
KSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zm
c2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxl
R2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVs
c2UKQEAgLTYwMywyNiArOTEwLDUyNCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhl
cml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2Ug
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhl
ZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFw
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
RGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChk
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52
YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChv
bGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1
cmUoKSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNp
dGlvbi4KKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQ
cmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
CisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAg
ICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVy
UHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKwor
ICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhl
Yyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAg
ICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwor
CisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vz
c29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4g
RVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZG
RkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBG
YXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBh
cnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
dGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZh
bHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMg
bWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVl
JworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2Vk
IHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScp
LgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhy
b3dFeGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhp
c3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgfQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExl
dCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRl
bnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlz
IHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8g
NC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgor
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgp
KSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVm
aW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJv
cGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtb
V3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRl
IHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBv
ZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2Yg
dGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZh
dWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3Nv
ciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5
IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwg
W1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUg
ZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1
dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNy
ZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgor
ICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxl
dGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVs
dHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRl
c2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9s
ZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZl
cnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2
ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9m
IGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRp
bmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxn
b3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRy
eUluTWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRl
c2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8g
Ny5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1
ZS4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3Qs
IGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBb
W0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4g
bmVnYXRpb24gb2YgZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJs
ZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9y
KERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgor
ICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8g
OS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRv
cihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50
LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJh
YmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlw
dG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBv
ZiBvYmplY3QgTyBmcm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNj
ZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZl
cnRlZCBwcm9wZXJ0eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0Vu
dW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3Mg
YXR0cmlidXRlcyB0bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAg
ICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAg
ICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQg
cHJvcGVydHkncyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAg
ICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJp
YnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
KyAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFu
ZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAg
IC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3Vy
cmVudC53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5h
LmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
KyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3Vy
cmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQu
dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlz
IGFjY2VwdGFibGUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1
cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vz
c29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tT
ZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50
LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZv
ciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBj
b3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9m
IG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2Ny
aXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMu
IFJldHVybiB0cnVlLgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5h
bGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3Qt
PmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBK
U09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFs
dWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGds
b2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJv
KCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFT
U0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3Jh
Z2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1By
b3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFn
ZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRv
IHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5j
ZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9y
YWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2Yo
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9y
YWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hl
cmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFko
IW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBz
aG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJl
IG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0
b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFko
KGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcikp
ICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAg
ICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJl
ZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3Rv
cmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlz
IHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAg
ICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3Ro
IGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8
ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVu
Z3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0K
KworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdl
IHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8g
dXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUg
dG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1
ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwor
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5n
dGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVh
ZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVl
c0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxs
IHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAu
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsK
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVy
dHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAg
c3dpdGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVu
Z3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAx
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAg
QVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9J
TkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3Bh
cnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJy
ZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAg
ICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVy
ZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBB
U1NFUlQoaXNFeHRlbnNpYmxlKCkpOwogICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3Jh
Z2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVv
ZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhp
cyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAg
ICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5n
dGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlz
IG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRv
IGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAg
ICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgp
OworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3
aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250
aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Ig
d291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25l
ZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+
c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVj
dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVyZWFkIG1f
c3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFs
dWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Cisg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxs
b2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBp
bnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2
ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwot
ICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7CisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxp
ZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAg
IEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2ggKGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7Cisg
ICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVB
cnJheVN0b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCBpICsgMSkpOworICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVu
c2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7
CisgICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBV
KTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5j
cmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5n
dGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJy
YXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVu
dCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEp
IC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVu
c2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBu
b3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYg
MSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3Ro
KTsKKworICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNU
T1JfR1JPVyk7CisKKyAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHJldHVybiBn
ZXROZXdWZWN0b3JMZW5ndGgoZ2V0QXJyYXlMZW5ndGgoKSwgZGVzaWduZWRMZW5ndGgpOworfQor
Citib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZl
cyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2Ug
aXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8v
IHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNl
IHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWduZWQgaW5k
ZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rv
ckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVu
Z3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBh
Y2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtF
TFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9y
YWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIGlmICgh
bmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRl
Y2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVk
IG5ld0luZGV4QmlhcyA9IG1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNh
cGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCisgICAgdW5zaWduZWQg
bmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFzOworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFy
cmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBpbmRleEJpYXMsIHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9y
TGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCit2b2lk
IEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUg
dHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8o
KTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7
CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCgh
c3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAg
ICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRo
ZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0
ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZl
Y3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFs
dWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFs
dWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0Owor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGl0
LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNV
bmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2Nh
dGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAg
IEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCisgICAgLy8gd2Ug
bWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCisgICAgCisgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0MzUsNDYgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmli
dXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAg
ICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNzA0LDI2ICsxNTQ1LDI2IEBAIHBy
aXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAg
Ly8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHku
CiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92
ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGlj
dWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFs
bG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVz
IHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhp
cyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAK
ICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBu
b3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAo
IW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkg
ewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9s
ZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7
CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAg
IH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSkKQEAgLTc0OSw4ICsxNTkwLDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJp
YyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlz
dGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkg
ewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0g
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzYyLDggKzE2MDMsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
CiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAg
ICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4
aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTYyNSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRy
aWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERl
c2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1
bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2NDMs
NyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
R2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBA
IC04MTIsMTIgKzE2NTMsMzcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNF
cXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cisg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7
CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4g
YXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRl
ZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZh
bHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBm
YWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4g
U2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4g
Q2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4
LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFy
Z3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgorICAgICAgICAvLyBm
LiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFBy
b3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBl
eGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5
cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNiArOTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1Ymxp
YzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCkBAIC0xMjAsOCArMTIyLDE3NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBi
b29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0
QXJyYXlMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IGdldFZlY3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2Rz
OgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAg
ICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1l
dGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJh
YmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERp
cmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAg
c2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2Fu
R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkg
JiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAg
ICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdl
IGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKKyAgICAg
ICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVj
dG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRv
IG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGll
cy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4
IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRp
ZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5l
d0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVy
IG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAg
ICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0g
bV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NwYXJzZUluZGV4aW5nTW9kZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2Jh
bERhdGEmKTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVj
a2VkIHZlc2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJv
dG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKQEAgLTE0Nyw2ICszMTgsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaGFzSW5zdGFu
Y2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3Bl
cnR5KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1p
dGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBj
b25zdDsKQEAgLTIwMyw4ICszNzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRP
ZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9CisgICAg
ICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJm
bHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZs
eTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3Rv
cmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQor
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
Y29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQwMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
aW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJ
bklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9j
YXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxpZGF0
ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjksMTggKzQ0NCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkgeyByZXR1
cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsgfQogICAgICAgICB2b2lk
IHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7CiAKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgICAg
IHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eVN0b3JhZ2Us
IFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3
U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZs
eSosIFN0cnVjdHVyZSopOwogICAgICAgICAKICAgICAgICAgYm9vbCByZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1
cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVj
ZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQqIGFkZHJlc3NPZk91
dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1fb3V0T2ZM
aW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBz
dHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcyk7
CkBAIC0yOTQsNyArNDY0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CiAKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzI2LDcgKzQ5
NSw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJlbW92ZURpcmVjdChnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYsIFByb3BlcnR5
U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZs
eShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0cyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpLT50eXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAg
IEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsK
KyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAK
KyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpA
QCAtMzM5LDE2ICs1NDUsMzkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmpl
Y3QoKTsKICAgICAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAg
IHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9i
YWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0
eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90Jiwg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KTsKIAogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0
eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1
Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIFN0b3Jh
Z2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0
SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5
RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZp
bmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGRl
YWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSop
OworICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAg
ICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVk
IGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5z
aWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
SlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKworICAgICAgICBlbnVtIENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNp
c3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3Rl
bmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAg
ICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5v
cm1hbENvbnNpc3RlbmN5Q2hlY2spOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB9OwogCiAKQEAgLTQ5MSwxOCArNzIwLDEyIEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNT
RVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdl
KSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7
CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MSw4ICs3NjQsNyBAQCBpbmxpbmUgSlNP
YmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiB9CiAKIGlubGluZSBKU09iamVjdDo6SlNP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4MTIs
MTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RM
b2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAg
ICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9j
YXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlT
bG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
c2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNldChvZmZzZXQpLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBs
YXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODQsNiArOTA3LDcgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1
ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAm
IEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFw
KHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFz
SW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRl
czsKQEAgLTk0MywxMyArMTE2NywxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9Q
YXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAt
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFn
ZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBp
bmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewog
ICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgp
OwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzExODEsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRp
dmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFn
ZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5l
bmQoKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJv
b2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyMzY5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NF
UlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJu
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAt
IDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQ
cm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3Rv
cmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlT
dG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM2OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzExNSwx
MSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZv
aWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9
PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyMzY5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5
MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisj
aWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFw
X2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
U3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5
cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5
KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09i
amVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIHZv
aWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0Tm9uU3Bh
cnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307CisKK2NsYXNz
IFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3Bh
cnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGha
ZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAg
ICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0
aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1hcDo6aXRl
cmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisgICAgICAgICwg
bV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNw
YXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9m
bGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Cisg
ICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgQWRk
UmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBmaW5kKHVuc2ln
bmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNob3VsZCBBU1NF
UlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCisg
ICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQorICAgIHZv
aWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAgICAvLyBUaGVz
ZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCisgICAgaXRl
cmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFpbnMo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8vIE9ubHkgYWxs
b3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIE1hcCBtX21h
cDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRl
ZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRS
ZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQg
aSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9t
YXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgp
OworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVh
cDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9y
dGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBh
ZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2Ug
Zmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21t
b24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90
CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUg
ZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFy
cmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAg
ICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwg
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigp
KTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0
ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3Qm
IHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFT
U0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkg
eworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigp
OworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30K
KworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6
Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5
OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlm
IChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0
ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJu
IGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0
eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNw
YXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJu
IEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1f
bWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJy
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFn
ZUJhcnJpZXIuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJy
aWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmll
ci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdl
QmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5
U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBz
dG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNo
ZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwq
LCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9
IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdT
dG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFn
ZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4g
Km1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3Rv
cmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBt
X3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFn
ZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTIzNjk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2Niw5ICs1NjYsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbmxp
bmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAg
IDogbV9jbGFzc0luZm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSkKICAgICAgICAgLCBtX3N0cnVj
dHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9idXR0ZXJmbHko
YnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155139</attachid>
            <date>2012-07-28 13:41:27 -0700</date>
            <delta_ts>2012-07-28 21:15:34 -0700</delta_ts>
            <desc>rebased up to r123971</desc>
            <filename>butterflies_patch_10.diff</filename>
            <type>text/plain</type>
            <size>190505</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNCBA
QAorMjAxMi0wNy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNpemVGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVy
Zmx5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9tQmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNl
KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5o
OgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50
aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlT
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIp
OgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OmJ1dHRlcmZseSk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6cHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0Fj
dGl2YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4
ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJ
bmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNTcGFyc2VJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0
Rm9yTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2VPclplcm8pOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9C
YXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdF
eHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFy
c2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VN
b2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25s
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdl
QmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAxMi0wNy0yNyAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IGZ1bmN0aW9uYWxpdHkg
b2YgTWFya2VkQWxsb2NhdG9yOjptX2N1cnJlbnRCbG9jawpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3Rh
bmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFy
ZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
ZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKyNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpCisKKy8vIFRo
ZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4o
KSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBp
cyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmlu
ZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9S
X0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9j
YXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxl
bmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0
VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJv
IGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZp
bmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2Ug
YSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkg
aW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVj
dG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBm
dWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7
CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAv
IG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBB
cnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKKwor
Ly8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4g
IEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQor
Ly8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWlu
ZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0
U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1h
eSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBx
dWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9p
bnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRl
eEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFn
ZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVk
IGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5
U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFn
ZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
KCkgeyByZXR1cm4gcmVpbnRlcnJwZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIElu
ZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpm
cm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBp
bmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQg
c2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3Jk
KGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGlu
Z0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3JhZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1hcDsK
KyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1W
YWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9p
bml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
b3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBtX2luZGV4
QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVu
dCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OworICAgIHVp
bnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseV9oCisjZGVmaW5lIEJ1dHRlcmZseV9o
CisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5o
IgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9wZXJ0eU9m
ZnNldC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkgeyB9IC8vIE5vdCBpbnN0
YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogZW1wdHlTaW5n
bGV0b24oKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24oKS0+YnV0dGVy
Zmx5KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9
PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgcmV0dXJuIChwcmVDYXBhY2l0eSAr
IHByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIHNpemVvZihJbmRl
eGluZ0hlYWRlcikgKyBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBz
dGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+KGJhc2UpICsg
cHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25z
dCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9u
KFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZp
c2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgSW5kZXhpbmdIZWFk
ZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhp
bmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJh
eVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBi
YXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJu
IHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9Cisg
ICAgdm9pZCogYmFzZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgQnV0dGVy
Zmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jv
d1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5
UmlnaHQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRz
IGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBv
bGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcmVDYXBhY2l0
eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHVuc2hpZnQoc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNf
aAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZs
eS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYg
aW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJv
cGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICpyZXN1bHQt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUo
Z2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9
CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihT
bG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9t
QmFzZSh2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4
aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShzbG90VmlzaXRvciwg
MCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSB2
b2lkKiBCdXR0ZXJmbHk6OmJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0
dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0
eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9s
ZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNp
dHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNp
dHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksIGJhc2Uob2xkUHJvcGVydHlDYXBh
Y2l0eSksIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
K3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBpbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eSgpLCBvbGRQcm9wZXJ0eVN0b3JhZ2UsIGluZGV4aW5nSGVhZGVy
KCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIEFTU0VSVCghaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSk7Cisg
ICAgdm9pZCogYmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICAmYmFzZSwKKyAg
ICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0
eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
cHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVy
dHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShy
ZXN1bHQtPmJhc2UocHJvcGVydHlDYXBhY2l0eSksIGJhc2UocHJvcGVydHlDYXBhY2l0eSksIHRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
bmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICByZXR1cm4gcmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAg
ICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAt
MTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAm
Q2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZh
bHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NO
YW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordWludDY0X3QgSW5kZXhpbmdIZWFk
ZXI6OnNfZW1wdHlTaW5nbGV0b247CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5k
ZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7Citj
bGFzcyBBcnJheVN0b3JhZ2U7CisKK3R5cGVkZWYgdW5zaWduZWQgSW5kZXhpbmdUeXBlOworCisv
LyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGlj
IGNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJy
YXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5
cGVzLgorc3RhdGljIGNvbnN0IE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMg
Y29uc3QgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGlj
IGNvbnN0IEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3Qg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKwor
Y2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1iZXJPZlR5cGVCaXRzID0gNDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVy
T2ZMZW5ndGhCaXRzID0gMzIgLSBudW1iZXJPZlR5cGVCaXRzOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBsZW5ndGhNYXNrID0gKDEgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKSAtIDE7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1MZW5ndGggPSBsZW5ndGhNYXNrOworICAgIAor
ICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZW1wdHlTaW5nbGV0b24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPigmc19lbXB0eVNpbmds
ZXRvbik7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5k
ZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0
IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0Mg
ZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1f
YXV4V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoQW5kVHlwZSgwKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgaW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aEFuZFR5cGUg
JiBsZW5ndGhNYXNrOyB9CisgICAgSW5kZXhpbmdUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxJbmRleGluZ1R5cGU+KG1fbGVuZ3RoQW5kVHlwZSA+PiBudW1iZXJPZkxlbmd0
aEJpdHMpOyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAg
eworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xl
bmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgfmxlbmd0aE1hc2spIHwgbGVuZ3RoOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFR5cGUoSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzaykg
fCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoQW5kVHlwZShpbnQzMl90IGxlbmd0aCwgSW5k
ZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1M
ZW5ndGgpOworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSBsZW5ndGggfCAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAg
IHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1
eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisg
ICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0
ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9t
KEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAg
IAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdl
Pih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhp
cyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRo
ZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhl
IEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpOworCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1f
YXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJh
eSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0
aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KKyAgICAKKyAgICBzdGF0
aWMgdWludDY0X3Qgc19lbXB0eVNpbmdsZXRvbjsgLy8gVXNlIGEgUE9EIHRvIGVuc3VyZSB0aGF0
IHRoZSBjb21waWxlciBkb2VzIGdvb2QgdGhpbmdzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0
b3JhZ2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFk
ZXI6OnByZUNhcGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlT
dG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3Jh
Z2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6Omlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYg
SGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBA
QCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0
KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3lt
Ym9sVGFibGUoKS5lbmQoKTsKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9
Ci0gICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRP
d25Qcm9wZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJp
YWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMK
KyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246
OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3MSArNDUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NFUlRfSEFTX1RSSVZJ
QUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQotLy8KLS8v
IFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRo
cmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAu
Ci0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkg
ZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMs
IHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKLS8vIGFzIGFuIHVu
c2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9B
UlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAt
IHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKLS8vIGludGVnZXIp
IGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0
aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBu
dW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGks
Ci0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5k
IHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBz
cGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxv
d2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAot
Ly8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFs
bCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdp
bGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0
aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKLS8vICAgICBkYXRh
IHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQg
d2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUg
ZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlz
IGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8vIFRoZSBkZWZpbml0
aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZp
bml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBz
aXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNo
IGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3Mg
dG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQ
SUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkx
Pi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLS8vIDB4
RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhv
dWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVV
Ci0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFycmF5IHRoYXQgd2Fz
IGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMp
KQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1cHBlciBib3VuZCB0
byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3Qg
ZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCi0KLS8v
IE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNw
YXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5kaWNlcyBncmVhdGVy
IHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3Rv
cgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0
LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxp
ZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZK
U05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJh
eSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFm
dGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMg
Zm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgotLy8g
VGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRl
ZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Ci19
Ci0KIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRp
b24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9uKQpAQCAt
MTc5LDM0OCArMTE2LDYgQEAgSlNBcnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aQogICAgIHJldHVybiB0aGlzOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQg
bXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6
ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5
VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VB
cnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRl
ZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsK
LSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0
eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNp
emVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAg
ICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAg
U3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAg
IC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRv
IHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBp
cyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxl
LCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFn
YWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgp
KSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxk
VGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0
cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7
Ci0gICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBz
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlm
ICghc2V0dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVy
LCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFw
cGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
YXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRE
aXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZp
cnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9u
IGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAot
ICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRv
bmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJh
eS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRl
ZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9
Ci0KLSAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAg
IEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAg
aWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikg
ewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJz
ZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17
Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsK
LX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpn
ZXQoKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dl
dHRlclNldHRlcigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRl
cikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGlu
ZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewot
ICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1p
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNw
YXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1h
cCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5h
bGl6ZXIodGhpcywgZmluYWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFy
c2VNYXAoKQotewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFs
dWVNYXAgPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7
Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUo
KTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5n
dGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRy
eSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAg
Ly8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3It
PnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQq
IG5ld1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgp
OwotICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5
U3RvcmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3Jh
Z2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7
Ci0gICAgbV92ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRv
cikKLXsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVu
dHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9i
amVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OwotICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQotICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKLQotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUoZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0
R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikK
LSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0
ZXIpOwotCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGFjY2Vzc29yKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmlj
RGVzY3JpcHRvcigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmlu
ZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4
RkZGRkZGRkYpOwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0
IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJh
eQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhh
dCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNl
Ci0gICAgICAgIC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3Rz
IG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1
ZScKLSAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNl
ZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUn
KS4KLSAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAg
QVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRo
cm93RXhjZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGljdGlvbmFyeU1vZGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0gICAgLy8gMS4gTGV0
IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAg
ICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVu
c2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElmIGN1cnJlbnQgaXMg
dW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KLSAgICAvLyA0
LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCi0g
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkp
IHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNE
YXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9w
ZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tX
cml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29y
IFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkg
bmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBb
W0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBk
ZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3Jl
YXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0g
ICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0
cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9y
LCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQot
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk
IGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAo
OS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgZW50cnlJbk1hcC0+
Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9y
LmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
Ny4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVu
Ci0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgIC8vIDcuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUg
W1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJh
YmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9u
IG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50
KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBp
cyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAo
IWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIC8vIDkuIEVsc2Us
IGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
aGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
ICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHBy
b3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJv
cGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFi
bGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRy
aWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAg
ICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAg
ICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KLSAgICAgICAgICAg
IC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJp
YnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
LSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFu
ZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KLSAgICAgICAgICAg
IC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3Vy
cmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMC5h
LmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
LSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3Vy
cmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQu
dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlz
IGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVu
dC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1
cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vz
c29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tT
ZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50
LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTIuIEZv
ciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBj
b3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9m
IG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0RGVzY3JpcHRvcihl
eGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAvLyAxMy4gUmV0dXJu
IHRydWUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3Jp
dGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQogewogICAgIEFTU0VSVChpc0xl
bmd0aFdyaXRhYmxlKCkgfHwgIXdyaXRhYmxlKTsKQEAgLTYzMywzNSArMjI4LDcgQEAgYm9vbCBK
U0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXkt
PmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9u
KTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17
Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5E
RVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRv
ciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNs
b3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQog
CiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpA
QCAtNjcyLDEwICsyMzksNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBA
IC02ODcsMjYgKzI1MCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzI1Nyw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1
dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9
IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjcxLDkgQEAgdm9pZCBKU0FycmF5
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVu
Z3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49
IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1
LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElL
RUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNh
bGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBB
U1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
Ci0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwot
ICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAg
ICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSAr
IDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNl
IGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3Iu
Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFBy
b2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAg
ICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0g
ICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVh
c2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3Qp
Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxp
ZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAg
IEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJz
dCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1h
cC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBu
b3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFu
ZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7
Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2lu
Y2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rv
ci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAt
PnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkg
KyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAv
LyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3
YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNw
YXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFy
c2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJh
eSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1W
YWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNy
ZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFs
dWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0
aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNv
bmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xv
dCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xv
dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1
ICsyODEsNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09i
amVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkg
ewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
c3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihh
KTsKQEAgLTk2NCwxMTggKzI4OCwxNCBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQo
Y29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5h
bWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBp
bmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJl
bnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZl
cmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZh
bHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5y
ZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAg
ICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3Qp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCks
IHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRM
ZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVu
Z3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkK
LSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICgh
bV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVu
Z3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVu
Z3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3Jl
YXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNp
cmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBk
ZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3Ro
LCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgp
Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFs
bHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVl
cyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhh
dmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmlj
aWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAg
ICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0
b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3Qg
Y2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2Mg
bWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZv
aWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXpl
KHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFn
ZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAg
ICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVu
Z3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0
eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUg
bmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4K
LSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJ
bmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5
KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhl
IHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJl
dF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlh
cyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250
ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9y
YWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9u
LCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Fs
bG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0
aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KQEAgLTEzNjQsMzQgKzU4NCw2IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAg
ICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4s
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFS
S19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAg
IHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlz
aXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2Up
LCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1f
aW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0
b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2Ug
PSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4o
YmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMp
OwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VT
dG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxv
Y0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRD
aGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTgwMSw0NyArOTkzLDUg
QEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbAogICAgIHJldHVybiBu
dW1EZWZpbmVkOwogfQogCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0Fy
cmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAg
ICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3Nw
YXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVl
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0
b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVN
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+
PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlm
ICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBj
cmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQotICAgIH0KLX0K
LQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMDkgKzMwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtu
b3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkg
e30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQ
cm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VN
b2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0g
ICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAg
ZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNl
TW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwot
ICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAg
ICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAg
ICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNl
TW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9k
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJz
ZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5Owot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVu
Z3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1h
eSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0
YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAg
ICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5Kiwg
dW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
bWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUg
aXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJl
bW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVt
b3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBp
dGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29s
IGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9
Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0g
ICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0g
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxh
Z3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8v
IFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBB
IEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAg
ICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRh
aW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAg
Ly8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRo
ZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlz
IHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxs
b2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9y
YWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0
b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3Bl
cnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0
dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBm
YWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25t
ZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4Owot
ICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAg
ICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsg
fQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0
aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwpAQCAtMTUzLDggKzUwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsK
LQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVV
bmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9z
ZSBzaXplIGFuZApAQCAtMTY3LDIxICs2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAg
IC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAg
LSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0
ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNv
bmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0
SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKICAgICAgICAgCkBAIC0xOTksNjQgKzgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAot
ICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rv
ckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0
SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbkdldElu
ZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJl
dHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9y
YWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAg
ICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2Vx
dWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1W
YWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNr
IHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJv
cGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBj
b21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVy
dGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdM
ZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHBy
b3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0dXJuIG1hcCAm
JiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIApA
QCAtMjc1LDE3ICs5OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0ds
b2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7
CkBAIC0zMDEsMjUgKzExOSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxv
Y2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3Bh
cnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKIAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgo
dW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5n
dGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNo
aWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAg
IAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKIAot
ICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVj
aywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0g
ICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1h
bENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAv
LyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhC
aWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0
b3JhZ2UuCiAgICAgICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3du
IEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsK
LQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9CiAgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2
ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJp
bmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAg
ICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIEpTQ2VsbChKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHB1YmxpYzoKQEAgLTE0
MCw2ICsxNDAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQpAQCAtMTU4LDYgKzE2OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJp
ZGUtYWJsZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRo
b2RUYWJsZQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgVVN0cmluZyBjbGFzc05h
bWUoY29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsK
QEAgLTE3MCw2ICsxODEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGNv
bnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fc3RydWN0dXJlOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJ1dHRl
cmZseSogbV9idXR0ZXJmbHk7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChD
cmVhdGluZ0Vhcmx5Q2VsbFRhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDcgKzMx
OCw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlv
bjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMzAsNyArMzMwLDcgQEAg
dm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQotICAgIEJh
c2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVE
b250RW51bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRo
ZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNp
bXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZy
b20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNU
X1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6
ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkg
KzkxLDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0
b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdl
U2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7Cisg
ICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwogICAg
IEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAgICBz
aXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdl
IC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGlu
T3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgUHJv
cGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3Jh
Z2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNp
dHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdldCAr
IDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAtIDE7
CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJlQ2Fw
YWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFkZXIu
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVz
ID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hl
Y2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJh
c2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7Cisg
ICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdD
b2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsg
YW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91
dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9y
YWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0g
MSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUg
YXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFn
ZSgpLT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFs
dWUpOworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAg
ICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VT
aXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRl
LgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2
b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCkBAIC0xMjIsOSArMTY4LDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0
T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRl
cmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCisgICAgICAgIHRoaXNPYmplY3Qt
PnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OCw5
IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBK
U0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0
eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBp
ZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZp
c2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9y
S25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNp
bmdsZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBi
dXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25G
aW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpA
QCAtMTYxLDEwICsyMDcsNDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZQogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0
aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVz
IHRoYXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRP
d25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJS
QVlfSU5ERVgpIHsKKyAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGkg
PCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXApIHsKKyAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0xNzQsNiArMjU4LDEzIEBAIHZv
aWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUp
OwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0g
SGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4K
KyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVy
cyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUs
OSArMzI2LDE0MiBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAK
IHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
IHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKGkgPj0gTUFYX0FSUkFZ
X0lOREVYKSkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0
b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAg
IGxlbmd0aCA9IGkgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7
CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0g
ZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNPYmpl
Y3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAg
ICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5l
ZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUg
ZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAg
ICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X3N0b3JhZ2UtPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCAwLCAwKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0go
KTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJm
bHktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCgw
KTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwor
dm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
LT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3Jl
YXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBt
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXItPnR5cGUoKTsKKyAgICBBU1NFUlQob2xkVHlwZSA9
PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCkuc2V0VHlwZShvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1
bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAg
IHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQt
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhn
bG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBj
YXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOworICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERh
dGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3Jh
Z2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMzA0LDYgKzUyOCwxMCBA
QCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0Zv
ckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTYwLDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRo
aXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVj
dCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChp
ID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAg
ICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwor
ICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbERl
ZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3MjgsNTEgQEAgdm9pZCBK
U09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAg
IC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUg
YWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVB
cnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAgICAvLyBpcyBpbmNy
ZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQg
YXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVu
dCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRjaCAob2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0
aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOworICAgICAg
ICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
a2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAor
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8o
KSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkp
OwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkBAIC01MTUsOCAr
ODIzLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lk
IEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7
Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJE
aWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24o
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArODgwLDExIEBAIGJvb2wg
SlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJv
cGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbikKK05F
VkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5
U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChKU09iamVjdCog
Z2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0ZXIo
KSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihn
ZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAgIGlmICghc3RydWN0
dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0
ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikp
OworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1
bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90LnNldEdldHRl
clNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2ICs5MTAsNTI0IEBA
IFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAgICByZXR1cm4gaW5o
ZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4
ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewotICAgIEFTU0VS
VChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRv
cigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICBlbnRy
eUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkp
OworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
CisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBq
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29y
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0
aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdlIG1p
Z2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIGlmIChkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7
CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdl
dHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAw
OworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBz
ZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGRE
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikK
KyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0
ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFw
LT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xk
RGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAt
PmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGRE
ZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24p
Cit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNwYXJz
ZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBh
IHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0
aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1p
c3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBp
ZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBv
dmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUu
IGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBu
ZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwor
ICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRy
eUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVu
c2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0
eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxl
IGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5l
ZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRo
YXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElm
IElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0
cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQ
IG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVd
XSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBk
ZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBE
ZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3Jl
YXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQu
Yi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28s
IGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBv
YmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25m
aWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8g
RGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2Vu
dCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAv
LyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRy
dWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRy
eUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7
CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhl
ZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKKyAgICAgICAgICAgIG1fc3Rv
cmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2Vu
dC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9j
Y3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0
aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4g
Y29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAg
ICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1
cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZp
Z3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRv
ci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBj
dXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgor
ICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51
bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1l
cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKwor
ICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBm
dXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2Vu
ZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJl
c3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRl
c2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVj
dCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAg
ICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
YWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhl
biBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAg
ICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUg
dGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAg
ICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5k
IHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAg
ICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29u
dmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHBy
b3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBl
eGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxl
XV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQg
dGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZh
bHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBk
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2Us
IGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
YXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYg
KCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMg
dHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEu
aWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBh
bmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2Uu
CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4
ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkg
JiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwor
ICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFu
ZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5p
LiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2Ft
ZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0
ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRl
ciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAx
MS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5k
IFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAg
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iu
Z2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBn
ZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9m
IERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRy
aWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9m
IHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBk
ZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29u
c2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KCk7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiByZXN1bHQgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKKyAgICBhcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXAgPSByZXN1bHQ7CisgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXpl
cih0aGlzLCBmaW5hbGl6ZUFycmF5RGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisg
ICAgICAgIHJldHVybjsKKyAgICBkZWxldGUgc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisgICAgc3Rv
cmFnZS0+bV9zcGFyc2VNYXAgPSAwOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lk
ZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVY
KTsKKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAg
UHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5n
ZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKIAotICAgIC8v
IFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0
aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgot
ICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KSAqIG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0
b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7
CisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2
ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0
aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlv
bmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNF
eHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNz
YXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBz
ZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cg
dGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3Rvcihp
LCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQg
bV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3Jl
IHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9y
IGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNw
YXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9o
aWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAg
ICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3Rv
cmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRs
eSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBz
by4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJz
ZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0
aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgp
IHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFz
ZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1W
YWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRv
IHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNl
Y29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgp
OworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2
YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2
YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUg
YSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9y
LgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2ggKGJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5
OiB7CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywg
Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJy
YXlTdG9yYWdlKGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoaSArIDEpKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0
aCk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAvLyBGaXJzdCwg
aGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4K
KyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3Qg
ZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBj
cmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CiAg
ICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9w
ZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4pICogb2xkU2l6ZSk7CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nhcnku
CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNp
YmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUg
dmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9i
YWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0
b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8g
dGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBv
ciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBz
cGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJl
Y3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisKKyAgICAvLyBV
cGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJp
dCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBp
ZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJl
IGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBi
ZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFw
IGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBp
ZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5B
cnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVj
dG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisK
KyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVl
U2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVl
U2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogCi0g
ICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3Rv
cmFnZTsKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0
c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5OworICAg
IHN3aXRjaCAoYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNl
IE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAg
ICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShn
bG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3
VmVjdG9yTGVuZ3RoKDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
KworICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVu
Z3RoID0gbWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5n
dGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVu
Z3RoOworICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3Jl
YXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAg
ICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAx
LjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVy
Zmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVk
TGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQo
aW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9
IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBt
aW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGRlc2lyZWRMZW5ndGgpCit7CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJh
eUxlbmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3Ro
KQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5h
bGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1
ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBo
YXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZp
Y2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4
QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBu
ZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKKworICAgIC8v
IEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJl
YWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkgeworICAgICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJy
YXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihu
ZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAg
ICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBh
bGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVy
ZmxvdyBhcnJheSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKGluZGV4
QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsK
KyAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3Ig
dGhlIHByZS1jYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdW
ZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEs
CisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1
dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0g
bmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOworfQorCisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAodHlwZSA9PSBTb3J0Q29u
c2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CisK
KyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKEpT
VmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgeworICAgICAgICAgICAg
QVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVm
aW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQu
CisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgIH0K
KyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5s
ZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQo
KTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgg
PCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJB
WV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBp
ZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8g
Y3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgIH0KKyAgICB9Cit9
CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKworQnV0dGVyZmx5KiBKU09iamVj
dDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXpl
KTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBv
biBzdHJ1Y3R1cmUoKSwgc2luY2UKKyAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9m
IGEgdHJhbnNpdGlvbi4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKQEAgLTYzMCwxMCArMTQzNSw0NiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CiAgICAgSlNDZWxs
KiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNl
bGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3Qt
PmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNl
IE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IodmFsdWUuZ2V0KCksIDApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1f
c3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpdC0+c2Vj
b25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCkBAIC03MDQsMjYgKzE1NDUsMjYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEm
IG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQor
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0
YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5l
T3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFy
ZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRy
aWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5l
LgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywg
d2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAgICAgRGVmaW5lT3duUHJv
cGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcg
cHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsK
KyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAgICAgIC8vIHVubGVzcyBleHRlbnNp
b25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2JqZWN0LT5pc0V4dGVuc2libGUoKSkg
eworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dF
eGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlz
IG5vdCBleHRlbnNpYmxlLiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsKICAgICAgICAgb2xk
RGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIHB1dERl
c2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0
b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2Ny
aXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0
dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgaWYgKGRlc2NyaXB0b3Iu
aXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE1OTAsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjCiAgICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0b3IgaXMgc2ltcGx5IGNo
YW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRl
c2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVudC5h
dHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAgICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJl
bnQpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3Jp
cHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NjIsOCArMTYwMyw4IEBAIGJvb2wgSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNj
ZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIikpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1
cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRp
bmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0
aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKQEAgLTc4NCw4
ICsxNjI1LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSAm
JiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVz
Y3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAK
ICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9mIGFuIGV4aXN0aW5nIGFj
Y2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY0Myw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBnZXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghYWNjZXNz
b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgxMiwxMiArMTY1MywzNyBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIGdldHRlclNldHRl
ci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3Qo
KSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVuc2lnbmVkIGF0dHJzID0g
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCk7Ci0gICAgb2Jq
ZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwg
Z2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFj
Y2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dF
eGNlcHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhl
IGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgeworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEy
LjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAg
ICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBp
bmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0g
dG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5l
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5n
dGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBh
bHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICBy
ZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+
ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHRocm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemVBcnJheURhdGEo
SlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTEyMCw4ICsxMjIsMTc3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVj
U3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0
aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
cHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBz
aW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CisgICAgICAgIC8vICAtIHRoZSBwcm90
b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAorICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJl
IG5vdCBjYWxsZWQuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3
aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwg
c2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cg
PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXhRdWlja2x5KHBy
b3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQg
aSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgZ2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBj
YW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwor
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4
dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgs
CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1v
cmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VS
VChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgr
KzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkp
OworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUlu
aXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBo
YXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgor
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9z
dG9yYWdlLT5sZW5ndGgoKSk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXpl
ZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgorICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0
b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbiA9IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGlzU3BhcnNlSW5kZXhpbmdNb2RlKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwICYmIG1hcC0+c3Bh
cnNlTW9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1
dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Q
cm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1
bHRlZApAQCAtMTQ3LDYgKzMxOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM3NSwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZl
KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91
dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7
IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBt
X291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0
ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25G
b3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcs
NyArNDAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBs
b2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KQEAgLTI2OSwxNyArNDQ0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JE
ZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9w
ZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRC
dXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CiAgICAgICAg
IAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAg
ICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZM
aW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVT
dG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVj
dHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAg
LTI5Myw3ICs0NjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKIAogICAgICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMjUsNyArNDk0LDQ0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEs
IGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9y
YWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAg
ICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0
b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAg
ICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAg
ICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0z
MzgsMTYgKzU0NCwzOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgp
OwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3Jh
Z2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVt
cGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERh
dGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xv
dCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFz
aEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVy
ZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAgICAgICAgU3RvcmFnZUJh
cnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRJbmRl
eGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAgICBib29sIGRlZmluZU93
bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7Cisg
ICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICBi
b29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cs
IEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVz
aXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25l
ZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAgIGVudW0gQ29uc2lzdGVu
Y3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVu
Y3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lD
aGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZv
aWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFs
Q29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQq
IG1fcGFkZGluZzsKICNlbmRpZgpAQCAtNDkzLDE4ICs3MjIsMTIgQEAgaW5saW5lIGJvb2wgSlNP
YmplY3Q6OmlzR2xvYmFsVGhpcygpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS50eXBlKCkgPT0gR2xvYmFsVGhpc1R5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlT
dG9yYWdlIHN0b3JhZ2UsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmpl
Y3Q6OnNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0
dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsK
ICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBpZiAoIXN0b3JhZ2UpIHsKLSAgICAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9CiAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7Ci0gICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBzdG9yYWdlKTsKKyAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKIH0KIAogaW5saW5lIEpT
T2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQpAQCAtNTQzLDggKzc2Niw3IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKIH0KIAogaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCB0
aGlzLCAwKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgQnV0dGVyZmx5Ojpl
bXB0eVNpbmdsZXRvbigpKQogewogfQogCkBAIC01OTIsMTUgKzgxNCwxNiBAQCBpbmxpbmUgSlNP
YmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdChFCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSkgeworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAg
IGlmIChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBpZiAoc3RydWN0
dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvbi0+aXNHZXR0ZXJT
ZXR0ZXIoKSkKLSAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRp
b24pOworICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5n
ZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpcywgZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIG9mZnNldCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3du
UHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBt
YXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5
IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4Niw2ICs5MDksNyBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQo
dmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAg
ICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6
OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtOTQ1LDEzICsx
MTY5LDEzIEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG8KIHsKICAg
ICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldElu
SW5saW5lU3RvcmFnZShvZmZzZXQpOworICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0
ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiB9CiAKIGlubGluZSBpbnQgaW5kZXhS
ZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZM
aW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZz
ZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAgQVNTRVJUKCEo
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CkBA
IC05NTksNyArMTE4Myw3IEBAIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0
eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4g
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgp
OwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwpAQCAtNTksNyAr
NTksNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5CiAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkp
OwogICAgIH0KICAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBwdXREaXJlY3RW
aXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogICAgIAogICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5h
bWljQ2hlY2tzKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAK
IHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9m
ZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0
IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5l
IHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFn
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9o
CisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVk
ZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJl
dmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMSArMTE1LDExIEBAIGJvb2wgUmVnRXhw
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBS
ZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJy
YXlWYWx1ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5
IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMo
MCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7Cisg
ICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlE
ZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7
CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1
ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBX
VEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAw
LAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIs
CisgICAgfTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsK
KyAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlw
ZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KCkKKyAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNp
dHkoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7CisKKyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxh
Z3MgJiBTcGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAg
eworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VN
b2RlKTsKKyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQg
c2V0TGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nh
c3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBU
aGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lk
IHB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2ln
bmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2Jq
ZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4g
bV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlz
IHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShp
dGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWdu
ZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90
IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgp
IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9l
bmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1f
ZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFs
dWVNYXBJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHNfaAorCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJz
ZUFycmF5RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1Vu
ZGVmaW5lZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkp
OworICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFj
aXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAo
c2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAg
ICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRk
IHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhp
cyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNp
YmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3Zl
IGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hv
dWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnku
YXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0
KCk7CisgICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0
KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAg
IGlmICghc2V0dGVyKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0
dGVyLCBjYWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdz
LmFwcGVuZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgYXJyYXksIGFyZ3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpw
dXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3
ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNv
bW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBu
b3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2
ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAh
YXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3Ip
OworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0
byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Cisg
ICAgfQorCisgICAgZW50cnkuYXR0cmlidXRlcyA9IDA7CisgICAgZW50cnkuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5l
IHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sK
KyAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKwor
ICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3Qq
IGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0
ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25z
dAoreworICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRl
cyk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJh
c2U6OmdldCgpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0
LmlzR2V0dGVyU2V0dGVyKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmpl
Y3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICgh
Z2V0dGVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0
ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKwor
aW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9
CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAg
Zm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZp
c2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFy
cmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3Rv
cmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVt
IFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2Up
Ci0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0K
LSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVj
a2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hl
Y2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQot
ICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0g
ICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAg
Ci0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
OyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAg
IAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0j
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDkgKzU4MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBKU0NlbGw6OkpTQ2Vs
bChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBtX2NsYXNzSW5mbyhz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3RydWN0dXJlKGdsb2JhbERhdGEs
IHRoaXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiAgICAg
ewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155156</attachid>
            <date>2012-07-28 21:15:34 -0700</date>
            <delta_ts>2012-07-29 10:17:12 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>butterflies_patch_11.diff</filename>
            <type>text/plain</type>
            <size>201081</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNCBA
QAorMjAxMi0wNy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNpemVGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6QnV0dGVyZmx5
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9t
QmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKiBydW50aW1lL0NsYXNz
SW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6
ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldFR5cGUpOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoQW5kVHlwZSk6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpi
dXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6SlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4
ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJ
bmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNTcGFyc2VJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0
Rm9yTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU05v
bkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9C
YXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdF
eHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFy
c2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VN
b2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25s
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdl
QmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAxMi0wNy0yNyAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IGZ1bmN0aW9uYWxpdHkg
b2YgTWFya2VkQWxsb2NhdG9yOjptX2N1cnJlbnRCbG9jawpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3Rh
bmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFy
ZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
ZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKyNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpCisKKy8vIFRo
ZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4o
KSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBp
cyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmlu
ZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9S
X0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9j
YXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxl
bmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0
VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJv
IGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZp
bmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2Ug
YSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkg
aW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVj
dG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBm
dWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7
CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAv
IG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworaW5saW5lIEluZGV4aW5n
SGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAgIHJlc3VsdC5z
ZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0aEFuZFR5cGUodmVjdG9yTGVu
Z3RoLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5
Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLwor
CisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0
aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2lu
dHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcg
dG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0
LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0
IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUg
QXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBv
cGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1
c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVl
KQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlT
dG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3Rs
eSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZs
eS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZs
eSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1
dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVy
KiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgp
OyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiByZWludGVycnBl
dF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5n
SGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAg
ICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9y
TGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVu
Z3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9
CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVh
ZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGNvcHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisgICAgeworICAgICAg
ICBtX3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBtX2luZGV4QmlhcyA9
IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIu
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAg
ICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7Cisg
ICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1f
bnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBO
ZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRw
dHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3Bh
ZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Cisg
ICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGFs
bG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
YWxsb2NCYXNlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCBzaXplRm9yKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkFycmF5U3Rv
cmFnZS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlT
dG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1Byb3BlcnR5T2Zmc2V0Lmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3Mg
QnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0
ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAg
ICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBlbXB0eVNpbmdsZXRvbigpIHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjplbXB0eVNpbmdsZXRvbigpLT5idXR0ZXJmbHkoKTsgfQorICAgIAorICAgIHN0
YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRl
cikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21C
YXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5
Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRl
VW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRl
ciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRl
cmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0
b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9y
YWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0
YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBBU1NFUlQo
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBw
cm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2b2lkKiBiYXNlKHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlv
biBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBjaGFu
Z2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJlYWxs
b2NhdGlvbiBvY2N1cnJlZC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlD
YXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJl
Q2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdy
b3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXpl
X3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXpl
QXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3Qg
bmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogdW5zaGlmdChzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAor
I2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZseS5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBC
dXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJvcGVy
dHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICpyZXN1bHQtPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoZ2xv
YmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFz
ZSh2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShzbG90VmlzaXRvciwgMCwg
cHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSB2b2lk
KiBCdXR0ZXJmbHk6OmJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJu
IGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0eSk7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkg
PiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHks
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksIGJhc2Uob2xkUHJvcGVydHlDYXBhY2l0
eSksIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sK
KyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eSgpLCBvbGRQcm9wZXJ0eVN0b3JhZ2UsIGluZGV4aW5nSGVhZGVyKCkt
PmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIEFTU0VSVCghaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSk7CisgICAg
dm9pZCogYmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICAmYmFzZSwKKyAgICAg
ICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGZyb21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgcHJv
cGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlD
YXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
Y3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShyZXN1
bHQtPmJhc2UocHJvcGVydHlDYXBhY2l0eSksIGJhc2UocHJvcGVydHlDYXBhY2l0eSksIHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3
UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAg
ICByZXR1cm4gcmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2Fw
YWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQo
bnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpKTsKKyAgICBt
ZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNp
dHksCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisg
ICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJl
dHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVy
T2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3Bl
cnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5j
dGlvblB0ciBnZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzOworCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5h
bWVzOwogCkBAIC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBc
CiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1l
cywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBJ
bmRleGluZ0hlYWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAor
I2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1
dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRlZiB1bnNpZ25lZCBJbmRleGlu
Z1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRp
ZXMuCitzdGF0aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBj
b25zdCBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBMaXN0IG9mIGFjY2VwdGFi
bGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0g
MDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3Jh
Z2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0
YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlT
dG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9mVHlwZUJpdHM7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBudW1iZXJPZkxlbmd0aEJpdHMp
IC0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxlbmd0aCA9IGxlbmd0aE1h
c2s7CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBlbXB0eVNpbmdsZXRvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KCZz
X2VtcHR5U2luZ2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUg
ZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAg
Ly8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUg
SklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisg
ICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGhBbmRUeXBlKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoQW5kVHlwZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGluZ1R5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9sZW5ndGhBbmRUeXBlID4+IG51
bWJlck9mTGVuZ3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChpbnQzMl90IGxl
bmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7Cisg
ICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiB+bGVuZ3RoTWFzaykg
fCBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlwZShJbmRleGluZ1R5cGUgdHlw
ZSkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiBs
ZW5ndGhNYXNrKSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5n
dGhCaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGhBbmRUeXBlKGludDMyX3Qg
bGVuZ3RoLCBJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IGxlbmd0aCB8IChz
dGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9
CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAg
IHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7
IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hl
YWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdI
ZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAx
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9w
ZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAg
ICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQor
ICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFn
ZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRo
aXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0
aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRo
ZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoKTsKKyAgICBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsKKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBt
X2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJy
YXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aEFuZFR5cGU7IC8vIFRoZSBsZW5ndGggb2Yg
dGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRzIHR5cGUuCisgICAgCisgICAgc3Rh
dGljIHVpbnQ2NF90IHNfZW1wdHlTaW5nbGV0b247IC8vIFVzZSBhIFBPRCB0byBlbnN1cmUgdGhh
dCB0aGUgY29tcGlsZXIgZG9lcyBnb29kIHRoaW5ncy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5k
ZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxpbmVN
ZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiQXJyYXlT
dG9yYWdlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVh
ZGVyOjpwcmVDYXBhY2l0eSgpCit7CisgICAgaWYgKExJS0VMWSghKHR5cGUoKSAmIEhhc0FycmF5
U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpCit7CisgICAgaWYgKExJS0VMWSghKHR5cGUoKSAm
IEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4g
QXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVN
ZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcg
QEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVj
dCk7CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCkuZW5kKCk7CkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBKU0FjdGl2YXRpb246
OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAg
fQotICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0
T3duUHJvcGVydHlOYW1lcwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFy
aWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9u
OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5oCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWND
aGVja3MpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgc3RhdGljIHZvaWQg
cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklW
SUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0v
LyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0
aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFw
LgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5
IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJz
LCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1
bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhf
QVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkg
LSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2Vy
KSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4g
dGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEg
bnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBp
LAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFu
ZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUg
c3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xs
b3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwK
LS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBh
bGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3
aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4g
dGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0
YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2Vk
IHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhl
IGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0Vf
VkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5
cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5p
dGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVm
aW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8g
c2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkg
LSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGlj
aCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJy
YXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9z
IHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEg
UElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5
MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAw
eEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRo
b3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZF
VQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBv
ZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdh
cyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIz
KSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQg
dG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0
IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0v
LyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBz
cGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRl
ciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0
b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhh
dCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBs
aWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAm
SlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBh
ZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGlj
IGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8v
IFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBk
ZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0
aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwot
fQotCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0
aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAg
LTExNyw0MTkgKzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJv
b2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LQotaW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNr
VHlwZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1Jf
TEVOOwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRp
YWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5l
d1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRp
Y19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxv
Y0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5n
dGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNl
bmRpZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0
cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBm
b3IgbGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAg
aWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlh
bExlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNp
emUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0
b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShp
bml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAK
LSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsK
LSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+
bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZl
Y3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFs
TGVuZ3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1f
aW5pdGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRo
aXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmpl
Y3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5j
aGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2Jq
ZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0
V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNh
cGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAg
ICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAt
IG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVz
dWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBh
ZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhl
IHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5
IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0
byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVy
YXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
KSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAg
ICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
YXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNj
ZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJT
ZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29y
KS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENh
bGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RU
YWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29s
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewot
ICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50
cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEg
c2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1h
cC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVy
dHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3Qg
dGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICBy
ZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91
bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlz
IG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwot
ICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0
eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwot
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRl
cigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdl
dHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVy
KTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
QmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJh
eUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0g
ICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCkt
PmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0
dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBy
ZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMt
PmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0
Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICBy
ZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5k
ID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQot
Ci12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0g
ICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZv
aWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNl
VmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6
ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxv
Y2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1h
cDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlz
IHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hl
Y2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBz
byBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBt
YXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3
U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdT
dG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAg
bWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9y
YWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0K
LXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5
RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAm
IH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7
Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdl
dHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAw
OwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBz
ZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGRE
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikK
LSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0
ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFw
LT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xk
RGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAt
PmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGRE
ZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJh
eTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikK
LXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNl
TW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIg
cHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwg
cGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhl
biB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhl
IHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJp
ZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZp
bmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGlu
ZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0
cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNT
RVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3Bl
cnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAg
PSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBi
ZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8u
Ci0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFs
c2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBl
eHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBu
b3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5l
cmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBb
W0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJl
ZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMg
YWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHBy
b3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNl
LCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRl
IGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBP
IHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJs
ZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJ
ZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUg
YXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNl
dCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQot
ICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAt
PnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAg
ICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4
ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4
ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBS
ZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4g
UmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVu
dCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUg
YXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5n
IHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
Y3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0
b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxl
KCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
UHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29u
ZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAg
ICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVz
YyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBk
ZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0
ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJ
c0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0
aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBh
bmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0g
ICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0Nv
bmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5p
c20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5i
LiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUg
cHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEg
cHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2
YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29u
ZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVz
dCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWly
IGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBw
cm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8g
YSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZh
bHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBb
W0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0
IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4K
LSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElz
RGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJv
dGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4K
LSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4g
UmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2Ft
ZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAg
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRl
c2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3Vy
cmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAg
ICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0Fj
Y2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWpl
Y3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVl
KERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAh
PSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBh
biB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4g
UmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVW
YWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAg
ICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVy
KCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIg
b2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2Mg
dGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUg
b2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBm
aWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1
cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
dm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3Jp
dGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwog
ICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQo
bWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2
LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICBy
ZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3Jp
cHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4o
Y2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdl
OwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBN
QVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
aWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
dGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25O
b25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2ln
bmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAg
ICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNB
cnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7
Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVk
IG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAg
dm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0Ojpw
dXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5j
aGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9y
LgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8g
VXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAg
ICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAg
ICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQot
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZh
bHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAg
ICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAo
c2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0g
ICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZh
bHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3Ro
ZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2Jq
ZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpT
QXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0g
TUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0g
ICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBh
IHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUg
YXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFy
eSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRl
bnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5
LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5z
aWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhl
IHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xv
YmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9z
dG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRv
IHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1
c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFw
ICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5w
dXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0g
ICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3Jp
dGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNp
YmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAx
OwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBX
ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50
IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJz
ZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2Us
IG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1
ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdl
IGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgot
ICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUg
bWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1h
cCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYg
KCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAg
ICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0Fy
cmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91
bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQg
dmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8
PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0K
LSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZl
IGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRo
ZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9u
YXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4
dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3Rv
cmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNl
bnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0
aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGks
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChn
bG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBt
X3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUg
dG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwot
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3Ig
Y2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3Bh
cnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAg
IHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7
Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qg
d3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAg
IGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhl
ciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUg
IHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxk
IGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVt
VmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUo
KTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
bGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhl
YywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3Jh
Z2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3Iu
Ci0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRo
ZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNl
TWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBp
ZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwot
ICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0
cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtOTI4LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBK
U0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2Jq
ZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkK
LSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlm
IChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYg
KHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAg
ICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVN
YXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEs
IGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQqPihhKTsKQEAgLTk2NCwxMTggKzIyNiwxNCBAQCBzdGF0aWMgaW50IGNvbXBhcmVL
ZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsK
IH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGlu
ZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIK
LSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5l
ZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBt
ZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNP
YmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkK
LSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0
LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAg
ICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
LSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9u
dEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwg
a2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwot
ICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0g
ICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRl
c2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25l
ZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0
b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4
SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAg
ICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1h
eChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8g
TWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5n
dGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0g
ICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0g
ICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+
PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNl
ZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5j
cmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3Jl
YXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJh
eTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGlu
IGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1v
dmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9y
LiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBp
dCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rv
ckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNp
Z25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQot
ICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNl
cyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7
Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2Us
IHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFy
Kj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3Rv
cmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAg
IG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRo
ZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJy
YXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+
PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAv
LyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHBy
ZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JM
ZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBp
ZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3Rv
cmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBu
ZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0
b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3Zl
Y3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4
QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2Uq
PihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkg
KyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYg
Y3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBz
dG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9s
ZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9j
QmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3Rvciwg
YnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KQEAgLTEzNjQsMzQgKzUyMiw2IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwot
ICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsK
LSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgp
KTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0K
LSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
YmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRo
aXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09i
amVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlz
T2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNf
Y2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+
bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9j
QmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAg
IG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91Ymxl
IGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTgw
MSw0NyArOTMxLDUgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbAog
ICAgIHJldHVybiBudW1EZWZpbmVkOwogfQogCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5
cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNT
RVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChz
dG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAg
QVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVj
dG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAg
ICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAg
ICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lD
aGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3Ig
PT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0lu
VmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFT
U0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXgg
PD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAg
ICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8v
IExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAg
fQotICAgIH0KLX0KLQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw4IEBACiAjaWZuZGVmIEpTQXJyYXlfaAogI2RlZmluZSBKU0FycmF5X2gKIAorI2lu
Y2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogI2RlZmluZSBDSEVDS19BUlJBWV9DT05T
SVNURU5DWSAwCkBAIC0zMCwxMzEgKzMyLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNz
IEpTQXJyYXk7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RydWN0
IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAg
ICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VB
cnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhl
Y1N0YXRlKiwgSlNBcnJheSopIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3Qm
KSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0g
ICAgICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAg
ewotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdU
Rjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDY0X3Q+ID4gTWFwOwotCi0gICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9y
bWFsID0gMCwKLSAgICAgICAgICAgIFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3Ro
SXNSZWFkT25seSA9IDIsCi0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVk
ZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFk
ZFJlc3VsdDsKLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDog
bV9mbGFncyhOb3JtYWwpCi0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKLQotICAgICAgICBib29sIHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHNldFNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGlj
X2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0
TGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0
aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUg
bWFwCi0gICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0
ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3Ig
ZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRo
aXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9m
IHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVt
b3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92
ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBt
X21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21h
cC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJl
Z2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFw
IG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRl
ZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFs
IGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQn
cyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1f
dmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNl
IHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQg
aXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBB
cnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlm
dCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBi
eSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2Yo
SlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5z
aWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8v
IFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0
aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsg
ZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMg
dG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0
cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2Vu
ZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBh
bGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9
OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNs
YXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAs
IG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAg
IGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAog
ICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3Ry
dWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY3LDI1ICs1OSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGly
ZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBj
b25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRh
YmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAg
ICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAg
ICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19F
WFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgICAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPm1fbGVuZ3RoOyB9CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGdldEFycmF5TGVuZ3RoKCk7IH0K
ICAgICAgICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQg
YmUgYSBSZWdFeHBNYXRjaEFycmF5LgogICAgICAgICBib29sIHNldExlbmd0aChFeGVjU3RhdGUq
LCB1bnNpZ25lZCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKIApAQCAtMTk5LDY0ICs3
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBp
KSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsg
fQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0
SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAg
IHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxp
emVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5n
IHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3Rv
cmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgs
Ci0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0
aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgot
ICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdM
ZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0
aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xl
bmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGlu
aXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAg
ICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAg
ICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQog
ICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVy
Jik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSos
IHVpbnQzMl90IGxlbmd0aCk7CiAKQEAgLTI2NSwzMyArODUsMjEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
c3RvcmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2Rl
KEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAgICAgICAgewotICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAg
ICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
OwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwog
ICAgICAgICB9CiAKQEAgLTMwMSw0MCArMTA5LDUwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2b2lkIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1Zl
Y3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAg
ICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50
KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFs
RGF0YSYpOwotCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5
Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0
b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVm
b3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAg
ICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBp
bnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJz
ZVZhbHVlTWFwOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7
IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKIAogICAgIGlu
bGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAg
ICBnbG9iYWxEYXRhLCAwLCAwLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVu
Z3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0K
IAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlv
blVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0
aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICB2b2lkKiB0ZW1wOwor
ICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAm
dGVtcCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAqYnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3Ro
LCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSB0cnVlOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAg
ICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUpOwpAQCAtMzUzLDMwICsxNzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVy
biBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOyB9CiAgICAgaW5saW5lIGJv
b2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyByZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pTQXJyYXko
di5hc0NlbGwoKSk7IH0KIAotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1
bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVm
aW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92
ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXpl
X3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8v
IFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBt
aW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFy
aWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotICAgIGlubGluZSBzaXplX3QgSlNBcnJheTo6c3Rv
cmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLSAgICAKLSAgICAgICAg
Ly8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRl
ZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIC8v
IC0gYXMgYXNzZXJ0ZWQgYWJvdmUgLSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uIGNhbm5vdCBv
dmVyZmxvdy4KLSAgICAgICAgc2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpOwotICAgICAgICAvLyBBc3NlcnRpb24gdG8gZGV0ZWN0IGlu
dGVnZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMgY2FsY3VsYXRpb24gKHNob3VsZCBub3QgYmUgcG9z
c2libGUsIHByb3ZpZGVkIHRoYXQKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9m
KEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gdmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+PSAoc2l6
ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpKTsKLSAg
ICAKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCiAgICAgaW5saW5lIEpTQXJyYXkqIGNv
bnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwg
Y29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDEx
IEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiBVU3RyaW5nIEpTQ2Vs
bDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAx
MjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNDZWxs
KENyZWF0aW5nRWFybHlDZWxsVGFnKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNDZWxs
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBwdWJsaWM6CkBAIC0xNDAsNiArMTQw
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1f
c3RydWN0dXJlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNDZWxsLCBtX2J1dHRlcmZseSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gJm1fYnV0dGVyZmx5OworICAgICAgICB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
ICAgICAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KQEAgLTE1OCw2ICsxNjgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUg
c3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUK
ICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVTdHJpbmcgY2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkBAIC0xNzAs
NiArMTgxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBjb25zdCBDbGFz
c0luZm8qIG1fY2xhc3NJbmZvOwogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0
cnVjdHVyZTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1f
YnV0dGVyZmx5OwogICAgIH07CiAKICAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdF
YXJseUNlbGxUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsNyBAQCBi
b29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmpl
Y3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcg
KzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAg
ICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBh
cnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcworLy8gYXMgYSBzaW1wbGUgaGV1
cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUg
MC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1Jf
R1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwor
CiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5ICs5MSw3MCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90Vmlz
aXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6
ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7
Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIEFTU0VSVChidXR0ZXJmbHkpOworICAgIEFTU0VS
VChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKTsKICAgICBBU1NFUlQo
c3RvcmFnZVNpemUpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNh
cGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNhcGFj
aXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lz
ZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2aXNp
dG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5
U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5OwotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOworICAgIElu
ZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAg
IAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gaGVhZGVyLnByZUNhcGFjaXR5KCk7
CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gaGVhZGVyLmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlv
bih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5
IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+cHJvcGVydHlTdG9yYWdlKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KSB7CiAgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgpOwogICAgICAgICAgICAgQVNT
RVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgm
dmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
bmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEsIHN0b3Jh
Z2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+Y29w
eUhlYWRlckZyb20oKnN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVu
dFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGNvdW50ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3Vy
cmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgbWFwLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhz
dG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgc3dpdGNoIChoZWFkZXIudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
ciwgc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAg
ICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpA
QCAtMTIyLDkgKzE2OCw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0
b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRP
ZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0g
QnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1
dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2Fz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0Miw5ICsxODgsOSBAQCB2b2lk
IEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3Jh
Z2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBz
dG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmlu
YWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24o
KSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmpl
Y3QoKSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwx
MCArMjA3LDQ4IEBAIFVTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamUKICAg
ICByZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdy
ZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0
IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVy
dHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYgKGkgPD0gTUFYX0FSUkFZX0lOREVY
KSB7CisgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7Cisg
ICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xv
dCk7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI1OCwxMyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5z
aWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
aSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhl
IHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzMyNiwx
NDIgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShpID49IE1BWF9BUlJBWV9JTkRFWCkp
IHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5l
Y2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYg
KCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
c09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Cisg
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFk
eUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkK
K3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsK
KworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGds
b2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhp
cyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNo
ZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQg
c28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
bWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdl
LT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAg
CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5tX2lu
ZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAg
CisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5B
cnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gbV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyLT50eXBlKCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJy
YXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7Cisg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAgbV9idXR0ZXJmbHkg
PSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLnNldFR5
cGUob2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5n
dGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQt
PnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxl
bmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZh
bHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3Vs
dC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0
YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJh
eToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAg
ICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTMwNCw2ICs1MjgsMTAgQEAgYm9vbCBK
U09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihjZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZp
ZWQoKSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUo
ZXhlYyk7CkBAIC0zMzIsMTAgKzU2MCw0NSBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0
eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9B
UlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXQt
PnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFs
dWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzI4LDUxIEBAIHZvaWQgSlNPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQg
bnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVk
IGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0
aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBp
bmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNo
LAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0
dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNh
c2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtl
eXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0p
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAg
ICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3Bl
cnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBv
YmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzgyMyw3IEBA
IHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVj
dDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlm
IChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFy
eU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGds
b2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg4MCwxMSBAQCBib29sIEpTT2JqZWN0
OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVS
X0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJ
TkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNs
b3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1
bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAg
ICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0
T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0
aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwg
b2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdl
dHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTEwLDUyNCBAQCBTdHJ1Y3R1
cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklE
OwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQor
dm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAg
ICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5j
dGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBp
biB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAg
ICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBk
ZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlw
dG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAg
ICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0g
ZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3Jp
cHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0g
R2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAg
ICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAg
ICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRl
c2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1
dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRv
cik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAg
IEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGlu
Z01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFy
IHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxs
IHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRo
ZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHBy
b3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUg
ZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVP
d25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0
byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmli
dXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NF
UlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVy
dHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
YXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9
ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJl
IHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4K
KyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxz
ZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4
dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAg
ICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1
bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5v
dCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVy
aWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhl
biBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmpl
Y3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtb
Q29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVk
IGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBh
YnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJv
cGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2Us
IERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUg
YW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8g
d2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxl
XV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElm
IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBh
dHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0
IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisg
ICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+
c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1h
cC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAg
ICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlw
dG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1f
bGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAg
Ly8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4g
Y3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUg
dmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVk
IHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRl
c2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBh
bmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KKyAgICAgICAg
aWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUo
KSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0
dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICB9CisKKyAgICAvLyA4
LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2
YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0
aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCisgICAgICAgICAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBt
ZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAg
Ly8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVy
dCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKKyAgICAgICAgICAgIC8v
IGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlz
dGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzCisgICAgICAgICAgICAvLyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bworICAgICAgICAgICAgLy8gdGhl
aXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhl
IHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0
byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3Rpbmcg
dmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBb
W0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0
IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisg
ICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0Rh
dGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3Ro
IHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1d
IGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJl
amVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVW
YWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNj
cmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2
YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJl
bnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKKyAgICAgICAg
ICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nl
c3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0
LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShE
ZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0g
Y3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4g
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJl
amVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigp
ICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9m
IGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRo
YXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9m
IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmll
bGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRv
ciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICB0
aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworfQor
CitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVz
dWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywg
ZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmpl
Y3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAg
QVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5
U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZl
IHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29k
IG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lk
KiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdT
aXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8v
IEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFy
c2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5
IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9k
ZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJs
ZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUg
dG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0
b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFn
ZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUg
dmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1
c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFw
ICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRl
IG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5s
ZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jv
d2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1h
cC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAg
aWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcg
YSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAg
Ly8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlz
IHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWls
cy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFw
LT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5B
cnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVj
dG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90
KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CisgICAgc3dpdGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAg
ICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUlu
aXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFn
ZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sK
KyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAg
IEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBj
YXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYg
KExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2li
bGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0
aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwogICAgIAotICAg
IG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9s
ZFNpemUpOworICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
KyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3Qg
dXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1h
cCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2lu
ZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91
bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBp
cyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50
bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcg
c28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFy
c2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2Nh
dGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUo
KSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0
aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5
OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3Is
IGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2
ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAgIEFTU0VS
VChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7Cisg
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Cisg
ICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2gg
KGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJh
eToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAg
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4dGVu
c2libGUoKSkgeworICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rvckxl
bmd0aCgwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2YWx1
ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
KworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgQVNT
RVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisKKyAgICB1
bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1p
bihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4
SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAg
ICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1h
eChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8g
TWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5n
dGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Cisg
ICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisg
ICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+
PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNl
ZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKKworICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5j
cmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gbWluKGluY3Jl
YXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKQoreworICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgoZ2V0QXJyYXlMZW5ndGgo
KSwgZGVzaWduZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNv
bnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20g
c3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBh
Y2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHku
CisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
QVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9y
TGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNh
c2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1h
a2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9y
TGVuZ3RoKSk7CisgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3
QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRo
ZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJy
YXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihpbmRleEJpYXMgPj4g
MSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgLy8g
Q2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUt
Y2FwYWNpdHkuCisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVu
Z3RoICsgbmV3SW5kZXhCaWFzOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFn
ZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAg
ICBpbmRleEJpYXMsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRl
cmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgo
bmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2lu
ZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7
CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5
Q2hlY2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsg
Ly8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAg
ICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VS
VChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkp
OworCisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAg
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJz
ZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFn
ZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgp
OworICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUg
IT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlm
IHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlm
IC8vIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAg
ICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0
dXJlKCksIHNpbmNlCisgICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5z
aXRpb24uCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdl
KGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
CkBAIC02MzAsMTAgKzE0MzUsNDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9
IDA7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAg
ICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJl
Y3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zm
c2V0KSwgYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoICht
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJh
eToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZh
bHVlLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZh
bHVlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQo
ZGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAog
Ym9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpA
QCAtNzA0LDI2ICsxNTQ1LDI2IEBAIHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2Jh
bERhdGE7CiB9OwogCi1ib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNP
YmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3
ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3Bl
cnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcg
cmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyks
IGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAv
LyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1
c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5U2Nv
cGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5
IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBj
dXJyZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYg
KCFtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUg
cHJldmVudGVkIQotICAgICAgICBpZiAoIW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAg
ICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9u
KQogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0
ZW5zaWJsZS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2NyaXB0
b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9y
KGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
KCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHko
KSkKQEAgLTc0OSw4ICsxNTkwLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0
aGUgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9y
LmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRl
c0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
IHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3Vy
cmVudCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhl
YywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2MDMsOCBAQCBib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNo
YW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsK
KyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVu
dChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVl
IGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTYyNSw4
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQog
ICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2Ny
aXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1
cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
dGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3Io
ZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8g
Q2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBw
cm9wZXJ0eQpAQCAtODAyLDcgKzE2NDMsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dl
dHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2NTMsMzcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAg
IGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
dGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNl
dHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9u
KQoreworICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVk
IHByb3BlcnR5IHN0b3JhZ2UuCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAg
ICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4g
UmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBmYWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0g
b2xkTGVuCisgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4
ICsgMS4KKyAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3Bl
cnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xk
TGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJl
dHVybiB0cnVlLgorICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIG9i
amVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0
aHJvd0V4Y2VwdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93
bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4
Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3coRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2lu
Y2x1ZGUgIlByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogI2lu
Y2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCkBAIC05Niw2ICs5NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IHZvaWQgZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKQEAgLTEyMCw4ICsxMjEsMTc3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJv
b2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRB
cnJheUxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
Z2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6
CisgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAorICAg
ICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCisgICAgICAgIC8vIFRoaXMgbWV0
aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFi
bGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGly
ZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5H
ZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
IChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAg
IHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAm
JiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNl
dEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
YXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAg
ICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0
b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8g
bm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVz
LgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgg
PCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VS
VChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGll
cyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3
TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5sZW5ndGgoKSk7CisjaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIg
b2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgorICAg
ICAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIG1f
c3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOworI2VuZGlmCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzU3BhcnNlSW5kZXhpbmdNb2RlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNr
ZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90
b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMxNyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5j
ZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVy
dHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNv
bnN0OwpAQCAtMjAzLDggKzM3NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBt
X291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAg
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9Cisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBj
b25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldElu
SW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2Nh
dGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQzLDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQg
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAg
dm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwg
U3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJl
YWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2Fw
YWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAg
ICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9p
ZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKTsKIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19p
bmZvOwogCkBAIC0zMTgsMTQgKzQ4NiwzOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAv
LyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBi
ZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50
IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5KiA9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2
aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVf
dCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3Im
LCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0
aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC0zMzgsMTYgKzUzMSwzOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAg
ICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRl
cm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIs
IFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSog
ZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAg
ICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5
KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAg
ICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJy
YXlTdG9yYWdlKik7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAg
IGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNl
bHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgpAQCAtMzc0LDggKzU5MCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxp
Y2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KQorICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5Mywx
OCArNzA5LDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAg
ICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBl
OwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
aWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQog
ICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5l
U3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkg
PSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0Miw5ICs3NTIsOCBA
QCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFz
T2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9i
YWxEYXRhLCB0aGlzLCAwKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
KyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKIHsKIH0KIApA
QCAtNTkyLDE1ICs4MDEsMTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmpl
Y3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRp
b24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkp
IHsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxs
R2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0
ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxv
Y2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNl
dChvZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEg
ZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02
ODYsNiArODk2LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0g
ISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQo
cHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAg
ICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKQEAgLTk0NSwxMyArMTE1NiwxMyBAQCBpbmxpbmUgc2l6ZV90IG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9m
ZnNldCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5P
dXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAg
ICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9m
ZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNl
dEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3Rv
cmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAg
ICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVy
biBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlBy
b3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU5LDcgKzExNzAsNyBAQCBpbmxpbmUg
aW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0
aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVP
ZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShv
ZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTIz
OTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xU
YWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2Jq
ZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+
c3ltYm9sVGFibGUoKS5lbmQoKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlz
RHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJ
KHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6
ZV90IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJu
IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAt
IDI7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZl
U3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3Jh
Z2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNl
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEy
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFy
c2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5r
bm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBT
cGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChF
eGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYp
IGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpT
VmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBl
bnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEs
CisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVz
dWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3Jt
YWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2Rl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRp
Y19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBs
ZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3Ro
SXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAg
IHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3Ro
SXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJl
Y3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVy
YXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBU
aGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBv
ZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3Zl
KGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9
CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAg
IGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMo
aSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQor
ICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRl
OgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9y
dGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJz
ZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
CisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVm
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJz
ZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBh
cnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVu
dHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBt
X21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkp
IHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2Fw
YWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBj
YXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNW
YWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5p
c0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
YWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXIt
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwo
ZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5s
aW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBU
byBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUg
c3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBu
ZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhp
cyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4K
KyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewor
ICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0
ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6Omdl
dChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6
OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2
YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNs
b3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVz
dWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRl
cihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0
YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFy
cmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5
RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRl
cyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0
ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vj
b25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVm
aW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9y
YWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQg
fTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2Jh
bERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIo
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNl
dChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAg
ICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFBy
b3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBt
X3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0
b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtp
XTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBn
ZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlT
dG9yYWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
Myw5ICs1ODMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCiAgICAgICAgIDogbV9jbGFzc0luZm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSkKICAg
ICAgICAgLCBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCisgICAgICAg
ICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155176</attachid>
            <date>2012-07-29 10:17:12 -0700</date>
            <delta_ts>2012-07-29 13:38:29 -0700</delta_ts>
            <desc>almost done with JSArray methods</desc>
            <filename>butterflies_patch_12.diff</filename>
            <type>text/plain</type>
            <size>216636</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNCBA
QAorMjAxMi0wNy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNpemVGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6QnV0dGVyZmx5
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbik6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpmcm9t
QmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKiBydW50aW1lL0NsYXNz
SW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6
ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldFR5cGUpOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoQW5kVHlwZSk6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpi
dXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6SlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmlzTGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgKEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlBZGRyZXNzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpm
aWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4
ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJ
bmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlh
bGl6YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNTcGFyc2VJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0
Rm9yTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU05v
bkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpvZmZzZXRS
ZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9C
YXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdF
eHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFy
c2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VN
b2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25s
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdl
QmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAxMi0wNy0yNyAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IGZ1bmN0aW9uYWxpdHkg
b2YgTWFya2VkQWxsb2NhdG9yOjptX2N1cnJlbnRCbG9jawpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3Rh
bmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDksNyArNDQ5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xh
c3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4
ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQCB2b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFy
ZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFy
ZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKyNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpCisKKy8vIFRo
ZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4o
KSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBp
cyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmlu
ZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9S
X0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9j
YXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxl
bmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0
VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJv
IGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZp
bmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2Ug
YSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkg
aW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVj
dG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBm
dWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7
CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAv
IG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworaW5saW5lIEluZGV4aW5n
SGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAgIHJlc3VsdC5z
ZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0aEFuZFR5cGUodmVjdG9yTGVu
Z3RoLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5
Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLwor
CisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1
dHRlcmZseTsKKworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBv
ZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFy
cmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNz
IHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkg
YW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0
aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8g
aXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBh
bGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFn
ZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2Ug
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAg
IEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25s
eSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAg
c3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGlj
IEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0
dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnJwZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlz
KTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxk
cyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAg
IHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsg
fQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigp
LT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJl
dHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3Ro
KTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBB
cnJheVN0b3JhZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5t
X3NwYXJzZU1hcDsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAg
ICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4
ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAg
IH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAgICB9CisgICAgCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRl
eEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1l
bnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1
aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVj
dG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5
X2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVy
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1Byb3BlcnR5
T2Zmc2V0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFz
cyBTbG90VmlzaXRvcjsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGlu
c3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBlbXB0eVNp
bmdsZXRvbigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjplbXB0eVNpbmdsZXRvbigpLT5idXR0
ZXJmbHkoKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5
ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZT4oYmFzZSkg
KyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNv
bnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHkpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rp
b24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlz
KTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRl
eGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFy
cmF5U3RvcmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9w
ZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgp
CisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQq
IGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1
cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0K
KyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICAvLyBU
aGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlv
biBpdHNlbGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0
byByZWZsZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMg
c2V0IG9mCisgICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVu
ZGVkIHRvIGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisgICAgLy8gbW9kZXMg
b2YgYnV0dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRl
cmZsaWVzIGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRl
U3RvcmFnZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVf
dCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkg
aXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJp
Z2h0KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2Fw
YWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVy
Zmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIEJ1dHRlcmZseSogdW5zaGlmdChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7Cisg
ICAgdm9pZCogdGVtcDsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJv
bUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJvcGVydHlDYXBhY2l0
eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVh
ZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwg
MCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYg
dmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29u
c3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShzbG90VmlzaXRvciwgMCwgcHJvcGVydHlD
YXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJm
bHk6OmJhc2Uoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGJhc2UoaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9w
ZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksIGJhc2Uob2xkUHJvcGVydHlDYXBhY2l0eSksIHRvdGFs
U2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1
cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eSgpLCBvbGRQcm9wZXJ0eVN0b3JhZ2UsIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IEFTU0VSVCghaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSk7CisgICAgdm9pZCogYmFz
ZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICAmYmFzZSwKKyAgICAgICAgICAgIHRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZy
b21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgcHJvcGVydHlDYXBh
Y2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+
IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5p
bml0aWFsaXplZChnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShyZXN1bHQtPmJhc2Uo
cHJvcGVydHlDYXBhY2l0eSksIGJhc2UocHJvcGVydHlDYXBhY2l0eSksIHRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCBzdGQ6Om1pbihvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJlQ2FwYWNp
dHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4g
cmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwg
cHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZT
bG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpKTsKKyAgICBtZW1tb3ZlKHBy
b3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAg
ICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRl
eGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cykt
PmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3BlcnR5TmFtZXNG
dW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBn
ZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOworCiAg
ICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCkBA
IC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAg
ICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0
VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAorICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAg
JkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjbGFz
c05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
ZGV4aW5nSGVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit1aW50NjRfdCBJbmRleGluZ0hl
YWRlcjo6c19lbXB0eVNpbmdsZXRvbjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJ
bmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsK
K2NsYXNzIEFycmF5U3RvcmFnZTsKKwordHlwZWRlZiB1bnNpZ25lZCBJbmRleGluZ1R5cGU7CisK
Ky8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0
aWMgY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBIYXNB
cnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkg
dHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRp
YyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0
aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25z
dCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwor
CitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVHlwZUJpdHMgPSA0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZkxlbmd0aEJpdHMgPSAzMiAtIG51bWJlck9mVHlwZUJpdHM7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGxlbmd0aE1hc2sgPSAoMSA8PCBudW1iZXJPZkxlbmd0aEJpdHMpIC0gMTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxlbmd0aCA9IGxlbmd0aE1hc2s7CisgICAg
CisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBlbXB0eVNpbmdsZXRvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KCZzX2VtcHR5U2lu
Z2xldG9uKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJ
bmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJh
Y3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBH
QyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDog
bV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGhBbmRUeXBlKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoQW5kVHlw
ZSAmIGxlbmd0aE1hc2s7IH0KKyAgICBJbmRleGluZ1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEluZGV4aW5nVHlwZT4obV9sZW5ndGhBbmRUeXBlID4+IG51bWJlck9mTGVu
Z3RoQml0cyk7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChpbnQzMl90IGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1f
bGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiB+bGVuZ3RoTWFzaykgfCBsZW5ndGg7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0VHlwZShJbmRleGluZ1R5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IChtX2xlbmd0aEFuZFR5cGUgJiBsZW5ndGhNYXNr
KSB8IChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGhBbmRUeXBlKGludDMyX3QgbGVuZ3RoLCBJ
bmRleGluZ1R5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11
bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoQW5kVHlwZSA9IGxlbmd0aCB8IChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4odHlwZSkgPDwgbnVtYmVyT2ZMZW5ndGhCaXRzKTsKKyAgICB9CisgICAgCisg
ICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0
QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAK
KyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1
dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZy
b20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3Jh
Z2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQ
cm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7
CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsK
KyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAg
ICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2Ug
dGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGlu
Z0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoKTsKKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2F1eFdvcmQ7
IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZS4K
KyAgICB1aW50MzJfdCBtX2xlbmd0aEFuZFR5cGU7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4
ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRzIHR5cGUuCisgICAgCisgICAgc3RhdGljIHVpbnQ2
NF90IHNfZW1wdHlTaW5nbGV0b247IC8vIFVzZSBhIFBPRCB0byBlbnN1cmUgdGhhdCB0aGUgY29t
cGlsZXIgZG9lcyBnb29kIHRoaW5ncy4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVD
YXBhY2l0eSgpCit7CisgICAgaWYgKExJS0VMWSghKHR5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCktPm1f
aW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcygpCit7CisgICAgaWYgKExJS0VMWSghKHR5cGUoKSAmIEhhc0FycmF5
U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
Y3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgaW5saW5l
IGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBY3Rp
dmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVjdCk7CiAgICAg
U3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxl
KCkuZW5kKCk7CkBAIC0xMzMsOCArMTMzLDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blBy
b3BlcnR5TmFtZXMoSgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8v
IFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVy
dHlOYW1lcwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmpl
Y3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZp
c2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNv
bnN0OwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZp
c2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NF
UlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RS
VUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0
aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2Nh
dGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAq
IEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMu
Ci0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlk
ZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5E
RVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFs
dWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90
IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2Jq
ZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBp
ZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hl
cmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1h
cC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8v
IGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1
bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVy
dGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhl
cgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJz
ZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdv
dWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0
IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMg
d291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9y
ZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBz
dG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxj
dWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhp
bXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVz
ZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5j
aCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVm
aW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZG
IGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdz
IGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBU
aGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3Ig
ZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVk
IHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZp
bmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNp
emUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQK
LS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9s
aWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFw
LgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgs
IHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFz
IGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNl
IGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsK
LQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5h
bE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAot
Ly8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3
YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0
aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFs
dWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFi
b3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51
bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
fHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0
aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkg
KzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5l
IHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsK
LX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0K
LSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAg
IHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JM
ZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2Up
KQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFy
cmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBt
X3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAg
bV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hD
cmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwot
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3Ro
cyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRp
YWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwg
QkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9y
YWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAw
OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3Rv
cmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0
b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGgg
PSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0
aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwot
Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rp
b24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lk
IEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFs
bG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRS
ZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBp
KQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21h
cC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7
Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFw
OjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0
ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZp
cnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9u
IGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAot
ICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRv
bmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJh
eS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAg
ICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBl
bnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7
Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVy
KCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywg
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRl
bnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VS
VCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewot
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwot
ICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQot
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0
KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJ
S0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigp
OwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRo
b2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2Fs
bChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNl
TW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFz
ZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAu
ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpT
QXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAg
ICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFs
RGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7
Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0
aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJz
ZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9
Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
cC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3
YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2Fu
IHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVk
IHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0
aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5l
d1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1f
YWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAg
IG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNB
cnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVu
dHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlw
dG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50
cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgp
KTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3Nv
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAg
IGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRl
c2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0
b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAg
ICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBk
ZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlw
dG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBH
ZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAg
ICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAg
ICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5n
bG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1
dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRv
cikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVz
Y3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5l
T3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBB
U1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7
Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkg
dG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xs
IGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5
IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0
aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9w
ZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRl
cmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2Ny
aXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50
ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7
Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
R2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUg
UC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQo
dGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFs
dWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8g
My4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4g
UmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxl
IGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYg
KCFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJh
dG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5z
aWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3Jp
cHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRl
IGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hv
c2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3Vy
YWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNj
LiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0
aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlz
IHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11
c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBh
Y2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtb
R2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJp
YnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFs
dWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRl
IG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMg
ZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJ
bk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3Rv
cmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXgg
KyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1
ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRy
dWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhl
IHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNv
cnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1l
VmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsK
LSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0
eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAg
ICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERl
c2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxl
IGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5i
LiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQg
YW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhl
IEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNE
ZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJl
cXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAg
ICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlm
IChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFu
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0Rh
dGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkg
bmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkg
dG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2Yg
dGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxl
XV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUg
cHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQg
dmFsdWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBu
YW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHBy
b3BlcnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0
aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFi
bGVdXQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBw
cm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAg
fSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwg
dGhlbgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZp
Z3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAx
MC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
d3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAg
ICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBp
ZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERl
c2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3Iu
dmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9m
IGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAx
MC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUs
IHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0
ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8g
MTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVz
Y3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBm
aWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRo
ZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tT
ZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50
LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBp
ZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNj
LltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3Vy
cmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBw
cmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHBy
b3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAg
ICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwot
ICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0Fy
cmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7
CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICgh
aXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBl
bnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAg
ICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9v
bCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJy
YXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhy
b3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAg
aWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
aSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVj
dC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHNsb3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwog
fQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0
aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
LSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAg
IHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0
aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0Fy
cmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJh
eTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlm
IChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChp
ID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNP
YmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4x
IDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVO
TElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMs
IGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFs
aWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAg
ICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBt
YXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMg
bm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBh
bmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkp
OwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
LSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0
b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRo
ZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
LSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywg
dGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3Vy
cmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRv
aW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7
Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5j
cmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZh
bHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8g
dGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0g
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNs
b3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2
YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgot
ICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJS
QVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBG
aXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNl
IG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBp
cyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUs
IGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUo
KSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9s
ZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRv
IHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9y
LgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRh
LCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ug
c2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZl
Y3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNl
IGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAm
IGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERh
dGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBt
YXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0K
LQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUu
Ci0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVy
dHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9
IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAg
ICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGls
bCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBh
IHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBz
cGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5B
cnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBp
ZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBu
dW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJp
bmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVt
VmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50
byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5z
ZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0K
LSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVl
U2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVl
U2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4
LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhp
c09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xv
dCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0g
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihhKTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNv
cnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9p
ZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0
eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBp
cyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZm
ZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1f
dmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0K
LQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5
cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQot
ICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmly
c3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXpl
KCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAog
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9y
TGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFz
ZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1f
bGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0
aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlm
ICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVk
TGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRp
Y2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3
TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVh
c2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8v
IFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGlu
Y3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChk
ZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+
PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVu
Z3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0
aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5n
dGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVy
bmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZh
bHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJz
IGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVm
ZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsK
LSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdW
ZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZh
c3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxs
b2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAg
IHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VT
aXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3Rv
cmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9y
TGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBh
Y2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3Ro
LgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxh
dGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0
eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBu
ZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFj
aXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8g
VGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNl
ZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0
aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAg
ICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4
Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBj
b250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBz
dG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0
aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5l
d0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZl
cyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAv
LyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgot
ICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFj
aXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZl
IGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3Jh
Z2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkg
bWV0cmljczoKQEAgLTEwOTMsOCArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRT
bG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1
cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAg
ICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3Jv
dyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVz
ZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hl
Y2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxv
dy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9y
TGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3Vt
IG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92
ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNp
dHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlv
biBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2Yg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkg
PSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVx
dWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3Jl
IGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBv
ciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdB
bGxvY0Jhc2UgPSAwOwotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJ
ZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5v
dCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENh
cGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVu
dENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNl
ID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1
cnJlbnRDYXBhY2l0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0Fs
bG9jQmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VD
YXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAg
Ly8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAv
LyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5
LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdl
J3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3Qt
Y2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAh
PSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAt
IGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGgg
PSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNp
cmVkSW5kZXhCaWFzOwogCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0
aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUg
ZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9y
IHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0Fs
bG9jQmFzZSA9IDA7CisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElm
IHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90
IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50
Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0
aGluZ3MKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1f
aW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5
ID0gY3VycmVudENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFn
ZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBk
ZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0
aDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVjdG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBk
ZXNpcmVkQ2FwYWNpdHk7CisgICAgfQorCisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3Ro
KTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAg
ICAvLyBTdGVwIDQ6CiAgICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIg
bmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0
aW9uLgogCiAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5n
IGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRv
IHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1t
b3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1f
dmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9y
YWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3
IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxv
Y0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0g
ICAgfQorICAgIG1lbW1vdmUobmV3U3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0
aCk7CisgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxp
bmVTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG91dE9mTGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTE2MiwxMyArMzI0LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYywKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5n
dGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJz
ZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChp
c0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVu
Z3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBG
YWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5n
dGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3
ICszODIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBz
dG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5t
X2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFi
bGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0aFdy
aXRhYmxlKCkpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0g
ICAgaWYgKGluZGV4IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAgIGlm
ICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAgICAg
ICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0
aCAtIDE7CisgICAgICAgIGlmIChpbmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2luZGV4XTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAg
ICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVlU2xv
dC5jbGVhcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0
YWJsZSgpKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAgICAg
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXgpOworICAgICAgICAgICAgICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGlu
ZHguCi0gICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIC8v
IENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMg
aW5keCBhbmQgdHJ1ZS4KLSAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVj
LCBpbmRleCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxl
dGUgcHJvcGVydHkuIik7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAv
LyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgorICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8gQ2FsbCB0aGUg
W1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0
cnVlLgorICAgICAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRl
eCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRo
IGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCisgICAgICAgIHNldExlbmd0aChl
eGVjLCBpbmRleCwgdHJ1ZSk7CisgICAgICAgIC8vIFJldHVybiBlbGVtZW50LgorICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgot
ICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJuIGVsZW1lbnQu
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQ
dXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZl
cmVuY2VzLgpAQCAtMTI3NSwzMCArNDQ5LDQ0IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNT
dGF0ZSogZXhlYykKIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIDAsIHZhbHVlLCB0cnVl
LCBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKIAotICAgIC8v
IEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAm
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUp
OwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aCArIDE7Ci0gICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3
aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAg
IGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
LyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0
eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFn
ZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgp
LT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7
CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3Rl
cCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBh
cnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgorICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwg
dmFsdWUsIHRydWUsIHN0b3JhZ2UpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgLy8gUHVzaGluZyB0byBh
biBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3Mg
YSByYW5nZSBlcnJvci4KLSAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bV9sZW5ndGggPT0gMHhG
RkZGRkZGRnUpKSB7Ci0gICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhl
Yywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgLy8gUGVyIEVTNS4x
IDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICBpZiAoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0KLSAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVl
KTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKIGJvb2wgSlNBcnJheTo6c2hpZnRDb3Vu
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCkKQEAgLTEzMzksMjAgKzUyNywxOCBAQCBib29s
IEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVu
c3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhv
bGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhl
IGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAo
bGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFy
c2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+
PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciog
bmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFz
ZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAg
ICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJp
YXMgPj0gY291bnQpIHsKKyAgICAgICAgbV9zdG9yYWdlID0gbV9zdG9yYWdlLT51bnNoaWZ0KHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBjb3VudCk7CisgICAgICAgIG1fc3RvcmFn
ZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CisgICAgICAgIG1fc3RvcmFnZS0+c2V0VmVjdG9yTGVu
Z3RoKG1fc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICgh
dW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTEzNjQsMzQgKzU1MCw2IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSog
ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVG
bGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRo
b3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVj
dDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRo
aXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFn
ZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5t
X3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0
b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChi
YXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAg
ICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJh
eVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFs
dWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJU
KHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNl
VmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3Rh
dGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5h
c051bWJlcigpOwpAQCAtMTgwMSw0NyArOTU5LDUgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFj
dEZvclNvcnRpbmcoSlNHbAogICAgIHJldHVybiBudW1EZWZpbmVkOwogfQogCi0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
KTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0
byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9
PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQo
bnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAg
QVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlm
IChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3Ro
KTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VS
VChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KLSAgICAgICAgfQotICAgIH0KLX0KLQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNp
b24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIEpTQXJyYXlfaAogI2RlZmlu
ZSBKU0FycmF5X2gKIAorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogI2RlZmlu
ZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCkBAIC0zMCwxMzEgKzMyLDIxIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVy
PFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsK
LQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAg
ICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJheSopIGNvbnN0OwotICAgICAgICB2b2lk
IGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNj
cmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0
OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFNw
YXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNw
YXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOwotCi0gICAgICAgIGVudW0gRmxhZ3Mg
ewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgICAgIFNwYXJzZU1vZGUgPSAxLAot
ICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCi0gICAgICAgIH07Ci0KLSAgICBwdWJs
aWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBlZGVm
IE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCi0gICAgICAgICAgICAsIG1fcmVwb3J0
ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICBib29sIHNwYXJzZU1vZGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9u
bHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJy
YXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wg
cHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsK
LSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkp
OyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChj
aGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0
b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25l
ZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8g
bm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90
Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBP
bmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAg
ICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVj
dCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9i
amVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0
IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlT
dG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3Jh
Z2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUg
c3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1
aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2lu
dGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9p
bmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAg
ICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUg
YXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9p
ZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1h
bGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRp
dmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nl
cy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWlu
dHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRy
X3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Zl
Y3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAg
c3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
IAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5h
bE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFz
KDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZh
bHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAg
ICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVu
aW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAg
CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQot
ICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMg
SlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVz
ZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY3
LDI1ICs1OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAg
ICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRo
ZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90
eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBu
b3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0
aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNl
dCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0g
dHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGdl
dEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1
dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5LgogICAgICAgICBib29sIHNl
dExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNl
KTsKIApAQCAtMTk5LDY0ICs3Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNo
aWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hp
ZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5H
ZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9y
TGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChj
YW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgp
IHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0g
ICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlu
bGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldElu
ZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAg
ICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAg
ICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8g
dGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRv
IGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAg
ICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0
aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ip
OwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXph
dGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsg
d2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGgg
PT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxp
emVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2Rl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2Rl
KCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1h
cmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKQEAgLTI2NSwzMyArODUsMjEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgc3RvcmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBl
bnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
ICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUo
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkK
ICAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZU9yWmVybygpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0
b3JhZ2UtPm1fc3BhcnNlTWFwOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVu
Z3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CiAKQEAgLTMwMSw0MCArMTA5LDUwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgICAg
IHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAg
ICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RG
b3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVj
a1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
aywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAg
ICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0
b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1
ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdl
ICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVN
YXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
c3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9
CiAgICAgfTsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOwotICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5p
dGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCBiYXNlSW5kZXhpbmdIZWFkZXJG
b3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9S
X0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAg
IHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0
dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBh
cnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVh
cCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIGFycmF5
LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0
aCk7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9S
X0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAg
ICAgICB2b2lkKiB0ZW1wOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOwor
ICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JB
cnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5t
X3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBp
bml0aWFsTGVuZ3RoOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERh
dGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
ICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBh
cnJheTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUpOwpAQCAtMzUzLDMw
ICsxNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlND
ZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZv
OyB9CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyByZXR1cm4gdi5pc0Nl
bGwoKSAmJiBpc0pTQXJyYXkodi5hc0NlbGwoKSk7IH0KIAotLy8gVGhlIGRlZmluaXRpb24gb2Yg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24g
c3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2Fs
Y3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4
aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFn
ZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1
c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFu
Y2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2Rl
ZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotICAgIGlubGluZSBz
aXplX3QgSlNBcnJheTo6c3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KTsKLSAgICAKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVk
IHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpCi0gICAgICAgIC8vIC0gYXMgYXNzZXJ0ZWQgYWJvdmUgLSB0aGUgZm9sbG93aW5nIGNh
bGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4KLSAgICAgICAgc2l6ZV90IHNpemUgPSAoc2l6ZW9m
KEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKyAodmVjdG9y
TGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotICAgICAgICAvLyBBc3Nl
cnRpb24gdG8gZGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMgY2FsY3VsYXRpb24g
KHNob3VsZCBub3QgYmUgcG9zc2libGUsIHByb3ZpZGVkIHRoYXQKLSAgICAgICAgLy8gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgICAgIEFTU0VS
VCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gdmVjdG9yTGVuZ3Ro
KSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCiAgICAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKICAgICAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBKU0NlbGw6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKTsKIAogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBK
U0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBwdWJs
aWM6CkBAIC0xNDAsNiArMTQwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2J1dHRlcmZseSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5OworICAgICAgICB9CiAKICNpZiBFTkFC
TEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVy
ZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KQEAgLTE1OCw2ICsx
NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25z
IG9mIG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4g
dGhlaXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNv
bnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAg
ICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVTdHJp
bmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0lu
c3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQ
cm9wZXJ0eSk7CkBAIC0xNzAsNiArMTgxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogICAgICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CiAKICAgICBpbmxpbmUgSlNDZWxs
OjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOCw3ICszMTgsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRv
CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rp
b24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzMwLDcg
KzMzMCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAg
IH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0
aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyMzk3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUg
PSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAg
ICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwog
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUg
c2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwor
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxh
c3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwq
IGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsK
QEAgLTg2LDI5ICs5MSw3MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5h
bWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2Us
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXpl
X3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIEFTU0VSVChidXR0
ZXJmbHkpOworICAgIEFTU0VSVChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRv
bigpKTsKICAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0
eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0
eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdl
ID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxk
Q29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0g
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJv
cGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFn
ZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJl
bnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0
b3JhZ2UgLSAxOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gaGVh
ZGVyLnByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gaGVhZGVyLmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZV90IGNhcGFj
aXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAgICBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2
aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0
dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5
dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3Jl
YXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSwgaGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAg
ICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CisgICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+cHJvcGVydHlTdG9y
YWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07
KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgp
OwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCkt
PnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0
T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBzdG9y
YWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5k
IGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRlci50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBuZXdTdG9yYWdlLT5h
cnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb20oKnN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpKTsK
KyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9IG5ld1N0
b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3U3RvcmFnZS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
VmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAg
ICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXpl
LCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBh
cHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChoZWFkZXIudHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRv
cik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE2OCw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhp
c09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAg
IGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0
Miw5ICsxODgsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0g
ICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdl
KCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5l
U3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5ICE9IEJ1dHRlcmZs
eTo6ZW1wdHlTaW5nbGV0b24oKSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHko
dmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZUZvcktub3duRmluYWxPYmplY3QoKSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3Jh
Z2VTaXplKTsKQEAgLTE2MSwxMCArMjA3LDQ4IEBAIFVTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFt
ZShjb25zdCBKU09iamUKICAgICByZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBOQi4g
VGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3Jh
Z2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3Zl
cnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAgICAv
LyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYgKGkg
PD0gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICBj
YXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI1
OCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNT
RVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBw
dXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJz
IG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMjM1LDkgKzMyNiwxNDIgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3Qt
PmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShpID49
IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxk
VGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZh
bHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5j
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworfQor
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5
U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVjdG9y
TGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFw
LCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJp
YnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZh
bHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAg
ICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAg
bmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0
b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBv
bGRUeXBlID0gbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyLT50eXBlKCk7CisgICAgQVNTRVJU
KG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
dmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7
CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpLnNldFR5cGUob2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgQXJy
YXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIEFT
U0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7Cisg
ICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1
bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVh
ZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsK
KyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1h
cChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJl
dHVybiBzdG9yYWdlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RW
aXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTMwNCw2
ICs1MjgsMTAgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0
YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNG
dW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU2MCw0NSBAQCBib29sIEpTT2Jq
ZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAK
KyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9idXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90
KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
LS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09i
amVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2Jq
ZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzI4LDUx
IEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMg
dG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJv
cGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAg
Ly8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEg
ZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMg
YSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2gg
KG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAgICBjYXNl
IE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
c3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5
czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShp
dC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtl
eXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+
Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpA
QCAtNTE1LDggKzgyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGds
b2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhp
cyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAg
ICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg4MCwx
MSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAo
SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgp
KS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0
ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBp
ZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2Fj
aGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24o
bG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlz
LCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xv
dC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiAr
OTEwLDUyNCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAg
cmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhl
Y1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsK
LSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAm
IH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0
YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAg
ICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICBpZiAo
ZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAg
ICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNl
IGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBn
ZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCog
c2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAg
ICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxz
ZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAg
c2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJT
ZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlm
IChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERh
dGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29y
LT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5
SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAg
ZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citi
b29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlm
ICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3Jl
IHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAv
LyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1
dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8v
IGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1
dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBz
dGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVl
IHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAo
IWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwor
ICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlF
bnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIDIu
IExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJu
YWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQg
ZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBp
cyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAg
ICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3Io
RGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAgICAg
Ly8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tF
bnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAg
ICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUg
ZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5CisgICAg
ICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAg
ICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNj
cmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKKyAg
ICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0g
YW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Cisg
ICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVz
YyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkK
KyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmMu
IFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKKyAg
ICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8
IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAgICAg
IHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1
bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAgICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERl
c2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3Vy
cmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4K
KyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3Vy
cmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxU
byhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0
aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYg
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBm
aWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFj
aCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBj
dXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNE
YXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRp
ZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0
b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8g
OS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlz
IHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHku
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
CisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bwor
ICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMu
IEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0Nv
bmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRl
cyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIg
ZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlw
dG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8v
IDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAg
ICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0p
IGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJl
c2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNl
bnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2Uu
CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAg
ICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZh
bHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkg
bmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRo
ZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVz
dHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5h
ZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFz
dG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFw
OworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0
IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9B
UlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGlu
ZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9
IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7
CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRo
aXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBw
b2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICgh
Z2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3
UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5l
d1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3Vy
cmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAg
ICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRl
cmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAg
QVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAg
ICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRy
eSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVj
dG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3Mh
IC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQs
IGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxs
b2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dChl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAg
ICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJs
ZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUo
KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7Cisg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFy
ZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8g
YmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1h
cCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3Ig
aWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNw
YXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0lu
QXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0
ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAg
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRo
ZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVj
dG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwor
ICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkg
c2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJy
ZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAgc3dpdGNoIChidXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
Y2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cs
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
Y3JlYXRlQXJyYXlTdG9yYWdlKGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoaSArIDEpKTsKKyAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhh
dCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBtX3Zl
Y3Rvckxlbmd0aCk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAv
LyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3Bh
cnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJh
eSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1v
ZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2li
bGUoKSk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8g
Z3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJl
cmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQg
c3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxs
b2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFw
LT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisK
KyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAv
LyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgor
ICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBp
ICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAg
Ly8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwg
d2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBz
cGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3Bh
cnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJy
YXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVt
VmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFw
IGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBp
ZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1By
b3BlcnR5U3RvcmFnZTsKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OworICAgIHN3aXRjaCAoYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsK
KyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJy
YXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsK
KyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGkgKyAx
LCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVu
Z3RoKQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1h
eEluaXRMZW5ndGggPSBtaW4oY3VycmVudExlbmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAoZGVz
aXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1h
eEluaXRMZW5ndGg7CisgICAgZWxzZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQorICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8v
IG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xl
bmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVy
bmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsg
KGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAg
IEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJy
YXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisgICAg
cmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwor
fQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgo
dW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3Ro
KGdldEFycmF5TGVuZ3RoKCksIGRlc2lnbmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6
aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFu
IGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUg
YW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBD
YWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBt
b3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVu
c2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwor
CisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNh
c2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7
CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCkt
Pmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CisgICAgICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0
aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFJlbW92ZSBzb21lLCBi
dXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8g
bm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBt
aW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JM
ZW5ndGgpOworICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyBy
b29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgorICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xv
YmFsRGF0YSwKKyAgICAgICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAgIG5ld0lu
ZGV4QmlhcywgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgIGlm
ICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9idXR0
ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9y
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBlID09
IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNl
TWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZhbHVl
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0
b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVN
YXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+
PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0g
TUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAg
ICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExp
a2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgfQor
ICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJmbHkq
IEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5v
dCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQorICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBt
aWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jv
d1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9v
bCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDM1LDQ2IEBAIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAg
ICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+
c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0
RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgewor
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09i
amVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFw
LT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU0NSwyNiBAQCBwcml2YXRlOgogICAgIEpTR2xv
YmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNl
cHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRoZSBn
bG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJlbnRs
eSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3aGVu
IHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNoYW5n
aW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmlndXJh
YmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBG
b3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBEZWZp
bmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2UgaGF2
ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJy
ZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5sZXNz
IGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0ZW5z
aWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAgIGlm
ICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAg
ICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4g
cHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2Ny
aXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVz
Y3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTU5MCw4IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBz
aW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAg
ICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFj
dXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBw
dXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAzLDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENo
YW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQpA
QCAtNzg0LDggKzE2MjUsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2Ny
aXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
biBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwog
ICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhp
c3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjQzLDcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nlc3Nv
ciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjUzLDM3
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgZ2V0
dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRl
ck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWduZWQg
YXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0
dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVu
IHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMu
CisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8v
IGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltb
VmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQg
W1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3Np
bmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2Fs
bCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisg
ICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRl
eCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
b2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQdXRQcm9w
ZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUJh
cnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtOTYsNiArOTUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAsOCArMTIxLDE3NSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAg
ICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0
RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5v
dCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAg
ICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdy
aXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAg
ICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvcltp
XTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAg
aWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0
aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIEFTU0VS
VChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVu
Y2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBt
X251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAorICAgICAgICAgICAgICAg
IC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1i
ZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNp
Z25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBh
cyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkp
OworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
dGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5p
dGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxz
ZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJzZUlu
ZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZWZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAg
ICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9m
ICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4g
aXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAz
LDggKzM3MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVT
dG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0
b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2Uo
KSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0
dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAg
IAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAg
ICB7CkBAIC0yMjcsNyArMzk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAo
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdl
Q2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFn
ZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVT
dG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3Vs
dCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQxLDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUo
KS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNG
dW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRP
ZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAg
ICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJl
Kik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9y
YWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVj
dHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZO
ZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRk
cmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAm
bV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGlj
dGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRh
LCB0aGlzKTsKQEAgLTI5Myw3ICs0NjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsK
LSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKIAogICAg
ICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0z
MTgsMTQgKzQ4NCw2NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50
aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAg
ICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxP
YmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
KiA9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRv
cklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9mTGlu
ZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6
ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0
b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlv
dSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5Cisg
ICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgorICAgICAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVk
aWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmpl
Y3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBh
cnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVy
Zm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8gb2Jq
ZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBo
YXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CkBAIC0zMzgsMTYgKzU1NCwzOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBp
c09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBB
cnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAg
ICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChK
U0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFBy
b3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFBy
b3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAg
IFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAgICAgICAg
U3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAgICBib29s
IGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZv
aWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9y
YWdlKik7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5z
aWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0
aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxl
bmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAgIGVudW0g
Q29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29u
c2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisg
ICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgpAQCAtMzc0LDggKzYxMyw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpT
Tm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAg
ICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpl
bXB0eVNpbmdsZXRvbigpKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5MywxOCArNzMy
LDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1
cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Cisg
ICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFz
dG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNl
dFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFn
ZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0
ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0Miw5ICs3NzUsOCBAQCBpbmxp
bmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0
KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCB0aGlzLCAwKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTky
LDE1ICs4MjQsMTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBn
ZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
KCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVy
UHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9u
KSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNldChvZmZz
ZXQpLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rp
b24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODYsNiAr
OTE5LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0
cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBI
ZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVy
dHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYg
KHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKQEAgLTk0NSwxMyArMTE3OSwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkp
CiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1
cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9m
T3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5s
aW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgp
OwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1
cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5
U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU5LDcgKzExOTMsNyBAQCBpbmxpbmUgaW50IGlu
ZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9C
YXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQo
b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzOTcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsK
ICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS5lbmQoKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1p
Y1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlz
aW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zm
c2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsK
ICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7Cisg
ICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFn
ZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAor
I2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFBy
b3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
Q29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
UHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
MTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAg
QmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoK
KyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJh
eVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
eworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VB
cnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3Rh
dGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0
OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUg
Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307
CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50
NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZs
YWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAg
ICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0Owor
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisg
ICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0
PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJ
c1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFk
T25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAg
ICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFk
T25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250
ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBm
aW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNo
b3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUg
ZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsg
fQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAu
CisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
Y29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8v
IE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgorICAg
IE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2Fw
YWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5
VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNw
YXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5
VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwg
dW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5j
YXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAg
ICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkg
LSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0
eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCBy
ZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAm
IGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0
aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJy
YXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5n
IHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0
ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRl
clNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNz
b3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hv
dWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Q2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhv
ZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywg
c2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJv
b2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQor
eworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5
RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZl
IGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNl
IG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJv
cGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBu
b3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAg
ICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0
IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAw
OworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9w
ZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgp
OworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSkt
PmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0
dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsK
KworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1
bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Cisg
ICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBl
eGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6
OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Cisg
ICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9y
IGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0
b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFy
cmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAg
ICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIs
IFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEs
IG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVy
dHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9y
YWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEm
LCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1f
c3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5
U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3Jh
Z2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
Km1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkg
eyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0
dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7
IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdl
IG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw5ICs1
ODMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkp
CiAgICAgICAgIDogbV9jbGFzc0luZm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSkKICAgICAgICAg
LCBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9i
dXR0ZXJmbHkoYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155180</attachid>
            <date>2012-07-29 13:38:29 -0700</date>
            <delta_ts>2012-08-23 15:43:49 -0700</delta_ts>
            <desc>JSObject and JSArray are done</desc>
            <filename>butterflies_patch_13.diff</filename>
            <type>text/plain</type>
            <size>245082</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzOTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wNy0yNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFNwbGl0IGZ1bmN0aW9uYWxpdHkgb2YgTWFya2VkQWxsb2NhdG9yOjptX2N1cnJlbnRCbG9j
awpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJ
KHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NDksNyArNDQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVj
dCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0
ODQsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNk
ZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZp
ZXcgb2YgSlNBcnJheQorLy8KKy8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBi
ZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBK
U09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBB
IHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9u
LW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJl
c2VudGFibGUKKy8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBp
cyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBp
cyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25l
ZCAzMi1iaXQKKy8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFu
ZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFs
bCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBh
biB1bnNpZ25lZCBpbnRlZ2VyIGksCisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBh
cmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0
b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJl
IGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUg
KGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4g
dGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNl
TW9kZSBpbiB3aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAg
KiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBz
dG9yYWdlIHZlY3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRl
bnNpdHkgb2YKKy8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3Ig
KGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNp
dHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAq
IFdoZXJlIChNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJy
YXkuCisKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6
Om1heGltdW1MZW5ndGgpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBi
ZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBi
cmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+Lgor
I2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFH
RV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZG
RkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2gg
aXQncyBhbiBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKwor
Ly8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVj
dG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3Jl
YXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisj
ZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRo
ZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVt
ZW50CisvLyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3Vy
IHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNl
IG1hcC4KKy8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhh
biBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisv
LyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdl
IHVzZSBhIG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9
IDg7CisKK2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVl
czsKK30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFk
ZXIgcmVzdWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNl
dExlbmd0aEFuZFR5cGUodmVjdG9yTGVuZ3RoLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdI
ZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5l
IEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUg
IlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKKworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMg
dGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9p
bnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5n
IHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVj
dCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJ
dCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhl
IEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQg
b3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkg
dXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1
ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5
U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0
bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJm
bHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihi
dXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRl
ciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2Uo
KTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnJw
ZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGlu
Z0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisg
ICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rv
ckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4
aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxl
bmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgoKTsg
fQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hl
YWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3JhZ2UmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1hcDsKKyAgICAgICAgbV9pbmRleEJpYXMg
PSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVy
Lm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAg
ICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4Owor
ICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJz
ZU1vZGUoKTsKKyAgICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VN
YXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJ
blZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJl
IGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5p
dGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
bjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNl
bmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2Up
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6
ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVy
Zmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgor
I2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisjaW5jbHVkZSA8d3RmL1Byb3BlcnR5T2Zmc2V0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgQnV0dGVyZmx5
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBC
dXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBz
dGF0aWMgQnV0dGVyZmx5KiBlbXB0eVNpbmdsZXRvbigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVy
OjplbXB0eVNpbmdsZXRvbigpLT5idXR0ZXJmbHkoKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXpl
X3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VS
VChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAg
ICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQq
IGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkg
KyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFs
aXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGlj
IEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3Jl
YXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJ
bmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0
eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsg
fQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0
dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyBy
ZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQg
aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNh
cGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2Rz
IHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55Cisg
ICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBv
Y2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCisgICAgLy8gbWV0aG9kcyBpcyBub3QgZXho
YXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBh
bGxvY2F0aW9uCisgICAgLy8gbW9kZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBw
YXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJlY3Rs
eSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xk
UHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBB
c3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAg
ICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1
dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogdW5zaGlmdChzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZs
eSogc2hpZnQoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBudW1iZXJPZlNsb3RzKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9k
c19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRvdGFsU2l6ZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVt
cCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFk
ZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHks
IEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBp
bmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgICpyZXN1bHQt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24o
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJl
dHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVh
ZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByZUNh
cGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFj
aXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlD
YXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoKSwgb2xkUHJvcGVy
dHlTdG9yYWdlLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygp
LCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQoIWluZGV4aW5nSGVh
ZGVyKCktPnByZUNhcGFjaXR5KCkpOworICAgIHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5
Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdl
KAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlD
YXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAgdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9w
ZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJy
YXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdy
b3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVy
KCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0
YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5iYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCBi
YXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgc3Rk
OjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIHJlc2l6ZUFycmF5KGdsb2JhbERh
dGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIHByb3BlcnR5Q2FwYWNpdHksIGlu
ZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCksIG5ld1ByZUNhcGFj
aXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6dW5zaGlmdChzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG51
bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFk
ZXIoKS0+cHJlQ2FwYWNpdHkoKSk7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJl
IHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGlj
aAorICAgIC8vIGRpcmVjdGlvbiB3ZSdyZSBtb3ZpbmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQg
dGhlIGV4dHJhIGNoZWNrIG9mIG1lbW1vdmUgYW5kICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBh
IHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgaW4gdGhlIGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdo
cHV0IG9mIG1lbW1vdmUgd29uJ3QKKyAgICAvLyBhbW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2Fs
bGluZyBpdC4KKyAgICBtZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5Q2FwYWNpdHksCisgICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVy
dHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVG
b3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3Rv
cmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbnVt
YmVyT2ZTbG90cykKK3sKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBh
Ym92ZS4KKyAgICBtZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAr
IG51bWJlck9mU2xvdHMsCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5
Q2FwYWNpdHksCisgICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlD
YXBhY2l0eSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdl
KCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMjM5NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgq
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0T3duUHJvcGVy
dHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAgICAgICAgdHlwZWRl
ZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
ICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlOYW1l
c0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sj
I21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpoYXNJbnN0
YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3VpbnQ2NF90IEluZGV4aW5nSGVhZGVyOjpzX2VtcHR5U2luZ2xldG9uOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGlu
Z0hlYWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUgIlByb3BlcnR5
U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQnV0dGVyZmx5OworY2xhc3MgQXJyYXlTdG9yYWdlOworCit0eXBlZGVmIHVuc2ln
bmVkIEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9m
IGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAx
Oworc3RhdGljIGNvbnN0IEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIExpc3Qg
b2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KK3N0YXRpYyBjb25zdCBOb25BcnJheSAgICAgICAg
ICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA9IEhh
c0FycmF5U3RvcmFnZTsKK3N0YXRpYyBjb25zdCBBcnJheSAgICAgICAgICAgICAgICAgICAgPSBJ
c0FycmF5Oworc3RhdGljIGNvbnN0IEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkg
fCBIYXNBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZUeXBlQml0cyA9IDQ7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mTGVuZ3RoQml0cyA9IDMyIC0gbnVtYmVyT2ZUeXBlQml0
czsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoTWFzayA9ICgxIDw8IG51bWJlck9m
TGVuZ3RoQml0cykgLSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
ID0gbGVuZ3RoTWFzazsKKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGVtcHR5U2lu
Z2xldG9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5n
SGVhZGVyKj4oJnNfZW1wdHlTaW5nbGV0b24pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgZmFj
dCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4aW5nSGVhZGVyIGlzIGFsbCB6ZXJvJ3MgaXMgcGFydCBv
ZiB0aGUKKyAgICAvLyBjb250cmFjdCBvZiB0aGlzIGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIGNo
YW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRlcGVuZAorICAgIC8vIG9uIGl0LgorICAgIEluZGV4aW5n
SGVhZGVyKCkKKyAgICAgICAgOiBtX2F1eFdvcmQoMCkKKyAgICAgICAgLCBtX2xlbmd0aEFuZFR5
cGUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzazsgfQorICAgIEluZGV4aW5nVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhpbmdUeXBlPihtX2xlbmd0aEFu
ZFR5cGUgPj4gbnVtYmVyT2ZMZW5ndGhCaXRzKTsgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3Ro
KGludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVt
TGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGhBbmRUeXBlID0gKG1fbGVuZ3RoQW5kVHlwZSAmIH5s
ZW5ndGhNYXNrKSB8IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRUeXBlKEluZGV4
aW5nVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbV9sZW5ndGhBbmRUeXBlID0gKG1fbGVuZ3Ro
QW5kVHlwZSAmIGxlbmd0aE1hc2spIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSA8PCBu
dW1iZXJPZkxlbmd0aEJpdHMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aEFuZFR5
cGUoaW50MzJfdCBsZW5ndGgsIEluZGV4aW5nVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGxlbmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGhBbmRUeXBlID0g
bGVuZ3RoIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSA8PCBudW1iZXJPZkxlbmd0aEJp
dHMpOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBhdXhXb3JkKCkgeyByZXR1cm4gbV9hdXhX
b3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQzMl90IGF1eFdvcmQpIHsgbV9hdXhXb3Jk
ID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYXJyYXlT
dG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJv
bUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KHByb3BlcnR5U3RvcmFnZSk7
CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlz
KTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJv
cGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJh
eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlT
dG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0
aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFu
ZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBh
IGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eSgpOwor
ICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpOworCitwcml2YXRlOgorICAg
IHVpbnQzMl90IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRz
IG9uIHRoZSBhcnJheSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhl
IGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KKyAg
ICAKKyAgICBzdGF0aWMgdWludDY0X3Qgc19lbXB0eVNpbmdsZXRvbjsgLy8gVXNlIGEgUE9EIHRv
IGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIGdvb2QgdGhpbmdzLgorfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNs
dWRlICJBcnJheVN0b3JhZ2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3Qg
SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgp
ICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElLRUxZ
KCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0
aW9uKj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIEpT
QWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0
KCkpKTsKICAgICB9Ci0gICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRh
dGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tp
cCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVp
cmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3MSArNDUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NF
UlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNB
cnJheQotLy8KLS8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQg
aW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBw
cm9wZXJ0eSBtYXAuCi0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBt
YXAgb2YgYXJyYXkgZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMg
aWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUK
LS8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVy
IHRoYW4gIE1BWF9BUlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9u
ZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQK
LS8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0
aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIGksCi0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJy
YXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVj
dG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQg
aW4gdGhlIGZvbGxvd2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3Jh
Z2UgdmVjdG9yLAotLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3
aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAo
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZl
Y3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YK
LS8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9y
IGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBs
aWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChN
QVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVl
IHdpbGwgYWx3YXlzIGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8v
IFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50
IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBz
dG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJy
YXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9y
TGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZG
RkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0g
KHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAv
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0
byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1
Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJv
YmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNk
ZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gMSkKLS8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGlu
ZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVY
IDB4RkZGRkZGRkVVCi0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFy
cmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5l
dyBBcnJheSgxMjMpKQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1
cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hl
biB0aGUgZmlyc3QgZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9H
Uk9XIDRVCi0KLS8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVu
IHRvIHVzZSBhIHNwYXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5k
aWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdl
IHVzZSBhIHZlY3RvcgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFy
c2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVu
c2l0eU11bHRpcGxpZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0g
eyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNBcnJheSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBs
YXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBs
ZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20g
c2l6ZSAwLgotLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZF
Q1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9
IDA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBu
dW1WYWx1ZXM7Ci19Ci0KIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wg
dGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhj
ZXB0aW9uKQpAQCAtMTE3LDQxOSArNTQsMTUgQEAgc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgYm9vbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lmICFDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBKU0FycmF5OjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgp
Ci17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBC
QVNFX1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFn
ZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsK
LSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3Jh
Z2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9y
YWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9y
YWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0g
aW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7
Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKLSNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IGZhbHNlOwotI2VuZGlmCi0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLUpTQXJyYXkq
IEpTQXJyYXk6OnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAg
IC8vIENoZWNrIGZvciBsZW5ndGhzIGxhcmdlciB0aGFuIHdlIGNhbiBoYW5kbGUgd2l0aCBhIHZl
Y3Rvci4KLSAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9
IG1heChpbml0aWFsTGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwotICAgIHVuc2lnbmVkIGluaXRp
YWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAg
dm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFT
SCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5l
d1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAg
bV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGgg
PSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IGluaXRpYWxMZW5ndGg7Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1f
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKLSAgICBtX3N0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGhpczsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRo
ZSBzYW1lIG9iamVjdC4KLXZvaWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewot
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwot
ICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJh
eSogYXJyYXksIHVuc2lnbmVkIGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAg
ICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRk
UmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5
ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFj
aXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
KGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5
ID0gY2FwYWNpdHk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMg
JiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkg
ewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nv
ci5pc0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0
ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNh
bGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQot
aW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3Bh
cnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8v
IFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRo
ZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0
aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWlu
LgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2Jq
ZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmli
dXRlcyA9IDA7Ci0gICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6
Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFz
ZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVy
KHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRV
bmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVy
U2xvdChnZXR0ZXIpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBj
b25zdAotewotICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJl
c3VsdCk7Ci0KLSAgICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0
ZXIocmVzdWx0KS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERh
dGEpOwotICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBh
cnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJh
eUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0
ZXMpOwotICAgIHJldHVybiBCYXNlOjpnZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBp
dGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNl
Y29uZCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQotewotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlW
YWx1ZU1hcDsKLSAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXpl
KTsKLX0KLQotdm9pZCBKU0FycmF5OjpkZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxl
dGUgbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9p
ZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
LXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0g
ICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOwotICAgIH0KLQotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAg
ICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8g
bmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFy
ZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsK
LSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUo
MCksICZuZXdSYXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0
b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9y
YWdlKTsKLSAgICBtZW1jcHkobmV3U3RvcmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7
Ci0gICAgbmV3U3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFn
ZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9pbmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
U3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVl
KCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBkZXNjcmlwdG9yLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+
YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERl
c2NyaXB0b3IpICYgfkFjY2Vzc29yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCog
Z2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAg
ICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxz
ZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAg
Z2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3Qq
IHNldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAg
ICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVs
c2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAg
IHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVy
U2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBp
ZiAoZ2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxE
YXRhKCksIGdldHRlcik7Ci0gICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRy
eUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAg
IGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAg
ZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KG9sZERlc2NyaXB0b3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQot
Ym9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQotewotICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlm
ICghaW5TcGFyc2VNb2RlKCkpIHsKLSAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5n
IGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6
IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUg
bWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93
ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMg
d2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRl
IChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0
aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7
Ci0gICAgfQotCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1h
cDsKLSAgICBBU1NFUlQobWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBP
IHdpdGggcHJvcGVydHkgbmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBl
eHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTy4KLSAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5z
aWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRl
ZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgewotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAt
PnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5h
LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
aXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFt
ZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJh
YmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBh
cmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8v
IGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAv
LyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9y
IHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAg
Ly8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtb
Q29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAg
IC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBh
YnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAg
ICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVy
biB0cnVlLgotCi0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAg
ZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5OwotICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERl
c2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFn
ZS0+bV9sZW5ndGggPSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4K
LSAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3Vy
cyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29t
cGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5
RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJl
bnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSkgewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOwotICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJy
ZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAg
ICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVy
YWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAg
IC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0
aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJp
Y0Rlc2NyaXB0b3IoKSkgewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3Vs
dHMsIHRoZW4KLSAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNj
ZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAg
ICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBj
b252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAg
ICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhl
IGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAg
ICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQg
c2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAg
ICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNv
bnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBw
cm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUg
ZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJh
YmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBz
ZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1
bHQgdmFsdWVzLgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigp
ICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4g
RWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihE
ZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewot
ICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVz
YyBpcyB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUg
cHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8g
MTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBm
YWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFs
dWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQo
KSk7Ci0gICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVu
dCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8v
IDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFu
ZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAg
ICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9y
LnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUg
c2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAg
IC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2Vu
dCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4K
LSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3Jp
cHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
dGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmll
bGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVk
IGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFs
dWUgb2YgdGhlIGZpZWxkLgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVz
Y3JpcHRvciwgY3VycmVudCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0
cnVlOwotfQotCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhl
YywgYm9vbCB3cml0YWJsZSkKIHsKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3
cml0YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
IAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwog
ICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0TGVuZ3RoSXNSZWFkT25seSgpOwogfQpAQCAt
NjMzLDM1ICsxNjYsNyBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
CiAgICAgICAgIHJldHVybiBhcnJheS0+ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGlu
ZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIEpT
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotfQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2U7Ci0KLSAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAg
ICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYg
KHZhbHVlKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAgcmV0dXJuIG9iamVjdC0+SlNPYmplY3Q6
OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIsMTAgKzE3Nyw2IEBAIGJvb2wgSlNBcnJheTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCBzbG90KTsKLQogICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4NywyNiArMTg4LDYgQEAgYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAg
Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1f
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHRoaXNP
YmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAodmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCks
IDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3Bh
cnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQog
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAgLTcxNCwxMSArMTk1LDYg
QEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogdm9pZCBKU0FycmF5
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0Fy
cmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1
ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAg
ICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CkBAIC03MzMsMTk0
ICsyMDksOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAg
SlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewot
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHN0b3JlIHRv
IHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLQot
ICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vz
c2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBsZW5ndGggPSBp
ICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2
YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0K
LSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZh
bHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDJeMzItMSAtIHRoaXMgaXMgbm90IGFuIGFy
cmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFuZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBw
cm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
Rm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoLgot
ICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19
Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0g
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFs
dWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJl
bnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAg
IC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJl
ZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFT
U0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0
IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkg
dG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAt
IHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBh
bmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8s
IG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBh
IHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChl
eGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBs
ZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3Ro
IGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8
ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbGVu
Z3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0K
LQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdl
IHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8g
dXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUg
dG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1
ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwot
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5n
dGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJlcmVh
ZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVz
SW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVl
cyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9j
YXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhl
IHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3Rvcltp
XTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotfQot
Ci1ib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsK
LSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAg
IEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3Vy
cmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAg
ICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRl
cmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAg
QVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAg
ICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRy
eSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVj
dG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3Mh
IC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQs
IGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxs
b2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFy
c2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1h
cDsKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVu
Z3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgp
KQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUo
KSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0
aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4i
KTsKLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0g
bGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBj
aGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2ls
bCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2
ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1
bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAr
IG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBtYXAtPnB1
dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotCi0gICAgLy8gUmVy
ZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1
ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFs
dWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0g
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxs
b2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0
aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9y
W2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5z
aWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC05MjgsMzUgKzIxOSw2IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwot
ICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGlmIChpID4gTUFYX0FS
UkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0g
ICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwot
ICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsK
LSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewot
ICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29u
c3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpAQCAtOTY0LDEyNyArMjI2LDI2IEBAIHN0YXRpYyBp
bnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0g
KGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJ
WE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZl
cnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFy
cmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3Qg
Y2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJy
YXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7
Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xl
bmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1f
dmVjdG9yW2ldKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBrZXlzOwotICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAg
ICAgIAotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJp
YnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5
cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JR
U29ydCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBr
ZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBK
U0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAg
ICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQot
ICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3Ro
ID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRM
ZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0
TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVsc2Ugewot
ICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGlu
Y3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoK
LSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGgg
KiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBv
dmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNp
cmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6
ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVy
biBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQot
Ym9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0
aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQg
ZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRv
IHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRo
ZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgp
OwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdM
ZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIElu
IHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2lu
ZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NC
YXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgm
bmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVj
dG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFn
ZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRp
Y19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7
Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5v
dCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBv
dmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1f
aW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5n
dGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29t
IGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9
IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2Ug
PSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdl
U2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4
QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFT
U0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsK
LQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFz
ID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFn
ZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZSht
X3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8g
RnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0
aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGNvdW50KQogewotICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlz
IG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNTRVJUKGNvdW50ID4gbV9pbmRleEJpYXMpOworICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIC8vIElm
IG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAg
QVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgog
ICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNzOgpAQCAtMTA5Myw4ICsyNTQsOCBAQCBib29sIEpT
QXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gICogY3VycmVudENhcGFj
aXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBh
bnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBz
aG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJl
ZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3Ro
OwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxl
bmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5z
aWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVu
Z3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9z
c2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTExMDIsMjcgKzI2
MywxMiBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5z
aWduZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGggPSB1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7CiAg
ICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpOwogICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdp
bGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1f
dmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotICAgIHVu
c2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IG1fdmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7Cisg
ICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJpYXMpOworICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBh
Y2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRlc2lyZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxvdywg
ZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgogICAgIHVuc2ln
bmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILCBtYXgo
QkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkgPDwgMSk7CiAKICAgICAvLyBT
dGVwIDI6Ci0gICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBh
IG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBv
bi4KLQotICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7Ci0gICAgdW5zaWduZWQgbmV3U3RvcmFn
ZUNhcGFjaXR5OwotICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmlj
aWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0
LgotICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgewot
ICAgICAgICBuZXdBbGxvY0Jhc2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgbmV3
U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShkZXNp
cmVkQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwotICAgIH0KLQot
ICAgIC8vIFN0ZXAgMzoKICAgICAvLyBXb3JrIG91dCB3aGVyZSB3ZSdyZSBnb2luZyB0byBtb3Zl
IHRoaW5ncyB0by4KIAogICAgIC8vIERldGVybWluZSBob3cgbXVjaCBvZiB0aGUgdmVjdG9yIHRv
IHVzZSBhcyBwcmUtY2FwYWNpdHksIGFuZCBob3cgbXVjaCBhcyBwb3N0LWNhcGFjaXR5LgpAQCAt
MTEzNiwyNCArMjgyLDQwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNH
bG8KICAgICAgICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2FtZSBh
bGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgogICAgICAgICBB
U1NFUlQobmV3QWxsb2NCYXNlICE9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlIHx8IHBvc3RDYXBhY2l0
eSA8IG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQg
ZGVzaXJlZFZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5
OworICAgIHVuc2lnbmVkIGRlc2lyZWRJbmRleEJpYXM7CiAKLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OwotICAgIG1faW5kZXhCaWFzID0g
bmV3U3RvcmFnZUNhcGFjaXR5IC0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOworICAgIC8vIFN0
ZXAgMzoKKyAgICAvLyBXZSdyZSBlaXRoZXIgZ29pbmcgdG8gY2hvb3NlIHRvIGFsbG9jYXRlIGEg
bmV3IEFycmF5U3RvcmFnZSwgb3Igd2UncmUgZ29pbmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9u
LgorCisgICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdl
Q2FwYWNpdHk7CisgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNp
ZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQu
CisgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBhY2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7Cisg
ICAgICAgIC8vIEZJWE1FIGRvIHRoaW5ncworICAgICAgICBuZXdBbGxvY0Jhc2UgPSBidXR0ZXJm
bHktPmJhc2Uoc3RvcmFnZS0+bV9pbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgICAg
ICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CisgICAgICAgIGRlc2lyZWRJ
bmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBkZXNpcmVkVmVjdG9yTGVuZ3RoOworICAg
IH0gZWxzZSB7CisgICAgICAgIGRlc2lyZWRJbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkg
LSBkZXNpcmVkVmVjdG9yTGVuZ3RoOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoZGVzaXJlZEluZGV4QmlhcywgcHJv
cGVydHlDYXBhY2l0eSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRWZWN0b3JMZW5ndGgp
KSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG5l
d1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKKyAgICB9CisKKyAgICBtX2J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBkZXNpcmVkSW5kZXhCaWFz
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3Ro
KGRlc2lyZWRWZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1faW5kZXhCaWFzID0gZGVz
aXJlZEluZGV4QmlhczsKIAogICAgIC8vIFN0ZXAgNDoKICAgICAvLyBDb3B5IGFycmF5IGRhdGEg
LyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5ICYg
ZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCiAKICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1vdmVk
IHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBzaGlm
dGluZyBkYXRhCiAgICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhCaWFz
KS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAgICBt
ZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgbWVt
bW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFyZSB3
ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNlICE9
IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9j
YXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IG5ld0FsbG9jQmFzZTsKLSAgICB9CisgICAgbWVtbW92ZShuZXdTdG9yYWdlLT5tX3ZlY3Rv
ciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBvdXRPZkxpbmVTaXplLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3V0T2ZMaW5lU2l6ZSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTYyLDEzICszMjQsMTMgQEAgYm9vbCBKU0FycmF5Ojpz
ZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1
cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5
IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5n
ICdpZicuCi0gICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBtX3NwYXJzZVZhbHVlTWFw
KTsKKyAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KTsKIAotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
KSB7CisgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKSB7CiAgICAgICAgIC8vIEZhaWwgaWYgdGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCiAg
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7CkBAIC0xMjIwLDcgKzM4Miw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gbmV3TGVuZ3RoOworICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTIyOSw0NCArMzkxLDU2
IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIEpTVmFsdWUgSlNB
cnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwogICAgIAotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAg
IGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBzd2l0Y2ggKG1f
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFs
dWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVl
U2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1l
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywg
aW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
KyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2Fs
bCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3Ro
IiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAg
ICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJu
IGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwg
d2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1
ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIAorICAgIHN3aXRjaCAo
bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6
IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgMCwgdmFsdWUsIHRydWUsIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZXhlYy0+Z2xv
YmFsRGF0YSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCi0gICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3
aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAobGVu
Z3RoIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3Ro
XS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoICsgMTsKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5
cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5n
dGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJy
YXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFu
Z2UgZXJyb3IuCisgICAgICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5sZW5ndGgoKSA9PSAweEZG
RkZGRkZGdSkpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywg
ZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIC8vIFBl
ciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KKyAgICAgICAgICAg
IGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNh
bWUgYXMgcHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFn
ZSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBicmVhazsKICAgICB9Ci0KLSAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAy
XjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAg
IGlmIChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAg
ICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0
aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYg
MTUuNC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpOwotICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIC8vIEhhbmRs
ZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKIH0KIAogYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIGNvdW50KQogewogICAgIEFTU0VSVChjb3VudCA+IDApOwogICAgIAotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBl
bnN1cmVBcnJheVN0b3JhZ2UoKTsKICAgICAKLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgo
KTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3
aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0
aG0gaW4gQXJyYXlQcm90b3R5cGUuCkBAIC0xMzE4LDE4ICs1MDYsMTggQEAgYm9vbCBKU0FycmF5
OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVucwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
ICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoIC09IGNvdW50OworICAgIHN0b3JhZ2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBj
b3VudCk7CiAgICAgCi0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0g
bWluKG1fdmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgp
IHsKKyAgICAgICAgY291bnQgPSBtaW4odmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwog
ICAgICAgICAKLSAgICAgICAgbV92ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rv
ckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rv
ckxlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAg
ICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Rv
cmFnZSkgKyBjb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICAg
ICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAg
ICAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
bmV3QmFzZVN0b3JhZ2UpOwotCisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAg
ICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBjb3VudCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgbV9pbmRleEJpYXMgKz0gY291bnQ7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMzM5LDU5ICs1MjcsMjkgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENv
dW50KEV4ZWNTdGF0ZSosIHVucwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB1bnNoaWZ0IGNhbiBi
ZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCiBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvdW50KQogewotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5t
X2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndp
c2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRo
bSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKGxlbmd0aCAhPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9kZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9pbmRleEJpYXMgPj0gY291bnQpIHsKLSAgICAg
ICAgbV9pbmRleEJpYXMgLT0gY291bnQ7Ci0gICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBjb3VudCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pOwotICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdl
LCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLSAgICAgICAgbV92ZWN0b3JMZW5n
dGggKz0gY291bnQ7CisgICAgaWYgKHN0b3JhZ2UtPm1faW5kZXhCaWFzID49IGNvdW50KSB7Cisg
ICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlLT51bnNoaWZ0KHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50
OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdG
bGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9zdG9y
YWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0aGlzT2JqZWN0LT5s
ZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NC
YXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+bV92ZWN0b3JMZW5n
dGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVjdG9yLT5zbG90KCks
IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAoYmFzZVN0b3JhZ2Ug
IT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAgICAgICAgICAgdGhp
c09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNP
YmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKQot
ICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0YXRpYyBpbnQgY29t
cGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAg
IGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsK
QEAgLTE0MTAsMTEwICs1NjgsMTM1IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0
YXRlKiBleGUKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKIAotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0g
ICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTs7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+
bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAg
ICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNo
IGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8g
YWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBu
byB1c2VyIHZpc2libGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUg
b3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENv
bnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAo
IWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBh
cmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UK
LSAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0
aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcg
dGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hl
Y2spOwogfQogCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBp
ZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2Ny
aXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2Ug
dXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lk
ZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRo
b3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRl
cywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1
c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVy
d2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlv
biBpbmNvbnNpc3RlbnQuCi0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0g
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KICAgICAKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7Ci0KLSAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAg
ICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgdmFsdWVzW2ldLmZp
cnN0ID0gdmFsdWU7Ci0gICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24g
c3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlz
ZXMgYW4gZXhjZXB0aW9uLgotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVl
c1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBt
aWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0g
ICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChz
dG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3Ry
aW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0
IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92
ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVp
cmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBw
cm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0
cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2Ug
Y2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5j
b25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFs
dWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJl
Z2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9v
bCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZp
cnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMg
dG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAg
IC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkr
KykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3Ry
aW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3Jp
dGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRo
ZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdF
U09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2
YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNv
bXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rp
b24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQt
MjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93
c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24g
aXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0
LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJv
d3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4o
KSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmlu
Z1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlv
biBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAg
IC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBh
Y3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1f
bGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAg
ICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAg
CisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUg
bGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAg
ICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChz
dG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAg
ICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBA
IC0xNTk2LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNv
bXBhcmUgCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBh
cmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkK
IHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhl
IGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0
cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0
byBubyBnb29kCi0gICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VS
VChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9z
dG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3Vu
dCA9IHVzZWRWZWN0b3JMZW5ndGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVN
YXAtPnNpemUoKSA6IDApOwotCi0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVl
OyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2V4ZWMgPSBleGVjOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0
aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERh
dGEgPSAmY2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVD
b3VudCk7Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywg
anNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUg
YXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgIC8vIHJp
Z2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUu
Ci0KLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmlu
ZWQgPSAwOwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2lu
ZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhl
ciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5l
ZCk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAg
ICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0
aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBp
cyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMg
cGFzc2VkLgorICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICAgICAgaWYg
KHN0b3JhZ2UtPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2Vk
VmVjdG9yTGVuZ3RoICsgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwID8gc3RvcmFnZS0+bV9zcGFyc2VN
YXAtPnNpemUoKSA6IDApOworICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFj
dG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAy
XjMxIGl0ZW1zCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9u
OworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBl
OworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0
YTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKKyAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxs
KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxk
IGJlIG1vZGlmaWVkCisgICAgICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdl
J3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBu
dW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAg
ICAgCisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3Npbmcg
dmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIg
b25lcyBpbnRvIHRoZSB0cmVlLgorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0
cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSB2OworICAgICAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5n
dGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgbmV3VXNlZFZlY3Rvckxl
bmd0aCArPSBtYXAtPnNpemUoKTsKLSAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBt
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJs
ZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJp
ZXMuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBt
YXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0
b3JMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxl
IHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmll
cy4KKyAgICAgICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKTsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAg
ICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAg
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
OwotICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251
bURlZmluZWQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTog
SWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwg
dGhlIGZvbGxvd2luZyBtaWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBp
bmNvcnJlY3RseS4KKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGlu
dG8gbV9zdG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFz
dCh0cmVlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytp
KSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAg
KytpdGVyOwogICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAg
ICAgICAKKyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAg
ICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9y
IGFyZSB6ZXJvZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0KLSAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVt
RGVmaW5lZCk7Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQotICAgIC8v
IG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgotCi0gICAgLy8gQ29weSB0aGUgdmFs
dWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZv
ckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgIGl0ZXIuc3RhcnRfaXRlcl9s
ZWFzdCh0cmVlKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewot
ICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQotCi0gICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAg
ICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgLy8gRW5zdXJl
IHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIG1f
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0Fy
cmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cmdzKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5z
aWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7
Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlm
ICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsK
KyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9y
RW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytp
KSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Cisg
ICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBh
cmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICg7
IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0
KGV4ZWMsIGkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgZm9yICg7IGkg
PCBzdG9yYWdlLT5tX2xlbmd0aDsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywg
aSkpOwogfQogCiB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxl
bmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci0gICAg
dW5zaWduZWQgaSA9IDA7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0
b3JhZ2UtPm1fdmVjdG9yOwotICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIG1f
dmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5n
ZXQoKSk7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9y
OworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAg
IGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+
c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZv
ciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwg
Z2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmco
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0NSwxMDMgKzk2Myw3MSBAQCB1bnNpZ25l
ZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAgICAgQVNTRVJUKCFpblNwYXJzZU1v
ZGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3Ro
LCBtX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1
bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2LmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpT
VmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewot
ICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVu
ZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
dXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICBmb3Ig
KDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0
aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVu
Z3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1f
dmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxl
IHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmll
cyAtIGlmIG5vdCwKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVy
LgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRW
ZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICBz
dG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikg
eworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
ICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsr
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
LQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotCi0gICAgY2hlY2tDb25zaXN0
ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICByZXR1cm4gbnVtRGVmaW5lZDsKLX0K
LQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLXZvaWQgSlNBcnJheTo6Y2hlY2tDb25z
aXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQotewotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7Ci0KLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgaWYgKHR5cGUgPT0g
U29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgIEFTU0VSVCghbV9zcGFyc2VWYWx1ZU1hcCk7
Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUg
dmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgewotICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVj
dG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgp
OyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAg
ICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgQVNT
RVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+
c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9z
c2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBl
bnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24g
YnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxE
YXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9j
YXRlU3BhcnNlTWFwKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIAor
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0
aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hl
Y2spOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAgICAgfQotICAgIEFT
U0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsK
LSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bV9sZW5ndGgpOwotCi0g
ICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVl
TWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bV9s
ZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAgICAgICAg
QVNTRVJUKGl0LT5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNv
bnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2Fz
IGRlYWxsb2NhdGVkLgotICAgICAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIAotI2VuZGlmCiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2
aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIEpTQXJyYXlfaAogI2Rl
ZmluZSBKU0FycmF5X2gKIAorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRl
ICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogI2Rl
ZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCkBAIC0zMCwxMzEgKzMyLDIxIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJy
aWVyPFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFz
ZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9Ci0KLSAg
ICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJheSopIGNvbnN0OwotICAgICAgICB2
b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlE
ZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNv
bnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgfTsKLQotICAgIGNsYXNz
IFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3Qs
IFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOwotCi0gICAgICAgIGVudW0gRmxh
Z3MgewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgICAgIFNwYXJzZU1vZGUgPSAx
LAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCi0gICAgICAgIH07Ci0KLSAgICBw
dWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAg
dHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBl
ZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCi0gICAgICAgICAgICAsIG1fcmVw
b3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICBib29sIHNwYXJzZU1vZGUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVh
ZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpT
QXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJv
b2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVk
KTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5k
KGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlk
IChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRl
cmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNp
Z25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMg
ZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Ig
bm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlu
cyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAv
LyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAg
ICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0
cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5
IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3Ry
dWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJy
YXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0
b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkg
YmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRv
IHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBw
b2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0g
bV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0
aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAg
dm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5
IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9z
aXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJw
b3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAg
dWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50
cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBt
X3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7
CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25G
aW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhC
aWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJz
ZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAg
ICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJm
bHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlv
blVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0g
ICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
LQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0
aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlz
IHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAt
MTY3LDI1ICs1OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRv
IHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJv
dG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFy
ZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkg
d2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxs
IHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAg
ICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0b3Jh
Z2UtPm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IGdldEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJheXMs
IGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5LgogICAgICAgICBib29s
IHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZh
bHNlKTsKIApAQCAtMTk5LDY0ICs3Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVu
c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBj
YW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9z
dG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVk
IGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVj
dG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAo
IXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
eC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNl
dEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAg
ICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAg
ICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3Ig
dG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5
IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAg
ICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xl
bmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFs
aXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhp
bmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5n
dGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRp
YWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9z
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VN
b2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VN
b2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSos
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4
ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKQEAgLTI2NSwzMyArODUs
MjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RvcmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rv
ckxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9p
ZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNp
emUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxl
KCkKICAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcDsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5
U3RvcmFnZU9yWmVybygpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CiAKQEAgLTMwMSw0MCArMTA5LDUwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0
YSYpOwogICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAg
ICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsK
LSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBuZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lD
aGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92
ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNW
YWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9y
YWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFs
dWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJh
eSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJp
YXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMp
OyB9CiAgICAgfTsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOwotICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCBiYXNlSW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVD
VE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAg
ICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAg
cmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5
KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIGFy
cmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgaW5pdGlhbExl
bmd0aCk7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVD
VE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAor
ICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDAp
OworICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJG
b3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdl
LT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBpbml0aWFsTGVuZ3RoOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0
b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBK
U0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOwor
ICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVy
biBhcnJheTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUpOwpAQCAtMzUz
LDMwICsxNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXko
SlNDZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19p
bmZvOyB9CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyByZXR1cm4gdi5p
c0NlbGwoKSAmJiBpc0pTQXJyYXkodi5hc0NlbGwoKSk7IH0KIAotLy8gVGhlIGRlZmluaXRpb24g
b2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRp
b24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUg
Y2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMg
bWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3Rv
cmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBi
ZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBi
cmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+Lgot
I2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFH
RV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotICAgIGlubGlu
ZSBzaXplX3QgSlNBcnJheTo6c3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKTsKLSAgICAKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZp
bmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpCi0gICAgICAgIC8vIC0gYXMgYXNzZXJ0ZWQgYWJvdmUgLSB0aGUgZm9sbG93aW5n
IGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4KLSAgICAgICAgc2l6ZV90IHNpemUgPSAoc2l6
ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKyAodmVj
dG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotICAgICAgICAvLyBB
c3NlcnRpb24gdG8gZGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMgY2FsY3VsYXRp
b24gKHNob3VsZCBub3QgYmUgcG9zc2libGUsIHByb3ZpZGVkIHRoYXQKLSAgICAgICAgLy8gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgICAgIEFT
U0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gdmVjdG9yTGVu
Z3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkpKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCiAg
ICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKICAgICAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxMjM5NzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBKU0NlbGw6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKTsKIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAg
ICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBw
dWJsaWM6CkBAIC0xNDAsNiArMTQwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2J1dHRlcmZseSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5OworICAgICAgICB9CiAKICNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVj
dHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KQEAgLTE1OCw2
ICsxNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRp
b25zIG9mIG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQg
aW4gdGhlaXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVl
KGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAg
ICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhh
c0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5
cGVQcm9wZXJ0eSk7CkBAIC0xNzAsNiArMTgxLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogICAgICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OwogICAgIH07CiAKICAgICBpbmxpbmUgSlND
ZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxOCw3ICszMTgsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVu
Y3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzMw
LDcgKzMzMCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwog
ICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1
bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEy
Mzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsK
ICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0
aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhp
cworLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUg
bmV4dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBj
b25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVk
IGxhc3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0Nl
bGwqIGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUo
KTsKQEAgLTg2LDI5ICs5MSw3MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0
eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0
T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3Jh
Z2UsIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBz
aXplX3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIEFTU0VSVChi
dXR0ZXJmbHkpOworICAgIEFTU0VSVChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmds
ZXRvbigpKTsKICAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwogICAgIAotICAgIHNpemVfdCBjYXBh
Y2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBh
Y2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9y
YWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVz
KSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3Rv
cmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1
cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9
IHN0b3JhZ2UgLSAxOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5ID0g
aGVhZGVyLnByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzID0gaGVhZGVyLmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZV90IGNh
cGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAgICBwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlm
ICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAg
YnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJ
bkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAorICAg
ICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0
b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Cisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+cHJvcGVydHlT
dG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50
LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdl
dCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRhcmdl
dCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIG1f
b3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tl
ZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBz
dG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsg
YW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKGhlYWRl
ci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBuZXdTdG9yYWdl
LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb20oKnN0b3JhZ2UtPmFycmF5U3RvcmFnZSgp
KTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9IG5l
d1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3U3RvcmFnZS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0
V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXApCisg
ICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VT
aXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBp
ZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChoZWFkZXIudHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE2OCw5IEBAIHZvaWQgSlNPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAg
dGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgp
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwor
ICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAg
ICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsK
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAg
LTE0Miw5ICsxODgsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
Ci0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9y
YWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5ICE9IEJ1dHRl
cmZseTo6ZW1wdHlTaW5nbGV0b24oKSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJm
bHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsK
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0
b3JhZ2VTaXplKTsKQEAgLTE2MSwxMCArMjA3LDQ4IEBAIFVTdHJpbmcgSlNPYmplY3Q6OmNsYXNz
TmFtZShjb25zdCBKU09iamUKICAgICByZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29s
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBO
Qi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0
b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8g
b3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAg
ICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYg
KGkgPD0gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFs
dWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1h
cC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYg
KzI1OCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAg
QVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhl
ZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0
ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90
eXBlOwpAQCAtMjM1LDkgKzMyNiwxNDIgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmpl
Y3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShp
ID49IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJh
eToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251
bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7
CisgICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0
LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwor
fQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9k
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVj
dG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUg
bWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0
dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYg
KHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisg
ICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEs
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlw
ZSBvbGRUeXBlID0gbV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyLT50eXBlKCk7CisgICAgQVNT
RVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNI
KCk7CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpLnNldFR5cGUob2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAg
QXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
IEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+c2V0
VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7
CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICBy
ZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAo
bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAw
KTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisgICAgICAg
IHJldHVybiBzdG9yYWdlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTMw
NCw2ICs1MjgsMTAgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAog
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3Qt
PnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0
aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU2MCw0NSBAQCBib29sIEpT
T2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0
X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAot
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkp
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsK
LSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAg
ICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVT
bG90KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAg
ICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhp
c09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzI4
LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVh
cnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcg
UHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisg
ICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVk
IGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVh
bnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0
Y2ggKG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAgICBj
YXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4g
a2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwg
IShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAg
IGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwg
a2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lk
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVj
dC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVz
RnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQpAQCAtNTE1LDggKzgyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEm
IGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXko
dGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAg
ICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lv
bnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg4
MCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJv
cGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
bG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBp
ZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdl
dCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNH
ZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAg
ICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0
Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRp
b24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0
aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
c2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywy
NiArOTEwLDUyNCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAg
ICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdy
b3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikK
IHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlz
RGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3Jp
cHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIEl0J3MgaW1w
b3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UK
LSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICBp
ZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisg
ICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBl
bHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAg
ICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVj
dCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQor
ICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAg
ZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAg
ICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0
ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAg
IGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vz
c29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVu
dHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAg
ICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRp
bmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAg
ICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45
Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRo
cm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAg
IGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdl
J3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRy
aWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAg
IC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRy
aWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAv
LyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZh
bHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBp
ZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJy
YXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8v
IDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50
ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBh
bmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVu
dCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAg
ICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0
b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAg
ICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwg
W1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAg
ICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1
dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Cisg
ICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgor
ICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBE
ZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YK
KyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxl
XV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5
CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2Yg
RGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVy
dHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0
LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsK
KyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51
bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAg
ICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRl
ZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAg
ICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4g
RGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4g
Y3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEy
KS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQo
Y3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1
YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJ
ZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3Qs
IGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAg
aWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0Vu
dW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVd
XSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2Yg
ZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAm
JiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRy
dWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVz
Y3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZl
IGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2Ny
aXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAg
Ly8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQg
aXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQp
IGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBm
cm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVy
dHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0
eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBh
dHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0
bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5
LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBh
biBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQ
cmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmli
dXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhl
aXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNj
cmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAg
IC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNj
cmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAg
ICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJs
ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVs
ZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFi
bGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUg
W1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAg
ICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVl
XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYg
IXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUu
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVy
UHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRv
cihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBz
bywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhl
bgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHBy
ZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFs
c2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRl
c2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBp
cyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAm
JiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJp
YnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5n
bHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRv
IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywg
ZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVl
LgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0
YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3ko
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxs
b2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAg
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVh
cC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7Cisg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYg
KCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNl
TWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9m
TGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFn
ZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydz
IHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5l
ZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAg
bmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSAr
IG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qg
Y3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAg
ICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBl
bnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAg
ICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVu
Z3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisg
ICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVu
IHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNl
VmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nl
c3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0
ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0g
YWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxs
b2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1
dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAg
ICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0
YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2li
bGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7
CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdl
IGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQg
dG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNl
IG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwg
b3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAt
PnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVl
c0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxl
bmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2Ug
YWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgor
ICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9t
IHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAo
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUg
dmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ld
OworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8v
IGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBj
dXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAgc3dpdGNoIChidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gY3JlYXRlQXJyYXlTdG9yYWdlKGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoaSArIDEpKTsK
KyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5
U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBt
X3ZlY3Rvckxlbmd0aCk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAg
ICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEg
c3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBh
cnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5
IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVu
c2libGUoKSk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUg
LSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0
IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkg
dG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAt
IHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBh
bmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0g
YWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxs
b2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4g
bWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9
CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAg
ICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxl
LgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVy
IGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUg
bWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rv
ci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAg
ICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5l
d1Byb3BlcnR5U3RvcmFnZTsKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4
IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0g
TUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5OworICAgIHN3aXRjaCAoYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkp
IHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHsKKyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShn
bG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGkg
KyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVk
IG1heEluaXRMZW5ndGggPSBtaW4oY3VycmVudExlbmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAo
ZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IG1heEluaXRMZW5ndGg7CisgICAgZWxzZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQorICAgICAgICBp
bmNyZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAg
IC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAg
IC8vIG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5l
d0xlbmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGlu
dGVybmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3Ro
ICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKwor
ICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0
QXJyYXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisg
ICAgcmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
OworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5n
dGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVu
Z3RoKGdldEFycmF5TGVuZ3RoKCksIGRlc2lnbmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVj
dDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGlu
IGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1v
dmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9y
LiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBp
dCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3Jh
Z2UtPm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAg
IHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgp
OworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNl
IGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMp
KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0
ZXJmbHk7CisgICAgICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFJlbW92ZSBzb21l
LCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQg
dG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMg
PSBtaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0
b3JMZW5ndGgpOworICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2lu
ZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgorICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAg
Z2xvYmFsRGF0YSwKKyAgICAgICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAgIG5l
d0luZGV4QmlhcywgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAg
IGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9i
dXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFz
dG9yYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBl
ID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlm
ICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZh
bHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBk
ZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFs
dWVNYXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFT
U0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgg
PD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8v
IExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAg
fQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJm
bHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9u
IG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQorICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRo
ZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAog
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDM1LDQ2IEBAIGJvb2wgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsK
ICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVj
dC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+
Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhp
c09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0g
bWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU0NSwyNiBAQCBwcml2YXRlOgogICAgIEpT
R2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dF
eGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRo
ZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJl
bnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3
aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNo
YW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmln
dXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVk
LiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBE
ZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2Ug
aGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBj
dXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5s
ZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0
ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAg
IGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2Jq
ZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwog
ICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAo
ZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTU5MCw4IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBp
cyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkK
ICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYg
KCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVy
biBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAzLDgg
QEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChj
dXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9y
KGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8v
IENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0
eQpAQCAtNzg0LDggKzE2MjUsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRl
c2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMs
IG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4g
ZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjQzLDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nl
c3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAg
aWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjUz
LDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAg
Z2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdl
dHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRv
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWdu
ZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIs
IGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0
aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVu
dHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAg
IC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNj
LltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1
bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBh
c3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMg
Y2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUu
CisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBp
bmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAg
ICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQdXRQ
cm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3RvcmFn
ZUJhcnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtOTYsNiArOTUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7
CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAsOCArMTIxLDE3NSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUg
cHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlz
IG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgor
ICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVz
IHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgor
ICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7
CisgICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
cltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNp
Z25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlj
a2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAg
ICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBp
bml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIEFT
U0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2Vx
dWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNl
dCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAorICAgICAgICAgICAg
ICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBu
dW1iZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9p
bml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1
bnNpZ25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXpl
ZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bGVuZ3Ro
KCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUg
aW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsK
KyAgICAgICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBm
YWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJz
ZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZWZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwog
CiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9u
IG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hh
aW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMxNSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAt
MjAzLDggKzM3MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxp
bmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJv
cGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGlu
ZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3Jh
Z2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3Qg
QnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAg
ICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFBy
b3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAg
ICAgICB7CkBAIC0yMjcsNyArMzk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBp
ZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3Rv
cmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxp
bmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJl
c3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQxLDEyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1
cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0
aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJl
Kik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAg
ICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0
dXJlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVT
dG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0
cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdl
SWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCog
YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVu
RGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxE
YXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NjAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKIAog
ICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBA
IC0zMTgsMTQgKzQ4NCw2NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0
YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAg
ICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmlu
YWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVy
Zmx5KiA9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAgICAgIAogICAgICAgICB2
b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7
CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVy
aXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9m
TGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0
eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlm
IHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5
CisgICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpIHwgSGFzQXJyYXlTdG9y
YWdlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBw
cmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBv
YmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhh
cyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8g
cGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8g
b2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4n
dCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5z
dXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7Cisg
ICAgICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9u
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkBAIC0zMzgsMTYgKzU1NCwzOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAK
ICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5h
bChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1
dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0
eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3Qm
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmlu
ZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAg
ICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAgICAg
ICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAgICAg
dm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5Kiwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAgICBi
b29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lk
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKik7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwg
dW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxl
bmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAgIGVu
dW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVj
dG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3ko
Q29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNl
CisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgpAQCAtMzc0LDggKzYxMyw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0
IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQor
ICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjplbXB0eVNpbmdsZXRvbigpKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5MywxOCAr
NzMyLDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICBy
ZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwog
fQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYg
KCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3Rv
cmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0Miw5ICs3NzUsOCBAQCBp
bmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2Jq
ZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNDZWxs
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxE
YXRhLCB0aGlzLCAwKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKIHsKIH0KIApAQCAt
NTkyLDE1ICs4MjQsMTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3Qo
RQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24g
PSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsK
KyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQ
cm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNldChv
ZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVu
Y3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODYs
NiArOTE5LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8
fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJv
cGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAg
aWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50QXR0cmlidXRlczsKQEAgLTk0NSwxMyArMTE3OSwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNl
dCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRP
ZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldElu
SW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICBy
ZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBv
ZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3Bl
cnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU5LDcgKzExOTMsNyBAQCBpbmxpbmUgaW50
IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZl
VG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZz
ZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzOTcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0
KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3lt
Ym9sVGFibGUoKS5lbmQoKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
ZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHlu
YW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJl
dmlzaW9uIDEyMzk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90
IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7
CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3Rv
cmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2Vf
aAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjM5NzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsMTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
CiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cisg
ICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyMzk3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VB
cnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93
bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFy
c2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNv
bnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFs
dWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
K307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVt
IEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisg
ICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0
OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
CisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19j
YXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5n
dGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNS
ZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsK
KyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNS
ZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3Qo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRv
ciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlz
IHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0
KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBt
YXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAg
IC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgor
ICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVk
Q2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFy
cmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
Ki8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZh
bHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJh
eSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21h
cC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsK
KyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNp
dHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBh
Y2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmlu
ZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJ
biB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUg
YXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRo
aW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0
Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1
ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dl
dHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNj
ZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhl
Yywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5l
IGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBz
YXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3Bh
cnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcg
cHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBp
cyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAg
ICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0
aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMg
PSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQ
cm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6Omdl
dCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRl
clNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1
ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3Qo
Z2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFy
c2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0
Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0
KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihy
ZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7
CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5
LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50
cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7
CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZh
bHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJh
dG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25k
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5l
IFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdl
QmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsK
LSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERh
dGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJv
cGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChz
dG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERh
dGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAg
IG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0
b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3Iq
KCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQo
KSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9y
YWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTIzOTcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw5
ICs1ODMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCiAgICAgICAgIDogbV9jbGFzc0luZm8oc3RydWN0dXJlLT5jbGFzc0luZm8oKSkKICAgICAg
ICAgLCBtX3N0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUpCisgICAgICAgICwg
bV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160268</attachid>
            <date>2012-08-23 15:43:49 -0700</date>
            <delta_ts>2012-08-23 16:57:04 -0700</delta_ts>
            <desc>some rebasing</desc>
            <filename>butterflies_patch_14.diff</filename>
            <type>text/plain</type>
            <size>255655</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wOC0yMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSmF2
YVNjcmlwdENvcmUgYnVpbGQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgY2xhbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTks
NiArMTI5OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25leHRfcG5hbWUoSW5zdHJ1Y3Rpb24KICAg
ICBsb2FkUHRyKHBheWxvYWRGb3IoYmFzZSksIHJlZ1QwKTsKIAogICAgIC8vIFRlc3QgYmFzZSdz
IHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBjZWxsSGFzUHJvcGVydHkuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlw
ZSgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHJlZ1QyKTsKICAgICBjYWxsSGFzUHJvcGVydHkuYXBwZW5kKGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDIsIEFkZHJlc3MoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKSk7CiAKQEAgLTEzMTAsNiAr
MTMxMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX25leHRfcG5hbWUoSW5zdHJ1Y3Rpb24KICAgICBM
YWJlbCBjaGVja1Byb3RvdHlwZSh0aGlzKTsKICAgICBjYWxsSGFzUHJvcGVydHkuYXBwZW5kKGJy
YW5jaDMyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TnVsbFRhZykpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVy
ZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDEpOworICAgIGNlbGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJh
bmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDEsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5n
dGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNhbGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMykpKTsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHNpemVvZihTdHJ1Y3R1cmUqKSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDYg
Kzk1NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25leHRfcG5hbWUoSW5zdHJ1Y3Rpb24KICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKIAogICAgIC8vIFRlc3QgYmFzZSdz
IHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBjZWxsSGFzUHJvcGVydHkuYXBwZW5kKGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlw
ZSgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHJlZ1QyKTsKICAgICBjYWxsSGFzUHJvcGVydHkuYXBwZW5kKGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDIsIEFkZHJlc3MoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKSk7CiAKQEAgLTk2Niw2ICs5
NjgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAgICAgTGFi
ZWwgY2hlY2tQcm90b3R5cGUodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNhbGxIYXNQcm9wZXJ0eS5h
cHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMikpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBjZWxsSGFzUHJv
cGVydHkuYXBwZW5kKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKHJlZ1QxLCBCdXR0ZXJm
bHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjYWxsSGFzUHJvcGVy
dHkuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMpKSk7CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoU3RydWN0dXJlKikpLCByZWdUMyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2
NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0
TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOwogICAgIAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVj
dHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVz
cyhyZWdUMCwgQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
T0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJl
KSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0ZvcihpKSwgcmVnVDMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEy
NjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7CiAKICAgICAvLyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFk
ZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMjY0ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtNzgyLDcgKzc4Miw3IEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXRLbm93bk4KICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlP
ZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3Ag
cHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKICAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVT
dG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9w
ZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5
QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2
YWx1ZSkKQEAgLTc5Miw5ICs3OTIsOSBAQCBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0KHByb3BlCiAgICAgc3hpMnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRB
c0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6
Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVj
dEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9i
amVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1
ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5k
ZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZh
bHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTE2NSw2ICsx
MTY1LDggQEAgX2xsaW50X29wX2dldF9ieV9wbmFtZToKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlQ2VsbCh0MiwgdDAsIC5vcEdldEJ5UG5hbWVTbG93KQogICAgIGFzc2VydE5vdENvbnN0YW50
KHQzKQogICAgIGxvYWRwIFtjZnIsIHQzLCA4XSwgdDEKKyAgICBsb2FkcCBKU0NlbGw6Om1fYnV0
dGVyZmx5W3QwXSwgdDIKKyAgICBidGlueiAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fbGVuZ3RoQW5kVHlwZVt0Ml0sIC5vcEdldEJ5UG5hbWVTbG93CiAgICAgbG9h
ZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0MF0sIHQyCiAgICAgYnBuZXEgdDIsIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6Om1fY2FjaGVkU3RydWN0dXJlW3QxXSwgLm9wR2V0QnlQbmFtZVNsb3cKICAg
ICBsb2FkaXMgNDhbUEIsIFBDLCA4XSwgdDMKQEAgLTE1MjQsNiArMTUyNiw4IEBAIF9sbGludF9v
cF9uZXh0X3BuYW1lOgogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MwogICAgIGFzc2VydE5v
dENvbnN0YW50KHQzKQogICAgIGxvYWRwIFtjZnIsIHQzLCA4XSwgdDMKKyAgICBsb2FkcCBKU0Nl
bGw6Om1fYnV0dGVyZmx5W3QzXSwgdDEKKyAgICBidGlueiAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fbGVuZ3RoQW5kVHlwZVt0MV0sIC5vcE5leHRQbmFtZVNsb3cK
ICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QzXSwgdDEKICAgICBicG5lcSB0MSwgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjo6bV9jYWNoZWRTdHJ1Y3R1cmVbdDJdLCAub3BOZXh0UG5hbWVT
bG93CiAgICAgbG9hZHAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bV9jYWNoZWRQcm90b3R5cGVD
aGFpblt0Ml0sIHQwCkBAIC0xNTMyLDYgKzE1MzYsOCBAQCBfbGxpbnRfb3BfbmV4dF9wbmFtZToK
IC5vcE5leHRQbmFtZUNoZWNrUHJvdG90eXBlTG9vcDoKICAgICBicGVxIFN0cnVjdHVyZTo6bV9w
cm90b3R5cGVbdDFdLCBWYWx1ZU51bGwsIC5vcE5leHRQbmFtZVNsb3cKICAgICBsb2FkcCBTdHJ1
Y3R1cmU6Om1fcHJvdG90eXBlW3QxXSwgdDIKKyAgICBsb2FkcCBKU0NlbGw6Om1fYnV0dGVyZmx5
W3QyXSwgdDEKKyAgICBidGlueiAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFk
ZXI6Om1fbGVuZ3RoQW5kVHlwZVt0MV0sIC5vcE5leHRQbmFtZVNsb3cKICAgICBsb2FkcCBKU0Nl
bGw6Om1fc3RydWN0dXJlW3QyXSwgdDEKICAgICBicG5lcSB0MSwgW3QwXSwgLm9wTmV4dFBuYW1l
U2xvdwogICAgIGFkZHAgOCwgdDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNjQ4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNiArNjEsMTUgQEAgZWxzZQogICAgIGNvbnN0IFBheWxvYWRPZmZzZXQg
PSAwCiBlbmQKIAorIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgor
Y29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2NvbnN0IEFsbEFy
cmF5VHlwZXMgPSAxNQorY29uc3QgTnVtYmVyT2ZUeXBlQml0cyA9IDQKK2NvbnN0IE51bWJlck9m
TGVuZ3RoQml0cyA9IDMyIC0gTnVtYmVyT2ZUeXBlQml0cworY29uc3QgTGVuZ3RoTWFzayA9ICgx
IDw8IE51bWJlck9mTGVuZ3RoQml0cykgLSAxCitjb25zdCBNYXhpbXVtTGVuZ3RoID0gTGVuZ3Ro
TWFzaworCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKIGNvbnN0IE9i
amVjdFR5cGUgPSAxMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlD
b252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OSBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252
ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQor
Ly8KKy8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25l
IG9mIHRocmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0
eSBtYXAuCisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2Yg
YXJyYXkgZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRp
ZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFz
IGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4g
IE1BWF9BUlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9w
ZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGlu
dGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3Jl
ZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdp
dGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRl
Z2VyIGksCisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5k
ZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9y
IHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhl
IGZvbGxvd2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVj
dG9yLAorLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBj
YXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZh
bHVlIHdpbGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBv
ciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAg
ICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5n
IHVzZWQgd2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBv
ZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RP
UkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
YWx3YXlzIGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKyNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgp
CisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgp
IGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1P
IGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3
ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2Vy
LgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJB
U0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdl
J2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2Vw
Y2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVD
VE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdy
b3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRl
ZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hl
biB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBh
bGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMg
dXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0
IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBi
b29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1W
YWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8
IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworaW5saW5l
IEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAg
IHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0aEFuZFR5cGUo
dmVjdG9yTGVuZ3RoLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVu
Z3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsK
KworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJh
eS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFn
ZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250
YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8g
c2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJl
IG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0
byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQg
cG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9p
bmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3Rv
cmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVh
dGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFy
cmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3Rv
cmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4
aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5KCkgeyByZXR1cm4gcmVpbnRlcnJwZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAg
IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVy
Ojpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRo
ZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVk
IGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZv
aWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhX
b3JkKGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2ln
bmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAg
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3Jh
Z2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1h
cDsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9u
dW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIu
bV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAK
KyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zcGFyc2VN
YXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAgICB9CisgICAgCisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7Cisg
ICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9z
ZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRyX3Qg
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
dWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBt
X3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsg
cmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rv
ckxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5n
SGVhZGVyKCkgKyBpbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZv
cih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2Rl
ZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAi
SW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRl
IDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xv
YmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgp
IHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2lu
Z2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNp
emUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVy
biAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpIHsgcmV0dXJuIG9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUo
KTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVh
dGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmlu
Z0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdI
ZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGlu
ZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hl
YWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAt
IHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3Jt
IHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAgIC8vIG9m
IHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQu
IE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUg
YW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlv
bgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhh
dCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkgaW50byBI
ZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1By
b3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0ds
b2JhbERhdGEmLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5
Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0
aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVy
Zmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0
KHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVy
Zmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisj
aW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAg
ICAgICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0
IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChnbG9iYWxEYXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGlu
Z0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVE
dXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSksIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGlu
Z0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlKHNsb3RWaXNpdG9yLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAw
KTsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgp
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQo
bmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwg
bmV3UHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1l
bWNweShyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwgYmFz
ZShvbGRQcm9wZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHks
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKGdsb2Jh
bERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KCksIG9sZFByb3BlcnR5U3RvcmFn
ZSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKSwgbmV3UHJv
cGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0Fy
cmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKCFpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eSgpKTsKKyAgICB2b2lkKiBiYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgKKyAgICAg
ICAgICAgICZiYXNlLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgMCwgcHJvcGVydHlDYXBh
Y2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlS
aWdodChnbG9iYWxEYXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQ
cmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIG5ld1By
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgbWVtY3B5KHJlc3VsdC0+YmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9w
ZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiByZXNpemVBcnJheShnbG9iYWxEYXRhLCBpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eSgpLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ0hl
YWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcygpLCBuZXdQcmVDYXBhY2l0eSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OnVuc2hpZnQoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBudW1iZXJPZlNs
b3RzKQoreworICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KCkpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRv
IHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKKyAgICAv
LyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBleHRy
YSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3ZpbmcgYSBzbWFsbCBh
bW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBvZiBt
ZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgaXQu
IEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0bworICAgIC8vIGlu
bGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMgbGlr
ZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkgb24gdGhlIGNvbXBp
bGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIChz
aW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNhdXNl
IHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgorICAgIG1lbW1vdmUo
cHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAg
ICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIElu
ZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3Rz
KS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQo
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIC8v
IEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUocHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgICAg
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplb2YoSW5kZXhp
bmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5i
dXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAg
ICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAt
MTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAm
Q2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZh
bHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NO
YW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordWludDY0X3QgSW5kZXhpbmdIZWFk
ZXI6OnNfZW1wdHlTaW5nbGV0b247CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5k
ZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7Citj
bGFzcyBBcnJheVN0b3JhZ2U7CisKK3R5cGVkZWYgdW5zaWduZWQgSW5kZXhpbmdUeXBlOworCisv
LyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGlj
IGNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJy
YXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5
cGVzLgorc3RhdGljIGNvbnN0IE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMg
Y29uc3QgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGlj
IGNvbnN0IEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3Qg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKwor
Ly8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCitzdGF0aWMgY29uc3QgQWxsQXJyYXlUeXBl
cyAgICAgICAgICAgID0gMTU7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZUeXBlQml0cyA9IDQ7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mTGVuZ3RoQml0cyA9IDMyIC0gbnVtYmVyT2ZUeXBlQml0
czsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoTWFzayA9ICgxIDw8IG51bWJlck9m
TGVuZ3RoQml0cykgLSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
ID0gbGVuZ3RoTWFzazsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hl
YWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hl
YWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fYXV4V29yZCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9sZW5ndGhBbmRUeXBlKTsgfQorICAgIAorICAg
IHN0YXRpYyBJbmRleGluZ0hlYWRlciogZW1wdHlTaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPigmc19lbXB0eVNpbmdsZXRv
bik7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhp
bmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9m
IHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVw
ZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4
V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoQW5kVHlwZSgwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aEFuZFR5cGUgJiBs
ZW5ndGhNYXNrOyB9CisgICAgSW5kZXhpbmdUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxJbmRleGluZ1R5cGU+KG1fbGVuZ3RoQW5kVHlwZSA+PiBudW1iZXJPZkxlbmd0aEJp
dHMpOyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAgewor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0
aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgfmxlbmd0aE1hc2spIHwgbGVuZ3RoOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldFR5cGUoSW5kZXhpbmdUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBtX2xlbmd0aEFuZFR5cGUgPSAobV9sZW5ndGhBbmRUeXBlICYgbGVuZ3RoTWFzaykgfCAo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoQW5kVHlwZShpbnQzMl90IGxlbmd0aCwgSW5kZXhp
bmdUeXBlIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5n
dGgpOworICAgICAgICBtX2xlbmd0aEFuZFR5cGUgPSBsZW5ndGggfCAoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHR5cGUpIDw8IG51bWJlck9mTGVuZ3RoQml0cyk7CisgICAgfQorICAgIAorICAgIHVp
bnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1eFdv
cmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisgICAg
c3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJm
bHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PElu
ZGV4aW5nSGVhZGVyKj4ocHJvcGVydHlTdG9yYWdlKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25z
dFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAg
IH0KKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAg
fQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQg
dGhleSBjYW5ub3QgYmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFk
ZXIuCisgICAgc2l6ZV90IHByZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKCk7CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYXV4V29yZDsg
Ly8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgor
ICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhl
ZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KKyAgICAKKyAgICBzdGF0aWMgdWludDY0
X3Qgc19lbXB0eVNpbmdsZXRvbjsgLy8gVXNlIGEgUE9EIHRvIGVuc3VyZSB0aGF0IHRoZSBjb21w
aWxlciBkb2VzIGdvb2QgdGhpbmdzLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAor
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNh
cGFjaXR5KCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9p
bmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKCkKK3sKKyAgICBpZiAoTElLRUxZKCEodHlwZSgpICYgSGFzQXJyYXlT
dG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5j
cHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBpbmxpbmUg
Ym9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2
YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKICAgICBT
eW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS5lbmQoKTsKQEAgLTEzMyw4ICsxMzMsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9Ci0gICAgLy8g
U2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0
eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVj
dCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKKyAgICBKU09i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlz
aW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29u
c3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diAoYXBAbnlwb3AuY29tKQogICoKQEAgLTQ1LDcxICs0NSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
QVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9E
RVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJv
cGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUg
bG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8v
ICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRy
aWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0
aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWdu
ZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZ
X0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhl
IHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJl
IG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBK
U09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVy
aWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8v
IHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2ls
bCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJz
ZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5n
Ci0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAg
ICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHBy
b3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBl
aXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBz
cGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhh
dCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVy
ZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRy
aWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUg
c3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24g
b2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRp
b24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUg
Y2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMg
bWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3Rv
cmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBi
ZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBi
cmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+Lgot
I2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFH
RV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZG
RkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2gg
aXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQot
Ly8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVj
dG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3Jl
YXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0j
ZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRo
ZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVt
ZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3Vy
IHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNl
IG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhh
biBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0v
LyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdl
IHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9
IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9u
RmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07
CiAKLS8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIg
aXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3Ig
YXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlz
IHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5l
ZCBhYm92ZS4KLXN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlu
bGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQog
c3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwg
Y29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkBAIC0xMTcs
NDE5ICs1NCwxNSBAQCBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLWlu
bGluZSB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUp
Ci17Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsK
LSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVj
dG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9y
YWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2Fz
dDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
ID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwot
ICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0g
ICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
LQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSogSlNBcnJheTo6dHJ5Rmlu
aXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGxl
bmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVjdG9yLgotICAgIGlmIChp
bml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gbWF4KGluaXRpYWxMZW5n
dGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0g
c3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdl
ID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlh
bFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAg
bV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAg
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVu
Z3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JM
ZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0
aDsKLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXph
dGlvbiA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwotfQotCi0vLyBUaGlzIGZ1
bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgot
dm9pZCBKU0FycmF5OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+
ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWdu
ZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGksIGVudHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0
eSgpOwotICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAg
SGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3Jl
cG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOwotICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9
IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3
ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNv
bW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBu
b3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2
ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAh
YXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3Ip
OwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgewot
ICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5
LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29y
ID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVy
KCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNl
dHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJv
dykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFy
c2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJh
eSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBB
ZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFy
YXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0g
ICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBh
bmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSBy
aWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3Zl
KHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3Qg
ZXh0ZW5zaWJsZS4iKTsKLSAgICB9Ci0KLSAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBl
bnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90
JiBzbG90KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBB
U1NFUlQodmFsdWUpOwotCi0gICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkp
IHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIo
KTsKLSAgICBpZiAoIWdldHRlcikgewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19
Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpIGNvbnN0Ci17Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6
OmdldCgpLCBhdHRyaWJ1dGVzKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlm
IChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0
ZXIoKTsKLSAgICBpZiAoIWdldHRlcikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0K
LSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJu
IGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0
eUxpc3QoKSk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNw
YXJzZU1vZGUoKSBjb25zdAotewotICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJu
IEJhc2U6OmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1f
bWFwLmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9p
ZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17
Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGds
b2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOwotfQotCi12b2lkIEpT
QXJyYXk6OmRlYWxsb2NhdGVTcGFyc2VNYXAoKQotewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVl
TWFwOwotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVy
RGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVT
cGFyc2VNYXAoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0g
ICAgfQotCi0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxs
IGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdl
IGNhbiB3cml0ZSwKLSAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8g
bmVlZCB0byBzZXQgdGhlbS4KLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5h
ZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OwotICAgIH0KLQotICAgIHZvaWQqIG5ld1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3Jh
Z2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFn
ZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNw
eShuZXdTdG9yYWdlLCBtX3N0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsK
LSAgICBtX2luZGV4QmlhcyA9IDA7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lk
IEpTQXJyYXk6OnB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5
KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVz
Y3JpcHRvciYgb2xkRGVzY3JpcHRvcikKLXsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAg
IGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFs
dWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNj
ZXNzb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAg
ICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIg
PSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNj
cmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAg
ICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgc2V0dGVy
ID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVz
Y3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLQotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29y
ID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAg
ICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsK
LSAgICAgICAgaWYgKHNldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwotCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0
cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2Ny
aXB0b3IpICYgflJlYWRPbmx5OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRy
aWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRl
ZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0g
ICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUo
KSkgewotICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3Bl
cnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3Np
bWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhl
eSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAgIC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9w
ZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZy
b20gdGhlaXIgY3VycmVudCAndHJ1ZScKLSAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3du
UHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8g
ZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KLSAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0
ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBk
ZXNjcmlwdG9yLnZhbHVlKCksIHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVCht
YXApOwotCi0gICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBu
YW1lIFAuCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+
YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhl
IHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAg
IC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0
aGVuIFJlamVjdC4KLSAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5z
aWJsZSBpcyB0cnVlLCB0aGVuCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5p
dGVyYXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rl
c2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNy
ZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBP
IHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25m
aWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkg
RGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2Vu
dCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0
eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVz
YyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBv
d24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9z
ZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBh
dHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhl
IHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJp
YnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8g
aXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBl
bnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBt
X3N0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGlu
ZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJu
IHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVy
biB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5k
IHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUg
U2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJl
bnQ7Ci0gICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlz
RW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSB0aGVuCi0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
Ci0gICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNl
bnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3Vy
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8v
IDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJl
IHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlw
dG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3Jp
cHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2Yg
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5l
cmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBp
cyByZXF1aXJlZC4KLSAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAg
ICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZv
ciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3Bl
cnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVz
IG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3Vy
YWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2Yg
dGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZh
dWx0IHZhbHVlcy4KLSAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVy
dHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0
YSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMg
b2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVt
ZXJhYmxlXV0KLSAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0
aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAg
ICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5p
c0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFE
ZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRy
dWUsIHRoZW4KLSAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAg
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVj
dCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1
ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAg
ICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlw
dG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1
ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0
cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQu
Z2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAg
IC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBp
ZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNj
LltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3Vy
cmVudC5zZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVj
dCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUo
RGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9
IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFu
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQg
aXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRo
ZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQu
Ci0gICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50
KTsKLSAgICAvLyAxMy4gUmV0dXJuIHRydWUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQg
SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxl
KQogewogICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgIXdyaXRhYmxlKTsKICAgICBp
ZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwogCi0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CiAgICAgQVNTRVJUKG1hcCk7
CiAgICAgbWFwLT5zZXRMZW5ndGhJc1JlYWRPbmx5KCk7CiB9CkBAIC02MzMsMzUgKzE2Niw3IEBA
IGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QKICAgICAgICAgcmV0dXJu
IGFycmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3Is
IHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4
Y2VwdGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBz
bG90KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwp
OwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQot
ICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gTUFYX0FS
UkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNP
YmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKKyAgICByZXR1cm4gb2JqZWN0LT5KU09iamVjdDo6ZGVmaW5lT3duTm9uSW5k
ZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9u
KTsKIH0KIAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKQEAgLTY3MiwxMCArMTc3LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCi0gICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIApAQCAtNjg3LDI2ICsxODgsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewot
ICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtNzE0LDExICsxOTUsNiBAQCBib29sIEpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAg
ICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICB1bnNpZ25lZCBuZXdM
ZW5ndGggPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTczMywxOTQgKzIwOSw5IEBAIHZvaWQg
SlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQKICAgICBKU09iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpT
QXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAg
ICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAgICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgotICAgICAgICBp
ZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICAg
ICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLQotICAgICAgICB2YWx1ZVNs
b3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwotICAgICAgICB0
aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBIYW5kbGUgMl4zMi0xIC0gdGhpcyBpcyBub3QgYW4gYXJyYXkgaW5kZXggKHNlZSBF
UzUuMSAxNS40KSwgYW5kIGlzIHRyZWF0ZWQgYXMgYSByZWd1bGFyIHByb3BlcnR5LgotICAgIGlm
IChVTkxJS0VMWShpID4gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChzaG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwg
c2xvdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIGNh
c2VzLCBjYWxsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGguCi0gICAgdGhpc09iamVjdC0+
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBKU0FycmF5
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
Ci0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9B
UlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0g
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8v
IEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFy
c2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5
IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9k
ZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJs
ZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUg
dG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0
b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFn
ZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUg
dmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4
ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAg
ICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxl
LgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJl
IGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBi
ZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFw
IGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBp
ZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5B
cnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3Ro
KSkgewotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRl
cmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBz
dG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
dW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBp
bnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
LQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFs
dWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFs
dWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJl
IGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rv
ci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAg
Ly8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNw
YXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJy
YXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBt
b2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNp
YmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5Lgot
ICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJs
ZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZl
Y3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFs
RGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9y
YWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRo
ZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0
IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBt
YXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9i
YWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAg
ICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAg
ICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRh
YmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOwotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHBy
b3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICBsZW5n
dGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQot
Ci0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ug
c3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1
c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0
b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVl
c0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0g
ICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0
aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFm
dGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAg
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFw
IGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2
YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2
YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
Ci0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTkyOCwzNSArMjE5LDYgQEAgYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCi17Ci0gICAgSlNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+
Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICBpZiAoaSA8
IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICh2YWx1
ZVNsb3QpIHsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAgICAgICAgICAgLS1z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7
Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkp
OwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25z
dCB2b2lkKiBiKQogewogICAgIHVuc2lnbmVkIGRhID0gKnN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oYSk7CkBAIC05NjQsMTI3ICsyMjYsMjYgQEAgc3RhdGljIGludCBjb21wYXJlS2V5c0Zv
clFTb3J0KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEgPiBkYikgLSAoZGEgPCBkYik7CiB9CiAK
LXZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgLy8gRklYTUU6IEZpbGxpbmcgUHJv
cGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCi0gICAg
Ly8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEg
ZGlmZmVyZW50IGFwcHJvYWNoLAotICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMg
YSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KLQotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCB0aGlzT2JqZWN0
LT5tX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGtleXM7Ci0gICAgICAg
IGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAg
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVt
KSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQt
PmZpcnN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMu
c2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKLSAgICB9
CiAKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKIAotICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTQXJyYXk6OmdldE5ld1Zl
Y3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQotewotICAgIEFTU0VSVChkZXNpcmVk
TGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotCi0gICAgdW5zaWduZWQgaW5j
cmVhc2VkTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBtaW4obV9zdG9yYWdl
LT5tX2xlbmd0aCwgMTAwMDAwVSk7Ci0KLSAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRM
ZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7Ci0gICAgZWxz
ZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXgoZGVz
aXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhl
bWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0g
KG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGlu
Y3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAg
ICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAg
ICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkg
KyAoZGVzaXJlZExlbmd0aCAmIDEpOwotICAgIH0KLQotICAgIEFTU0VSVChpbmNyZWFzZWRMZW5n
dGggPj0gZGVzaXJlZExlbmd0aCk7Ci0KLSAgICBsYXN0QXJyYXlTaXplID0gbWluKGluY3JlYXNl
ZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOwotCi0gICAgcmV0dXJuIG1pbihpbmNyZWFzZWRM
ZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotfQotCi1ib29sIEpTQXJyYXk6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3
TGVuZ3RoKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBp
bnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFu
eSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCi0gICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2Fs
bGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9y
ZSBlZmZpY2llbnRseS4KLSAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5n
dGg7Ci0gICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQg
bmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7Ci0KLSAgICAv
LyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSBy
ZWFsbG9jIG1ha2VzIHNlbnNlLgotICAgIGlmIChMSUtFTFkoIW1faW5kZXhCaWFzKSkgewotICAg
ICAgICB2b2lkKiBuZXdTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZuZXdTdG9yYWdlLCBzdG9y
YWdlU2l6ZSh2ZWN0b3JMZW5ndGgpLCBzdG9yYWdlU2l6ZShuZXdWZWN0b3JMZW5ndGgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5l
d1N0b3JhZ2UpKTsKLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7
Ci0gICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLQotICAgICAgICBtX3Zl
Y3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJl
Y2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxl
bmd0aC4KLSAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBtaW4obV9pbmRleEJpYXMgPj4gMSwg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gQ2Fs
Y3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2Fw
YWNpdHkuCi0gICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3Ro
ICsgbmV3SW5kZXhCaWFzOwotICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7Ci0gICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKG5ld1N0b3JhZ2VD
YXBhY2l0eSksICZuZXdBbGxvY0Jhc2UpKSAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIg
ZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVu
Z3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotCi0gICAgbV92ZWN0b3JM
ZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7
Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVp
bnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9p
bmRleEJpYXMpOwotCi0gICAgLy8gQ29weSB0aGUgQXJyYXlTdG9yYWdlIGhlYWRlciAmIGN1cnJl
bnQgY29udGVudHMgb2YgdGhlIHZlY3Rvci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3RvcmFn
ZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBvbGQgYWxs
b2NhdGlvbiwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2Ug
PSBuZXdBbGxvY0Jhc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU09iamVjdDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBs
ZWF2ZXMgdGhlIG5ldyBzcGFjZSB1bmNsZWFyZWQuCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY291bnQpCiB7Ci0g
ICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0
aC4KLSAgICBBU1NFUlQoY291bnQgPiBtX2luZGV4Qmlhcyk7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVk
IHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CiAKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQg
aGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KKyAgICBBU1NFUlQoY291bnQgPiBz
dG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKICAgICAvLyBTdGVwIDE6CiAgICAgLy8gR2F0aGVyIDQg
a2V5IG1ldHJpY3M6CkBAIC0xMDkzLDggKzI1NCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyAgKiBjdXJyZW50Q2FwYWNpdHkgLSB3aGF0IGlzIHRo
ZSBjdXJyZW50IHNpemUgb2YgdGhlIHZlY3RvciwgaW5jbHVkaW5nIGFueSBwcmUtY2FwYWNpdHku
CiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRv
IGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgog
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgdW5zaWduZWQg
dXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOwogICAgIEFTU0VS
VCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8v
IENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3Zl
cmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMTEwMiwyNyArMjYzLDEyIEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCByZXF1aXJlZFZl
Y3Rvckxlbmd0aCA9IHVzZWRWZWN0b3JMZW5ndGggKyBjb3VudDsKICAgICBBU1NFUlQocmVxdWly
ZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gVGhl
IHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0gICAgdW5zaWduZWQgY3VycmVudENh
cGFjaXR5ID0gbV92ZWN0b3JMZW5ndGggKyBtX2luZGV4QmlhczsKKyAgICBBU1NFUlQoc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSA+PSBzdG9yYWdl
LT5tX2luZGV4Qmlhcyk7CisgICAgdW5zaWduZWQgY3VycmVudENhcGFjaXR5ID0gc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgKyBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICAvLyBUaGUgY2FsY3Vs
YXRpb24gb2YgZGVzaXJlZENhcGFjaXR5IHdvbid0IG92ZXJmbG93LCBkdWUgdG8gdGhlIHJhbmdl
IG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCiAgICAgdW5zaWduZWQgZGVzaXJlZENhcGFj
aXR5ID0gbWluKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgsIG1heChCQVNFX1ZFQ1RPUl9MRU4s
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSA8PCAxKTsKIAogICAgIC8vIFN0ZXAgMjoKLSAgICAvLyBX
ZSdyZSBlaXRoZXIgZ29pbmcgdG8gY2hvb3NlIHRvIGFsbG9jYXRlIGEgbmV3IEFycmF5U3RvcmFn
ZSwgb3Igd2UncmUgZ29pbmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9uLgotCi0gICAgdm9pZCog
bmV3QWxsb2NCYXNlID0gMDsKLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7Ci0gICAg
Ly8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1
dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCi0gICAgaWYgKGN1cnJl
bnRDYXBhY2l0eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1
cnJlbnRDYXBhY2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgIG5ld0FsbG9j
QmFzZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBjdXJyZW50Q2FwYWNpdHk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKGRlc2lyZWRDYXBhY2l0eSksICZu
ZXdBbGxvY0Jhc2UpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBuZXdTdG9y
YWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7Ci0gICAgfQotCi0gICAgLy8gU3RlcCAzOgog
ICAgIC8vIFdvcmsgb3V0IHdoZXJlIHdlJ3JlIGdvaW5nIHRvIG1vdmUgdGhpbmdzIHRvLgogCiAg
ICAgLy8gRGV0ZXJtaW5lIGhvdyBtdWNoIG9mIHRoZSB2ZWN0b3IgdG8gdXNlIGFzIHByZS1jYXBh
Y2l0eSwgYW5kIGhvdyBtdWNoIGFzIHBvc3QtY2FwYWNpdHkuCkBAIC0xMTM2LDI0ICsyODIsNDAg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgICAgICAvLyBJ
ZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBw
b3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVjZWQuCiAgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jh
c2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jhc2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0b3JMZW5n
dGggLSBsZW5ndGgpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZXNpcmVkVmVjdG9yTGVu
Z3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7CisgICAgdW5zaWduZWQg
ZGVzaXJlZEluZGV4QmlhczsKIAotICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JM
ZW5ndGggKyBwb3N0Q2FwYWNpdHk7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNp
dHkgLSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0
cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+
KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7CisgICAgLy8gU3RlcCAzOgorICAgIC8vIFdl
J3JlIGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdl
LCBvciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCisKKyAgICB2b2lkKiBu
ZXdBbGxvY0Jhc2UgPSAwOworICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKKyAgICAv
LyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0
IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KKyAgICBpZiAoY3VycmVu
dENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3Vy
cmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKKyAgICAgICAgLy8gRklYTUUg
ZG8gdGhpbmdzCisgICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdG9yYWdl
LT5tX2luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgICAgIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKKyAgICAgICAgZGVzaXJlZEluZGV4QmlhcyA9IG5ld1N0
b3JhZ2VDYXBhY2l0eSAtIGRlc2lyZWRWZWN0b3JMZW5ndGg7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVzaXJlZEluZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIGRlc2lyZWRWZWN0b3JM
ZW5ndGg7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShC
dXR0ZXJmbHk6OnRvdGFsU2l6ZShkZXNpcmVkSW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5LCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZFZlY3Rvckxlbmd0aCkpLCAmbmV3QWxsb2NCYXNl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5
ID0gZGVzaXJlZENhcGFjaXR5OworICAgIH0KKworICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNp
dHkpOworICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICBuZXdTdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoZGVzaXJlZFZlY3Rvckxl
bmd0aCk7CisgICAgbmV3U3RvcmFnZS0+bV9pbmRleEJpYXMgPSBkZXNpcmVkSW5kZXhCaWFzOwog
CiAgICAgLy8gU3RlcCA0OgogICAgIC8vIENvcHkgYXJyYXkgZGF0YSAvIGhlYWRlciBpbnRvIHRo
ZWlyIG5ldyBsb2NhdGlvbnMsIGNsZWFyIHBvc3QtY2FwYWNpdHkgJiBmcmVlIGFueSBvbGQgYWxs
b2NhdGlvbi4KIAogICAgIC8vIElmIHRoaXMgaXMgYmVpbmcgbW92ZWQgd2l0aGluIHRoZSBleGlz
dGluZyBidWZmZXIgb2YgbWVtb3J5LCB3ZSBhcmUgYWx3YXlzIHNoaWZ0aW5nIGRhdGEKICAgICAv
LyB0byB0aGUgcmlnaHQgKHNpbmNlIGNvdW50ID4gbV9pbmRleEJpYXMpLiBBcyBzdWNoIHRoaXMg
bWVtbW92ZSBjYW5ub3QgdHJhbXBsZSB0aGUgaGVhZGVyLgotICAgIG1lbW1vdmUobV9zdG9yYWdl
LT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwg
c3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotCi0gICAgLy8gQXJlIHdlIGNvcHlpbmcgaW50byBh
IG5ldyBhbGxvY2F0aW9uPwotICAgIGlmIChuZXdBbGxvY0Jhc2UgIT0gbV9zdG9yYWdlLT5tX2Fs
bG9jQmFzZSkgewotICAgICAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1f
YWxsb2NCYXNlLgotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNl
OwotICAgIH0KKyAgICBtZW1tb3ZlKG5ld1N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3Jh
Z2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JM
ZW5ndGgpOworICAgIG1lbW1vdmUobV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0
T2ZMaW5lU2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUs
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvdXRPZkxpbmVTaXplICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTExNjIsMTMgKzMyNCwxMyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1f
bGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBz
cGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KLSAgICBBU1NF
UlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXApOworICAgIEFTU0VSVChp
c0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCi0gICAgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKICAgICAgICAg
Ly8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAgaWYgKG1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKQEAgLTEy
MjAsNyArMzgyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+bV9sZW5ndGggPSBuZXdMZW5ndGg7Cisg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjI5LDQ0ICszOTEsNTYgQEAgYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFn
ZS0+bV9sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgaWYgKCFpc0xlbmd0aFdy
aXRhYmxlKCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5s
ZW5ndGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNMZW5n
dGhXcml0YWJsZSgpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAx
OwotICAgIGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOwotICAgICAg
ICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7Ci0g
ICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBs
ZW5ndGggLSAxOworICAgICAgICBpZiAoaW5kZXggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkg
eworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpbmRleF07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAg
ICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAg
IEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAgICAgICAgICB2YWx1
ZVNsb3QuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4OwotICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7CisgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsKKyAgICAgICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVu
dCBpbmR4LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1l
bnRzIGluZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywg
ZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8g
ZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNWYWx1ZSBl
bGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIENhbGwg
dGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBh
bmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywg
aW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRl
bGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBzZXRMZW5n
dGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KLSAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1
ZS4KLSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOwotICAgIC8vIFJldHVybiBlbGVt
ZW50LgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gZWxlbWVudDsKIH0KIAog
Ly8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBzbWFsbCBk
aWZmZXJlbmNlcy4KQEAgLTEyNzUsMzkgKzQ0OSw1MyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChF
eGVjU3RhdGUqIGV4ZWMpCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwg
dHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAKLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFs
d2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
IC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0
aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3Ro
KGxlbmd0aCArIDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4z
Mi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAg
ICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAg
ICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5s
ZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43
IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4K
KyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhl
Yywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOwogICAgIH0K
LQotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhl
IHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0
b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBtZXRob2RUYWJsZSgp
LT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7
Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMu
ZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgi
KSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBw
dXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2Ut
Pm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCiBi
b29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpCiB7CiAg
ICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFn
ZSgpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwor
ICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8v
IElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3Jt
YWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3Rv
dHlwZS4KQEAgLTEzMTgsMTggKzUwNiwxOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiwgdW5zCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291
bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAg
ICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5n
dGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3Vu
dCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAg
ICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50
OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3
QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jh
c2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7
Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNv
dW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CiAgICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAgIH0KQEAg
LTEzMzksNTkgKzUyNywyOSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwg
dW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNl
IHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8g
SWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1h
bCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90
eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBp
blNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAt
PSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7
Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDAp
KTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdl
Kj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAg
ICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgc3RvcmFnZSA9
IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50
KTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CisgICAgICAgIHN0b3Jh
Z2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIGNvdW50KTsKICAg
ICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNv
dW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsK
LSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxk
cmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAg
TUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAg
ICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAg
dmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3Jh
Z2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3Qt
Pm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92
ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFy
Kj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJp
YXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJh
c2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9h
bGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlz
aXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFT
b3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTQxMCwxMTAgKzU2
OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogewogICAg
IEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0g
Y29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VW
YWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkK
KyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGJvb2wgYWxsVmFs
dWVzQXJlTnVtYmVycyA9IHRydWU7Ci0gICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAgICAg
ICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOzsKKyAgICAgICAgCisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewor
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
YWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1i
ZXIoKSkgeworICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICAgICAgcmV0dXJuIHNv
cnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICAK
KyAgICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQg
aXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVp
cmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQor
ICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgorICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwor
ICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICghYWxsVmFsdWVzQXJlTnVt
YmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMg
ZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgIC8vIGFsc28gZG9u
J3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2
aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1
YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwot
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQg
SlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZU1v
ZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21w
YWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0
cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29y
dCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1l
bnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVz
IGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3Rz
IHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1l
dGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJl
c3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4K
LQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogICAgIAotICAgIEhl
YXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLQotICAgIGJvb2wg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBBU1NFUlQoIXZh
bHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAg
ICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xs
b3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVl
cyBldmVuIGFmdGVyCi0gICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24u
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsgaSsrKQotICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvVVN0
cmluZ0lubGluZShleGVjKTsKLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBz
d2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdl
IHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBh
IHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBs
b2cgTikuCi0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNv
cnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPnN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBl
bnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4K
KyAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5n
IGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1w
b3JhcnkKKyAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20g
Y3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhh
dCByZXR1cm4KKyAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRz
LCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBib29sIGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyA9IHRydWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsdWUu
aXNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZh
bHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5n
IG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAgICAgLy8gYSB0b1N0cmluZyBj
YWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAg
dmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUoZXhlYyk7
CisgICAgICAgIAorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU2lu
Y2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8g
dXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgICAgICAvLyB0
aGFuIE8oTiBsb2cgTikuCisgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAgIGlmIChp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2
YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFp
ckZvclFTb3J0KTsKLSAgICBlbHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7CisgICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCisgICAg
ICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxz
ZQotICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8g
bm90IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3Bl
Y2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBz
dGFibGUgc29ydC4KLSAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90
IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNw
ZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEg
c3RhYmxlIHNvcnQuCisgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgp
LCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsK
ICNlbmRpZgotCi0gICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxl
bmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgLy8gaW5jcmVhc2UgdGhl
IGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0g
ICAgaWYgKG1fdmVjdG9yTGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAg
ICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7Ci0KLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKLQotICAgIEhlYXA6Omhl
YXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgIAotICAgIGNoZWNrQ29u
c2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgLy8gSWYg
dGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3Ig
dmVjdG9yIHN0b3JhZ2UsCisgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxl
IHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgICAgICBpZiAoc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKKyAgICAg
ICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWVzW2ldLmZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRl
bXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0K
IAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTYsMTQ4ICs3Nzks
MTgzIEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIHZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxs
VHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFTU0VSVCgh
aW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgLy8gRklY
TUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlv
biBvciBpbiB0b051bWJlci4KLQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29t
cGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAv
LyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9s
ZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3Ro
LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxl
bmd0aCArIChtX3NwYXJzZVZhbHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgpIDogMCk7
Ci0KLSAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlz
IGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4
ZWM7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVu
Y3Rpb247Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlw
ZTsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsK
LSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQotICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2Nh
Y2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rv
ciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5k
ZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVk
IG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRp
bmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUg
dHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVm
aW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0u
dmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkg
ewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAg
ICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsr
bnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJl
ZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8g
bm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAg
IEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3Ro
KCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAo
c3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7
CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpT
RnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZp
ZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAg
ICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhl
IHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1E
ZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICAr
K251bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQg
KyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6
ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7
Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFu
IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAg
IGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JM
ZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAg
ICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4g
YXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0
b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxv
Y2F0ZVNwYXJzZU1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmlu
ZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0
cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBu
dW1EZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1p
Z2h0IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAg
ICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisg
ICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRl
cmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAg
IH0KLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAv
LyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAv
LyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5l
d1VzZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VS
VCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAg
IC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2
ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQg
dW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQg
PSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAobV9i
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6Cisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0
b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFn
ZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQg
aSA9IDA7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICgh
dikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxl
bmd0aCgpOyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1fbGVu
Z3RoOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxl
bmd0aCgpKTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7
Ci0gICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwot
ICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBzd2l0
Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OgorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2ln
bmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2
LmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgZm9yICg7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwog
fQogCiB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCkBAIC0xNzQ1LDEwMyArOTYzLDcxIEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2wKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKIAogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsK
IAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3Ro
KTsKLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
bnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAo
di5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQr
K10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQg
bnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYg
PSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
diB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXpl
KCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4g
YXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAg
ICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBp
ZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAh
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmlu
ZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxs
b2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZp
bmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0
ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3Rl
bmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsK
LQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lD
aGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVk
IG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1f
bGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNo
ZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBj
cmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFs
dWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBT
b3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsK
KyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAg
ICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0
ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3Qs
CisgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisgICAg
ICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0
b3JMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0lu
VmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1W
YWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VW
YWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJU
KGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29u
ZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykK
LSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5l
ZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0g
ICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY0ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAog
CisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAjZGVmaW5lIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZIDAKQEAgLTMwLDEzMSArMzIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBz
dHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewot
ICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNw
YXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5
U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1
ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRy
eSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAg
ICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBM
ZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1
bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAg
ICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDAp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBz
dGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9
IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVk
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhl
Y1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
LSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVy
YXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAg
Ly8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1
bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21h
cC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAu
cmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0
dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29u
c3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3Jl
cG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBh
Y3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0
byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcg
dG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0
LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMu
ICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUg
dGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAv
IHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxh
YmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNp
emVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25l
ZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAg
ICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFz
ZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVw
aW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUg
bGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBO
ZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1
aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7
Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0g
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQot
ICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVibGlj
OgorICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAgICAg
ICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkKKyAg
ICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNOb25G
aW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJsaWM6
Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRp
YyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAp
OwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBj
b25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjUgKzU5LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0Ojpw
dXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMg
bm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0g
ICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMg
d3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0g
ICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0K
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgo
KTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBt
aWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0xOTks
NjQgKzc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2ln
bmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBj
YW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAg
ICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5p
dGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFs
aXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9
PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExl
bmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBt
b3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2Vu
ZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAg
IH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVk
IG5ld0xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZl
IGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0
aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAg
ICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNl
bmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
OwotICAgICAgICAgICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAg
fQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRC
dWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZy
YW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIApAQCAtMjY1LDMzICs4NSwyMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBzdG9yYWdlT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFy
eU1vZGUoSlNHbG9iYWxEYXRhJik7Ci0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpOwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwor
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXA7CiAgICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5
KCk7CiAgICAgICAgIH0KIApAQCAtMzAxLDQwICsxMDksNTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZv
aWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCi0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgdW5zaWduZWQgZ2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
Y291bnQpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNH
bG9iYWxEYXRhJik7Ci0KLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1h
bENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lz
dGVuY3lDaGVjayB9OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lD
aGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBt
X3ZlY3Rvckxlbmd0aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1
bnNpZ25lZCBtX2luZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2Nr
cyBiZWZvcmUgQXJyYXlTdG9yYWdlLgotICAgICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsK
LQotICAgICAgICAvLyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUg
cHV0IGludG8gaXRzIG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1f
c3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1h
cE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVl
TWFwKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KICAgICB9OwogCiAg
ICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsK
LSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAg
ICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAg
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXAp
KSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJy
YXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENy
ZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRl
bXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSksICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxM
ZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0g
MDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFs
aXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXph
dGlvbiA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0K
IAogICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSk7CkBAIC0zNTMsMzAgKzE3MSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwpIHsg
cmV0dXJuIGNlbGwtPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBpbmxp
bmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlzSlNB
cnJheSh2LmFzQ2VsbCgpKTsgfQogCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQot
Ly8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBp
cyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5u
b3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9m
IHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkK
LQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkg
YW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8g
YmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAo
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0FycmF5
OjpzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NF
UlQodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAotICAg
ICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHBy
b3ZpZGVkICh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAg
ICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fu
bm90IG92ZXJmbG93LgotICAgICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBkZXRl
Y3QgaW50ZWdlciBvdmVyZmxvdyBpbiBwcmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5vdCBi
ZSBwb3NzaWJsZSwgcHJvdmlkZWQgdGhhdAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIGlzIGNvcnJlY3RseSBkZWZpbmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAtIChz
aXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkp
OwotICAgIAotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0
dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsx
NzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJpbmcg
SlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBK
U0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIEpTQ2VsbChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIHB1YmxpYzoKQEAgLTE0MCw2
ICsxNDAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biAmbV9zdHJ1Y3R1cmU7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQpAQCAtMTU4LDYgKzE2OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUt
YWJsZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RU
YWJsZQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICAgICAgc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAg
ICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgVVN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKQEAg
LTE3MCw2ICsxODEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RydWN0dXJlOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJ1dHRlcmZs
eSogbV9idXR0ZXJmbHk7CiAgICAgfTsKIAogICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVh
dGluZ0Vhcmx5Q2VsbFRhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDcgKzMxOCw3
IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICByZXR1cm4g
QmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9p
ZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQotICAgIEJhc2U6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBs
YXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBs
ZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20g
c2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZF
Q1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9
IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzkx
LDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3Jh
Z2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6
ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAg
QVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpOwogICAgIEFT
U0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsKLSAgICBzaXpl
X3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdlIC0g
Y2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3Ro
ZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+
KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAgICAgICAgUHJv
cGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNpdHk7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRhcmdldCArIDE7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZSAtIDE7Cisg
ICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7
CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBoZWFkZXIucHJlQ2FwYWNp
dHkoKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBoZWFkZXIuaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0g
QnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJ
ZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2Uo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAg
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xs
ZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5k
IGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAg
ICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAg
ICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZh
bHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdy
aXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdl
LnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwg
c3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJy
YXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgp
LT5jb3B5SGVhZGVyRnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50U291cmNlID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUp
OworICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBt
YXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgor
ICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCkBAIC0xMjIsOSArMTY4LDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZM
aW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZs
eSAhPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKCkpCisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OCw5IEBA
IHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0
b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAo
c3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0
b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmds
ZXRvbigpKQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0
ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5h
bE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAt
MTYxLDEwICsyMDcsNDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZQogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0
IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRo
YXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Q
cm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpIHsKKyAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGkgPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAp
IHsKKyAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC0+ZmluZChpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
LCBzbG90KTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0xNzQsNiArMjU4LDEzIEBAIHZvaWQg
SlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBl
eGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBp
biB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSAr
MzI2LDE0MiBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsK
LSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGlu
Z0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKGkgPj0gTUFYX0FSUkFZX0lO
REVYKSkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAg
ICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlw
ZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3Ig
YXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxl
bmd0aCA9IGkgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7Cisg
ICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3Qt
PnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhN
YXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAv
LyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQg
dG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVm
YXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAg
ICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX3N0
b3JhZ2UtPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCAwLCAwKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsK
KyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHkt
Pm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCgwKTsK
KyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9p
ZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXItPnR5cGUoKTsKKyAgICBBU1NFUlQob2xkVHlwZSA9PSBO
b25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
KTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCku
c2V0VHlwZShvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJl
c3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQt
Pmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJl
c3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAg
cmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBh
Y3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9i
YWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEp
OworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMzA0LDYgKzUyOCwxMCBAQCBi
b29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlz
T2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRl
bGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTYwLDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blBy
b3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+
KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4g
TUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAg
ICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAg
ICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbERlZmF1
bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3MjgsNTEgQEAgdm9pZCBKU09i
amVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIC8v
IEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNj
ZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJh
eSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAgICAvLyBpcyBpbmNyZWRp
Ymx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBw
cm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBz
dHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRjaCAob2JqZWN0LT5tX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOworICAgICAgICAg
ICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0
cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5
c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwg
cHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwog
ICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkBAIC01MTUsOCArODIz
LDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpT
T2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0g
ICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0
aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUo
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArODgwLDExIEBAIGJvb2wgSlNP
YmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVy
dHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbikKK05FVkVS
X0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChKU09iamVjdCogZ2V0
dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0ZXIoKSkg
eworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihnZXRE
aXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAgIGlmICghc3RydWN0dXJl
KCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJT
bG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOwor
ICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0
aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90LnNldEdldHRlclNs
b3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2ICs5MTAsNTI0IEBAIFN0
cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAgICByZXR1cm4gaW5oZXJp
dG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1Np
emUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMs
IFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewotICAgIEFTU0VSVChu
ZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICBlbnRyeUlu
TWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwor
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisg
ICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlz
IGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdlIG1pZ2h0
IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIGlmIChkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Cisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdldHRl
ciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9sZERl
c2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwor
ICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBzZXR0
ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNj
cmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBvbGRE
ZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNjZXNz
b3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikKKyAg
ICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIp
OworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihl
eGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVz
Y3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NF
UlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0
dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNj
cmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7
CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNwYXJzZUlu
ZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJl
Z3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0aGlz
IHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3Np
bmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBpZiB0
aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVy
cmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUuIGRl
ZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVk
aW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3JpcHRvci5h
dHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAg
IEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBw
cm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUlu
TWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2li
bGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBv
ZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBh
bmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQg
aXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElz
R2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVl
LCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9m
IG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBh
bmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNj
cmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNj
IGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRl
ZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4g
RWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNy
ZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmpl
Y3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1
cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVz
Yy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwg
dGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBp
cyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUu
CisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUlu
TWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Cisg
ICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERl
c2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAg
ICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKKyAgICAgICAgICAgIG1fc3RvcmFn
ZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4K
KyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3Vy
cyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29t
cGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5
RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJl
bnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJy
ZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAg
ICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVy
YWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAg
IC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0
aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJp
Y0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3Vs
dHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNj
ZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBj
b252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAg
ICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhl
IGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAg
IC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNl
dCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAv
LyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVy
dCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3Bl
cnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlz
dGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0g
YW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVl
cy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWku
MS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
U2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMs
IGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYg
Y3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAg
ICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBS
ZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZh
bHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIo
KSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBv
ZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5p
aS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNh
bWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAg
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0
dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0
ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERl
c2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1
dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRo
ZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNj
cmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwor
ICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lz
dGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7
Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiByZXN1bHQgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKKyAgICBhcnJheVN0b3JhZ2UoKS0+
bV9zcGFyc2VNYXAgPSByZXN1bHQ7CisgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0
aGlzLCBmaW5hbGl6ZUFycmF5RGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBK
U09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBkZWxldGUgc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisgICAgc3RvcmFn
ZS0+bV9zcGFyc2VNYXAgPSAwOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkK
K3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisK
KyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBv
ZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
KyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAgUHJv
cGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQo
KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKIAotICAgIC8vIFdl
IGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUg
Ymxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAg
IHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAq
IG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0b3Jh
Z2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7Cisg
ICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBh
IHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUg
YXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFy
eSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRl
bnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5
LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5z
aWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhl
IHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xv
YmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9z
dG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRv
IHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNh
bid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJz
ZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBV
cGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJp
dCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBp
ZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1
c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4K
KyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1v
ZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9u
IGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8
ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAg
ICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZl
Y3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1
ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRo
ZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwor
CisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1
ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1
ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2
YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgor
ICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2ggKGJ1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7
CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0
b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aChpICsgMSkpOworICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Up
Cit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
CisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUg
b2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsK
KyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gbV9zdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIC8vIEZpcnN0LCBoYW5k
bGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAg
IGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRl
bnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0
ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKICAgICAK
LSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5
U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikg
KiBvbGRTaXplKTsKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUg
dG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0
b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFn
ZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUg
dmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNh
bid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJz
ZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIH0KKworICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hpYml0IGdy
b3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAgIGlmICht
YXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
c2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRo
YXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3Vy
cmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRv
aW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5B
cnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVj
dG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90
KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAKLSAgICBB
U1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlTdG9yYWdl
OworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CisgICAgc3dp
dGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDAp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rv
ckxlbmd0aCgwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3Ro
KHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAg
QVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisKKyAg
ICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9
IG1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwg
bWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsK
KyAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRM
ZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAg
IC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7
CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cu
CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0
aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3Jl
YXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKKworICAgIGxhc3RBcnJheVNpemUgPSBtaW4o
aW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gbWluKGlu
Y3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKQoreworICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgoZ2V0QXJyYXlMZW5n
dGgoKSwgZGVzaWduZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rv
ckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sK
KyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBp
bmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZy
b20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0
byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50
bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVj
dG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0
IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9j
IG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5Umln
aHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVj
dG9yTGVuZ3RoKSk7CisgICAgICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAg
bmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9m
IHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cg
YXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihpbmRleEJpYXMg
Pj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAg
Ly8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBw
cmUtY2FwYWNpdHkuCisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9y
TGVuZ3RoICsgbmV3SW5kZXhCaWFzOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3Rv
cmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAg
ICAgICBpbmRleEJpYXMsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1
dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
bik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3Rl
bmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAg
dW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1
Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQo
KTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAg
ICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFT
U0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAg
fQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3Ro
KCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7Cisg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Nw
YXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3Rv
cmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5
cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNo
IGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2Vu
ZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdy
b3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisK
KyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3Ry
dWN0dXJlKCksIHNpbmNlCisgICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRy
YW5zaXRpb24uCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9y
YWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IpCkBAIC02MzAsMTAgKzE0MzUsNDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2Vs
bCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsK
LSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXRE
aXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAg
ICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNo
IChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25B
cnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5n
ZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0K
IAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQpAQCAtNzA0LDI2ICsxNTQ1LDI2IEBAIHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2ds
b2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wg
SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJv
b2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhh
dCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blBy
b3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVp
bmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRl
cyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAg
ICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNh
biB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5
U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3Bl
cnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAg
aWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywg
cHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBh
cmUgcHJldmVudGVkIQotICAgICAgICBpZiAoIW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAg
ICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0
aW9uKQogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3Qg
ZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2Ny
aXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlw
dG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0
dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9y
KGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1w
dHkoKSkKQEAgLTc0OSw4ICsxNTkwLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2lu
ZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlw
dG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmli
dXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwg
Y3VycmVudCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlz
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3Io
ZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2MDMsOCBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBt
ZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZh
bHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTYy
NSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAg
fQogICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRl
c2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0
b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAg
Ly8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3Nv
ciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2NDMsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBh
c0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2NTMsMzcgQEAgYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNl
dEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwog
ICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+
cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRl
clNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nv
cik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0
aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRl
eGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsK
KyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhl
IGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBv
biBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8g
ZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBmYWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXgg
Pj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGlu
ZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blBy
b3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwg
b2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlz
IHJldHVybiB0cnVlLgorICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJu
IG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9y
LCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmlu
ZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3co
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAog
I2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgog
I2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCkBAIC03Nyw2ICs3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBE
b250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4ndCBiZSBkZWxldGVkCiAgICAg
ICAgIEZ1bmN0aW9uICAgICA9IDEgPDwgNCwgIC8vIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24gLSBv
bmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8
PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCisgICAgICAgIEZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUgPSAxIDw8IDYgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhh
dmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCiAgICAgfTsKIAogICAgIGNsYXNzIEpT
RmluYWxPYmplY3Q7CkBAIC05Niw2ICs5Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVi
bGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3Rh
dGljIHZvaWQgZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKQEAgLTEyMCw4ICsxMjIsMTc1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBn
ZXRBcnJheUxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhv
ZHM6CisgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAor
ICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1l
cmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0
RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBj
YW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9idXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IHNldEluZGV4UXVpY2tseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRleChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
d2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAg
ICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5W
ZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2Ug
ZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0
aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVy
dGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
bmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5sZW5ndGgoKSk7CisjaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1i
ZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgor
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9
PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAg
IG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOworI2VuZGlmCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGluU3BhcnNlSW5kZXhpbmdNb2RlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlZmx5LT5hcnJheVN0
b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgLy8gcHV0
RGlyZWN0IGlzIGVmZmVjdGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2RlZmluZU93blBy
b3BlcnR5JzoKICAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3Vs
dGVkCkBAIC0xNDcsNiArMzE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogCiAgICAgICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CkBAIC0yMDMsOCArMzczLDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0
T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsg
fQotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1f
b3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQorICAgICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgICAgIENv
bnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1
dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91
dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KIAogICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZv
ck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTIyNyw3
ICs0MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChvZmZzZXRJbklubGlu
ZVN0b3JhZ2UgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxv
Y2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDEpOwogICAgICAgICAgICAgdmFsaWRhdGVPZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS50eXBlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQpAQCAtMjY5LDE3ICs0NDIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKCk7IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRl
bGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3Bl
cnR5U3RvcmFnZSBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1
dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2Fy
eShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAg
ICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxp
bmVTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0
b3JhZ2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0
dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAt
MjkzLDcgKzQ2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwotICAgICAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpOwogCiAgICAgICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMxOCwxNCArNDg1LDY0
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMg
eW91IGxpa2VseSB3YW50IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAgICAgICAvLyBUbyBjcmVh
dGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cu
Ci0gICAgICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBK
U09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gQnV0dGVyZmx5
OjplbXB0eVNpbmdsZXRvbigpKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRJbmhlcml0
b3JJRChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
bW92ZURpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90
VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAg
dm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90
IHN0b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3Rv
cmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSog
YXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFj
dGlvbnMgb24gd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIC8vIG9iamVjdCBpcyBpbiBhIG1v
ZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlT3JaZXJvKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX2J1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2Uu
IFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMg
dGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29u
dmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAg
ICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KG1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0
aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0
b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTMzOCwx
NiArNTU1LDM5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGlzT2JqZWN0KCk7CiAg
ICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
SlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIAogICAgICAgICB0ZW1wbGF0
ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jiwg
SlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50
cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlKiBj
cmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKLQotICAgICAgICBTdG9yYWdlQmFycmll
ciBtX291dE9mTGluZVN0b3JhZ2U7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWRE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAg
ICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIGJvb2wg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJy
YXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpOworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisKKyAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNo
ZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNo
ZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5D
WQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNr
VHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBj
aGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCogbV9w
YWRkaW5nOwogI2VuZGlmCkBAIC0zNzQsOCArNjE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAg
ICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0
IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9u
KCkpCisgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDkzLDE4ICs3MzMsMTIgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsVGhpcygpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsVGhpc1R5cGU7CiB9CiAKLWlubGluZSB2b2lk
IEpTT2JqZWN0OjpzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRl
cmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKKyAgICBBU1NFUlQoYnV0
dGVyZmx5KTsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBpZiAoIXN0b3JhZ2UpIHsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9CiAgICAgc2V0U3RydWN0dXJlKGds
b2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBzdG9yYWdlKTsKKyAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKIH0KIAog
aW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNTQyLDkgKzc3Niw4IEBAIGlubGluZSBKU09iamVjdCog
YXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUuYXNDZWxs
KCkpOwogfQogCi1pbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMsIDApCitp
bmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogewogfQogCkBAIC01OTIsMTUgKzgyNSwxNiBA
QCBpbmxpbmUgSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdChFCiAKIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAg
IGlmIChXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSkgeworICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUpOworICAgIGlmIChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAg
ICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlv
bi0+aXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
c2xvdCwgbG9jYXRpb24pOworICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMs
IGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpcywgZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIG9mZnNldCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdl
LCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4Niw2ICs5MjAsNyBAQCBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsK
ICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNj
ZXNzb3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCkt
PmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpA
QCAtOTQ1LDEzICsxMTgwLDEzIEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNo
ZWRTdG8KIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOworICAgIHJldHVybiBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9m
ZnNldCkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiB9CiAKIGlubGlu
ZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAg
aWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7CiAg
ICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUgc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9m
ZnNldCk7CiB9CkBAIC05NTksNyArMTE5NCw3IEBAIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRv
QmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAg
ICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3Bl
cnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRh
YmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgp
OwpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3Bl
cnR5CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5m
aXJzdC5nZXQoKSkpOwogICAgIH0KICAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVj
dDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9p
ZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIAogICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYg
cmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2aXNpb24gMTI2NDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChp
c091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsK
IH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3Bl
cnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdl
OwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5
U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3Jh
Z2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwxMSArMTE1LDExIEBA
IGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBS
ZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJh
eVZhbHVlTWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFycmF5RW50cnkg
OiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdyaXRlQmFycmll
cjxVbmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygw
KSB7fQorCisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBjb25zdDsKKyAg
ICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eURl
c2NyaXB0b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZhbHVl
TWFwIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdU
Rjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDY0X3Q+ID4gTWFwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIE5vcm1hbCA9IDAs
CisgICAgICAgIFNwYXJzZU1vZGUgPSAxLAorICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwK
KyAgICB9OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBl
ZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAo
KQorICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQorICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0
eSgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7
CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1v
ZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2Fz
dDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRo
ZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEFkZFJlc3VsdCBhZGQoSlNPYmpl
Y3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMg
dmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQgcmVtb3ZlKGl0
ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92ZSh1bnNpZ25l
ZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3Qg
bXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2Vu
ZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAgRmxhZ3MgbV9m
bGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5
VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGkpCit7CisgICAgU3BhcnNl
QXJyYXlFbnRyeSBlbnRyeTsKKyAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5k
ZWZpbmVkKCkpOworCisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7
CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNp
dHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7CisgICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChz
aXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICAg
ICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAg
ICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisg
ICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQg
dG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlz
IGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2li
bGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUg
YWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxl
KCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlmIChzaG91
bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRyeS5h
dHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQo
KTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmplY3Qq
IHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisgICAg
aWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0
ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1
dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0g
YWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdl
IGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29t
bW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5v
dAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZl
IGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFh
cnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7
CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRv
IGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAg
ICB9CisKKyAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKKyAgICBlbnRyeS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUg
dm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAorewor
ICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOworCisg
ICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdCog
Z2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRl
cikgeworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lkIFNw
YXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0
Cit7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVz
KTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5KSBjb25zdAoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFz
ZTo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBpZiAoTElLRUxZKCFyZXN1bHQu
aXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBKU09iamVj
dCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7CisgICAgaWYgKCFn
ZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdl
dENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRl
ciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworfQorCitp
bmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOworICAgIHJldHVybiBCYXNlOjpnZXQoKTsKK30K
KworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKKyAgICBm
b3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHJldmlz
aW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJy
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU3RvcmFnZUJhcnJpZXJfaAotI2RlZmluZSBTdG9yYWdlQmFycmllcl9oCi0KLSNpbmNsdWRl
ICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLXR5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9y
YWdlOwotdHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3Bl
cnR5U3RvcmFnZTsKLQotY2xhc3MgU3RvcmFnZUJhcnJpZXIgewotcHVibGljOgotICAgIGVudW0g
VW5jaGVja2VkVGFnIHsgVW5jaGVja2VkIH07Ci0gICAgU3RvcmFnZUJhcnJpZXIoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSkK
LSAgICB7Ci0gICAgICAgIHNldChnbG9iYWxEYXRhLCBvd25lciwgc3RvcmFnZSk7Ci0gICAgfQot
ICAgIAotICAgIFN0b3JhZ2VCYXJyaWVyKFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBVbmNoZWNr
ZWRUYWcpCi0gICAgewotICAgICAgICBzZXQoc3RvcmFnZSwgVW5jaGVja2VkKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgUHJvcGVydHlTdG9yYWdl
IG5ld1N0b3JhZ2UpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSwgVW5jaGVj
a2VkVGFnKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0g
ICAgCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJh
dG9yLT4oKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9yKigpIHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAg
ICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICAK
LSAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7
IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0KLSNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODgsOSArNTg4LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaW5saW5lIEpTQ2VsbDo6SlNDZWxs
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgaW5s
aW5lIEpTQ2VsbDo6SlNDZWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgICAgICA6IG1fY2xhc3NJbmZvKHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCkpCiAgICAgICAgICwgbV9zdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwg
dGhpcywgc3RydWN0dXJlKQorICAgICAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKICAgICB7
CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160281</attachid>
            <date>2012-08-23 16:57:04 -0700</date>
            <delta_ts>2012-08-23 18:33:31 -0700</delta_ts>
            <desc>more rebasing</desc>
            <filename>butterflies_patch_15.diff</filename>
            <type>text/plain</type>
            <size>249860</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wOC0yMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSmF2
YVNjcmlwdENvcmUgYnVpbGQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgY2xhbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOwogICAg
IAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5OjpvZmZzZXRPZkxl
bmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0Zvcihp
KSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICAvLyBUZXN0IGJhc2Un
cyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0
cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzgyLDcgKzc4Miw3
IEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk4KICAgICBhc3NlcnQo
bWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VD
YXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKICAgICBs
b2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmpl
Y3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAg
bG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hl
YWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVl
CiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNl
dEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKQEAgLTc5Miw5ICs3OTIsOSBAQCBtYWNy
byBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiAgICAgc3hpMnAgcHJvcGVydHlP
ZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGlu
ZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxP
YmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDgg
KyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBs
b2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2Jh
bChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSwxNSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVu
ZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJ
c0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBl
cyA9IDE1Citjb25zdCBOdW1iZXJPZlR5cGVCaXRzID0gNAorY29uc3QgTnVtYmVyT2ZMZW5ndGhC
aXRzID0gMzIgLSBOdW1iZXJPZlR5cGVCaXRzCitjb25zdCBMZW5ndGhNYXNrID0gKDEgPDwgTnVt
YmVyT2ZMZW5ndGhCaXRzKSAtIDEKK2NvbnN0IE1heGltdW1MZW5ndGggPSBMZW5ndGhNYXNrCisK
ICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlw
ZSA9IDEzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlD
b252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
Ki8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9u
c19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmll
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8v
IFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRo
cmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAu
CisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkg
ZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMs
IHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVu
c2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9B
UlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAt
IHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIp
IGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0
aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBu
dW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGks
CisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5k
IHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBz
cGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxv
d2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAor
Ly8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFs
bCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdp
bGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0
aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRh
IHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQg
d2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUg
ZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlz
IGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUg
bWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVl
KSAvIDIgdG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisj
ZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKEluZGV4aW5nSGVhZGVyOjptYXhpbXVt
TGVuZ3RoKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBp
biBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGlu
IE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUg
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMg
YSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4g
aW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2
YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVt
ZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0
aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBC
QVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3
ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8g
aXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kg
Zm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisv
LyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2Ug
YWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9u
ZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBt
YXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitp
bmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisK
K2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3Vs
dDsKKyAgICByZXN1bHQuc2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGhB
bmRUeXBlKHZlY3Rvckxlbmd0aCwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9y
QXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0
ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2Yg
YW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0
aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFu
ZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhh
dCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlz
IHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxs
b2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2Uo
KSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBB
cnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkg
YmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0
YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBB
cnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJycGV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7
IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMg
ZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0K
KyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+
c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1
cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0
aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJy
YXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9z
cGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAg
ICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9
IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9
CisgICAgCisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7CisgICAgfQorICAgIAorICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhC
aWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50
IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWlu
dHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsg
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpICsgaW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZv
cih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2Rl
ZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAi
SW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRl
IDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xv
YmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgp
IHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2lu
Z2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNp
emUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVy
biAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpIHsgcmV0dXJuIG9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUo
KTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVh
dGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmlu
Z0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdI
ZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGlu
ZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hl
YWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAt
IHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Cisg
ICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRo
ZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAgIC8vIG9mIHRo
ZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5v
dGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5k
IGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgor
ICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBh
bGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkgaW50byBIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNp
dHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBt
dWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5
KiBzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1
dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gK
KworI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodG90YWxTaXplKHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBj
b25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoZ2xvYmFsRGF0YSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQor
eworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5k
ZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxT
aXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykpLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgKnJlc3VsdC0+aW5k
ZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJu
IGNyZWF0ZShzbG90VmlzaXRvciwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFkZXIo
KSwgMCk7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlD
YXBhY2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5
Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChn
bG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweShyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0g
b2xkUHJvcGVydHlDYXBhY2l0eSwgYmFzZShvbGRQcm9wZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXpl
KDAsIG9sZFByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93
UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93
UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5
KG9sZFN0cnVjdHVyZSksIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaW5kZXhp
bmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3
UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFT
U0VSVF9VTlVTRUQoc3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSk7CisgICAgdm9pZCogYmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAg
ICAmYmFzZSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGluZGV4
aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBv
bGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5iYXNlKHBy
b3BlcnR5Q2FwYWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIHJlc2l6
ZUFycmF5KGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVy
ZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykK
K3sKKyAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJs
eSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4g
d2hpY2gKKyAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBu
ZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3Zp
bmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhy
b3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9m
IGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0
bworICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJn
dW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkg
b24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIg
YXJndW1lbnRzIChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5k
IGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgor
ICAgIG1lbW1vdmUocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlD
YXBhY2l0eSwKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0
eSwKKyAgICAgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Cisg
ICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBu
dW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQor
eworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUu
CisgICAgbWVtbW92ZShwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1i
ZXJPZlNsb3RzLAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5LAorICAgICAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNp
dHksIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwor
ICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsg
bnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDYgKzcyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93
blByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFt
ZXNGdW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9p
ZCAoKkdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAg
R2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzOworCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5j
dGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9w
ZXJ0eU5hbWVzOwogCkBAIC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1i
ZXIgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2Us
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJf
aAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2Uu
aCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEJ1dHRlcmZseTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIg
eworcHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5n
dGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAv
LyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIHN0YXRpYyB1bnNpZ25lZCBjb25z
dCBtYXhpbXVtTGVuZ3RoID0gMHgxMDAwMDAwMDsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVy
LCBtX2F1eFdvcmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9sZW5ndGgpOyB9CisgICAg
CisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwg
emVybydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQg
c2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBp
dC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAg
ICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChpbnQz
Ml90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0
aCk7CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJf
dCBhdXhXb3JkKCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVp
bnQzMl90IGF1eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRp
YyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAt
IDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0
b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEluZGV4aW5nSGVhZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0
eVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGlu
Z0hlYWRlcio+KHByb3BlcnR5U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3Rv
cmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAg
ICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8v
IFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkg
Y2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgor
ICAgIHNpemVfdCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIHVpbnQz
Ml90IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRo
ZSBhcnJheSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0
aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisj
aW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6
ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sK
KyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3Rv
cmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
TElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lv
biAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQWN0
aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7CkBA
IC0xMzMsOCArMTMzLDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMo
SgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAgdGhlIEpT
VmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwotICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50
YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhB
dHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBp
c0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogCiAgICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9w
LmNvbSkKICAqCkBAIC00NSw3MSArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihK
U0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQotLy8KLS8vIFByb3BlcnRpZXMgb2Yg
SlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoK
LS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLyAgICogQSBzdG9y
YWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KLS8vCi0v
LyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmll
cnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKLS8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIs
IG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAotLy8g
KHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZG
RkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKLS8vIGludGVnZXIpIGFyZSBub3QgY29uc2lk
ZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJv
cGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZl
ciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCi0vLyB3aGVyZSAoaSA8
PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVk
IGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4g
YXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZwotLy8gZmFzaGlv
bjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFs
dWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAotLy8gICAgIHVubGVzcyB0
aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdv
IGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBp
IDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgZWl0aGVyCi0vLyAg
ICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5
LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKLS8vICAgICBkYXRhIHRoYXQgd291bGQgYmUg
c3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QK
LS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBi
ZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBp
IDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJlIHN0b3JlZAotLy8g
ICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VT
aXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxp
bWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9u
IGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFs
dWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBt
YXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1h
Y2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLS8vIDB4RkZGRkZGRkYgaXMgYSBi
aXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50
ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCi0KLS8vIFRoZSB2YWx1
ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50
cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBh
IHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQotI2RlZmluZSBCQVNF
X1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSds
bCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAotLy8gaXMg
YWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCi0KLS8vIE91ciBwb2xpY3kgZm9y
IHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCi0vLyBG
b3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3
YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgotLy8gYXMgbG9uZyBh
cyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAu
Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OwotCiBjb25z
dCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9OwogCi0vLyBXZSBr
ZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93
bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1
ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgotLy8gVGhpcyB2YWx1ZSBpcyBj
YXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCi1z
dGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVz
KQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5n
dGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Ci19Ci0KIHN0YXRpYyBib29s
IHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9uKQpAQCAtMTE3LDQxOSArNTQsMTUg
QEAgc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQotCi1pbmxpbmUgdm9pZCBK
U0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlKQotewotfQotCi0j
ZW5kaWYKLQotdm9pZCBKU0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIHVu
c2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBCQVNFX1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWdu
ZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7
Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9y
YWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFn
ZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rv
ckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gMDsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci19Ci0KLUpTQXJyYXkqIEpTQXJyYXk6OnRyeUZpbmlzaENyZWF0aW9u
VW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIC8vIENoZWNrIGZvciBsZW5ndGhzIGxhcmdl
ciB0aGFuIHdlIGNhbiBoYW5kbGUgd2l0aCBhIHZlY3Rvci4KLSAgICBpZiAoaW5pdGlhbExlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
dW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IG1heChpbml0aWFsTGVuZ3RoLCBCQVNFX1ZF
Q1RPUl9MRU4pOwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXpl
KGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6
ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9
IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRp
YWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAg
IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7Ci0KLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4ID0gMDsKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVl
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGhpczsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjYW4g
YmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIG9iamVjdC4KLXZvaWQgSlNBcnJh
eTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3ko
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwotICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVT
cGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBT
cGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkpCi17Ci0g
ICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChp
LCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAgICBp
ZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAo
YXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFj
aXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChF
eGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXks
IGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3
YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0
aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8g
ZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNv
IHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4
dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAg
aWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYg
KGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRo
cm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJh
c2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKLSAgICBK
U09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAg
ICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxE
YXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0g
ICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQotaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJl
c3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYg
YWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRo
ZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJh
eSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcg
dG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRl
cmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50cnkuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29u
c3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHZhbHVl
KTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNP
YmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYg
KCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQotCi1pbmxpbmUg
dm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0
cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFsdWUgcmVzdWx0
ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAoTElLRUxZKCFy
ZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBK
U09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7Ci0gICAg
aWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxl
KCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBjYWxsKGV4ZWMs
IGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwot
fQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBCYXNlOjpnZXQo
KTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6
YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIG1fc3Bh
cnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9iYWxEYXRhLmhl
YXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0FycmF5OjpkZWFs
bG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBt
X3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGds
b2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIH0KLQotICAg
IGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFwLT5zZXRT
cGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUg
YSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUs
Ci0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0
IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkp
Lml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdlKSkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNf
Y2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHkobmV3U3RvcmFn
ZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9pbmRl
eEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBKU0FycmF5Ojpw
dXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1h
cCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9s
ZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFw
LT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwotICAg
ICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAg
ICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRv
ci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0
ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAgICAgIGlmIChk
ZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0
b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0
dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNl
dHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAgICAgICAgYWNj
ZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0gICAgICAgIGlm
IChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERh
dGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5S
ZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChkZXNjcmlwdG9y
LmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOwotfQot
Ci0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1l
cmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAgIEFTU0VSVChp
bmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkpIHsKLSAgICAg
ICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJl
Z3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVs
dCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVu
dGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1
cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNv
dWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdT
cGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKLSAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52
YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRlckRpY3Rp
b25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQobWFwKTsKLQotICAg
IC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Q
cm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBp
bmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0
b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0
aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAgICAvLyAzLiBJZiBj
dXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3Qu
Ci0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1
ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoIWlzRXh0
ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERl
c2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3du
IGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1Zh
bHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0g
YXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRo
ZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRy
aWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRv
IGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBh
biBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29y
IHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwg
W1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZh
bHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBh
biBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhl
IG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0
IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAgICAgIFByb3BlcnR5
RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRl
QmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9
IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBlbnRyeUluTWFwLT5n
ZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwg
ZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5t
X2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBl
dmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYg
ZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUg
b2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9u
ZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBh
bGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGVu
dHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwg
ZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAv
LyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0
cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVz
Y3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAvLyA3LmIuIFJlamVj
dCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhl
IFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVh
biBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJh
YmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVy
YWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0
b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQu
Ci0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewotICAgICAgICAv
LyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAgICAgaWYgKGN1cnJl
bnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1
cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQ
IG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29u
dmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQg
W1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0
eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMu
Ci0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAg
b2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHku
Ci0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252
ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCi0g
ICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5
4oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICB9IGVsc2Ug
aWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCi0g
ICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxl
KCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4g
UmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5k
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJs
ZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAg
ICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBb
W1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1Zh
bHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAo
ZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgp
LCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFk
b25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIDEwLmIuIGVs
c2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55
IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNl
bnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAgICAvLyAxMS4gRWxz
ZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9y
KERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1
cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0
XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBj
dXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9y
LnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxl
IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBb
W0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRd
XSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50Lmdl
dHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQs
IHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkg
bmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgotICAgIHB1dERl
c2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7Ci0gICAgLy8g
MTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEpTQXJyYXk6OnNl
dExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKIHsKICAgICBB
U1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3cml0YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0
aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGlj
dGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+
c2V0TGVuZ3RoSXNSZWFkT25seSgpOwogfQpAQCAtNjMzLDM1ICsxNjYsNyBAQCBib29sIEpTQXJy
YXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0CiAgICAgICAgIHJldHVybiBhcnJheS0+ZGVm
aW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwot
fQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAg
ICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICBpZiAoaSA+
PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xv
dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaSA8IHRoaXNPYmpl
Y3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBzbG90
LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0g
ICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7
CisgICAgcmV0dXJuIG9iamVjdC0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHko
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02
NzIsMTAgKzE3Nyw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQot
ICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBpLCBzbG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4
NywyNiArMTg4LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7
Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV07Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5z
ZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7CiB9CiAKQEAgLTcxNCwxMSArMTk1LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
LSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFs
dWUudG9VSW50MzIoZXhlYyk7CkBAIC03MzMsMTk0ICsyMDksOSBAQCB2b2lkIEpTQXJyYXk6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3ko
KTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsK
LQotICAgIC8vIEZhc3QgY2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGgg
JiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVu
Z3RoKSB7Ci0gICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFu
ZGxlIDJeMzItMSAtIHRoaXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCks
IGFuZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFko
aSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOwotICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlz
T2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJh
eSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VS
VChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFu
ZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAg
ICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0
ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVh
dGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAg
Ci0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBp
ICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJl
IHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAg
ICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkp
KSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQg
aGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAg
ICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBo
b2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVl
LgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAg
ICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGli
aXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAg
aWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkg
dXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28u
Ci0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VN
b2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlv
biBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8
fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAg
ICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZl
Y3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5B
cnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVj
dG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBT
dG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotfQotCi1ib29sIEpTQXJyYXk6OnB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNT
RVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRF
WCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBo
YW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgot
ICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBl
eHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNy
ZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAg
ICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwg
YmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAg
ICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAx
KSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBp
dCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgot
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0
b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRo
ZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
LSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0
RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgfQotCi0gICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJv
aGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAg
ICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBv
YmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgbGVuZ3RoID0gaSArIDE7
Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdl
IGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQg
dG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNl
IG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwg
b3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAt
PnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVl
c0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNl
VmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0g
bV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJ
bkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2
ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8v
IFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQot
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wg
SlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjgsMzUgKzIx
OSw2IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1
cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lz
dGVuY3koKTsKLQotICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0
LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVl
U2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0g
ICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhp
c09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0
aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikK
IHsKICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpA
QCAtOTY0LDEyNyArMjI2LDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25z
dCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJy
YXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
Cit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFy
cmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3Jl
ZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBh
cHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50
IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVN
YXApIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlzLnJlc2Vy
dmVDYXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAg
ICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6
ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYg
KG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
LX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgo
dW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0
aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgs
IDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAg
ICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3Zl
Y3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgs
IGxhc3RBcnJheVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBl
cXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGgg
KiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5n
dGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBm
b3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRM
ZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2ly
ZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJ
UlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rv
ckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBp
bmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZy
b20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0
byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50
bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFT
U0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxl
bmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNl
IC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtl
cyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCog
bmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVj
dG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7
Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBB
U1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGgg
PSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBB
dG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAg
dW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcg
c3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAg
IHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4
QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAm
bmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3Vt
IG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92
ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3
VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3Rv
cmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsK
LQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRz
IG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VT
aXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVw
ZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NC
YXNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
Ly8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBu
ZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAgIC8vIElmIG5v
dCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNT
RVJUKGNvdW50ID4gbV9pbmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVu
c3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNp
emUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxl
ZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9p
bmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNz
OgpAQCAtMTA5Myw4ICsyNTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNl
KEpTR2xvCiAgICAgLy8gICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBz
aXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAq
IGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2
ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rv
ckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0
IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUg
ZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNl
ZFZlY3Rvckxlbmd0aCkKQEAgLTExMDIsMjcgKzI2MywxMiBAQCBib29sIEpTQXJyYXk6OnVuc2hp
ZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5zaWduZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGgg
PSB1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7CiAgICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9yTGVu
Z3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIFRoZSBzdW0gb2YgbV92
ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxl
bmd0aCkgPj0gbV9pbmRleEJpYXMpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IG1f
dmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7CisgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggLSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJp
YXMpOworICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRl
c2lyZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxvdywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RILgogICAgIHVuc2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILCBtYXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZl
Y3Rvckxlbmd0aCkgPDwgMSk7CiAKICAgICAvLyBTdGVwIDI6Ci0gICAgLy8gV2UncmUgZWl0aGVy
IGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3Jl
IGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KLQotICAgIHZvaWQqIG5ld0FsbG9jQmFz
ZSA9IDA7Ci0gICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OwotICAgIC8vIElmIHRoZSBj
dXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBs
YXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgotICAgIGlmIChjdXJyZW50Q2FwYWNpdHkg
PiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNp
dHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICBuZXdBbGxvY0Jhc2UgPSBzdG9y
YWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENh
cGFjaXR5OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShkZXNpcmVkQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5
ID0gZGVzaXJlZENhcGFjaXR5OwotICAgIH0KLQotICAgIC8vIFN0ZXAgMzoKICAgICAvLyBXb3Jr
IG91dCB3aGVyZSB3ZSdyZSBnb2luZyB0byBtb3ZlIHRoaW5ncyB0by4KIAogICAgIC8vIERldGVy
bWluZSBob3cgbXVjaCBvZiB0aGUgdmVjdG9yIHRvIHVzZSBhcyBwcmUtY2FwYWNpdHksIGFuZCBo
b3cgbXVjaCBhcyBwb3N0LWNhcGFjaXR5LgpAQCAtMTEzNiwyNCArMjgyLDQwIEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAgICAgLy8gSWYgd2UncmUgbW92
aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0
eSBpcyBiZWluZyByZWR1Y2VkLgogICAgICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IHN0b3Jh
Z2UtPm1fYWxsb2NCYXNlIHx8IHBvc3RDYXBhY2l0eSA8IG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3Ro
KTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVzaXJlZFZlY3Rvckxlbmd0aCA9IHJlcXVp
cmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIGRlc2lyZWRJbmRl
eEJpYXM7CiAKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9z
dENhcGFjaXR5OwotICAgIG1faW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gbV92ZWN0
b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9y
YWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jh
c2UpICsgbV9pbmRleEJpYXMpOworICAgIC8vIFN0ZXAgMzoKKyAgICAvLyBXZSdyZSBlaXRoZXIg
Z29pbmcgdG8gY2hvb3NlIHRvIGFsbG9jYXRlIGEgbmV3IEFycmF5U3RvcmFnZSwgb3Igd2UncmUg
Z29pbmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9uLgorCisgICAgdm9pZCogbmV3QWxsb2NCYXNl
ID0gMDsKKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CisgICAgLy8gSWYgdGhlIGN1
cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxh
cmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCisgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSA+
IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBhY2l0
eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAgIC8vIEZJWE1FIGRvIHRoaW5ncwor
ICAgICAgICBuZXdBbGxvY0Jhc2UgPSBidXR0ZXJmbHktPmJhc2Uoc3RvcmFnZS0+bV9pbmRleEJp
YXMsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJy
ZW50Q2FwYWNpdHk7CisgICAgICAgIGRlc2lyZWRJbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNp
dHkgLSBkZXNpcmVkVmVjdG9yTGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlc2lyZWRJ
bmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBkZXNpcmVkVmVjdG9yTGVuZ3RoOworICAg
ICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0
b3RhbFNpemUoZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGRlc2lyZWRWZWN0b3JMZW5ndGgpKSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRD
YXBhY2l0eTsKKyAgICB9CisKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
bmV3QWxsb2NCYXNlLCBkZXNpcmVkSW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBB
cnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKGRlc2lyZWRWZWN0b3JMZW5ndGgpOworICAg
IG5ld1N0b3JhZ2UtPm1faW5kZXhCaWFzID0gZGVzaXJlZEluZGV4QmlhczsKIAogICAgIC8vIFN0
ZXAgNDoKICAgICAvLyBDb3B5IGFycmF5IGRhdGEgLyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9j
YXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5ICYgZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCiAK
ICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1vdmVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVy
IG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBzaGlmdGluZyBkYXRhCiAgICAgLy8gdG8gdGhlIHJp
Z2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhCaWFzKS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fu
bm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3Ig
KyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0
b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFyZSB3ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2Nh
dGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNlICE9IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsK
LSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4K
LSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLSAgICB9Cisg
ICAgbWVtbW92ZShuZXdTdG9yYWdlLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rv
ciwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAg
ICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG91dE9mTGluZVNpemUs
IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogb3V0T2ZMaW5lU2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTYy
LDEzICszMjQsMTMgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
ewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAg
IC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUs
IHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nICdpZicuCi0gICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSB8fCBtX3NwYXJzZVZhbHVlTWFwKTsKKyAgICBBU1NFUlQoaXNMZW5ndGhXcml0
YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIAotICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CiAgICAgICAgIC8vIEZhaWwgaWYg
dGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCiAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVh
ZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24s
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CkBAIC0xMjIwLDcgKzM4Miw3
IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVuZ3RoOworICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChuZXdMZW5ndGgpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTIyOSw0NCArMzkxLDU2IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3Ro
OwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIAor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KCFsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
fQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOwotICAgIGlmIChpbmRleCA8IG1f
dmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0g
ICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICBK
U1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7Ci0gICAgICAgICAgICB2YWx1ZVNsb3Qu
Y2xlYXIoKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOworICAgICAgICBp
ZiAoaW5kZXggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Cisg
ICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZh
bHVlU2xvdC5nZXQoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7Ci0gICAgICAg
ICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4OwotICAgICAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGluZGV4KTsKKyAgICAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9
CiAKLSAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgotICAgIEpTVmFsdWUg
ZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAvLyBDYWxsIHRoZSBbW0RlbGV0
ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0g
ICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGlu
ZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYg
KCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIC8vIENh
bGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0
aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUp
OworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0KLSAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICBzZXRMZW5ndGgoZXhl
YywgaW5kZXgsIHRydWUpOwotICAgIC8vIFJldHVybiBlbGVtZW50LgotICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFy
ZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTEyNzUs
MzkgKzQ0OSw1MyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB2b2lk
IEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5OiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIDAsIHZhbHVlLCB0cnVlLCBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIAotICAgIC8vIEZhc3QgY2Fz
ZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0g
ICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aCArIDE7Ci0gICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVj
dG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChsZW5n
dGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBQdXNoaW5n
IHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRo
cm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bGVuZ3Ro
KCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAg
ICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCisg
ICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5n
dGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5k
bGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRy
dWUsIHN0b3JhZ2UpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBv
ZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBl
cnJvci4KLSAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bV9sZW5ndGggPT0gMHhGRkZGRkZGRnUp
KSB7Ci0gICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFn
ZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43
IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAg
ICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKCk7CiAgICAgCi0gICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFn
ZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9y
IGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVy
aWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgpAQCAtMTMxOCwxOCArNTA2LDE4IEBAIGJv
b2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAtPSBjb3VudDsKLSAg
ICBzdG9yYWdlLT5tX2xlbmd0aCAtPSBjb3VudDsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgob2xk
TGVuZ3RoIC0gY291bnQpOwogICAgIAotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAg
ICBjb3VudCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwgKHVuc2lnbmVkKWNvdW50KTsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICBpZiAodmVj
dG9yTGVuZ3RoKSB7CisgICAgICAgIGNvdW50ID0gbWluKHZlY3Rvckxlbmd0aCwgKHVuc2lnbmVk
KWNvdW50KTsKICAgICAgICAgCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAg
ICAgICB2ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxl
bmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fdmVjdG9yTGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHN0b3JhZ2UpICsgY291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsK
LSAgICAgICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXpl
KDApKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5
U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLQorICAgICAgICBpZiAodmVjdG9yTGVuZ3RoKSB7
CisgICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgY291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIG1faW5kZXhCaWFzICs9IGNv
dW50OwogICAgICAgICB9CiAgICAgfQpAQCAtMTMzOSw1OSArNTI3LDI5IEBAIGJvb2wgSlNBcnJh
eTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5z
aGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAogYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3Ig
aXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJp
YyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQorICAgIGlmIChsZW5ndGgg
IT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW5kZXhCaWFzID49IGNvdW50
KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAgICAgICBjaGFyKiBuZXdCYXNl
U3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpIC0gY291bnQgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFn
ZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0gICAgICAgIG1f
dmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBj
b3VudCkgeworICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+dW5zaGlmdChzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4Qmlh
cyAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dD
YXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZs
YWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhv
dXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmpl
Y3QtPm1fc3RvcmFnZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhp
c09iamVjdC0+bGVuZ3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdl
LT5tX2FsbG9jQmFzZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1f
dmVjdG9yTGVuZ3RoICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rv
ci0+c2xvdCgpLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJh
c2VTdG9yYWdlICE9IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAg
ICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5
U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1
ZSkgKiB0aGlzT2JqZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQo
dGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VW
YWx1ZU1hcCkKLSAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0
aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCog
YikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFz
TnVtYmVyKCk7CkBAIC0xNDEwLDExMCArNTY4LDEzNSBAQCB2b2lkIEpTQXJyYXk6OnNvcnROdW1l
cmljKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CiAKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxE
YXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
LSAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTs7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+
bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAg
ICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNo
IGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8g
YWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBu
byB1c2VyIHZpc2libGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUg
b3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENv
bnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAo
IWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVG
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBh
cmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UK
LSAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0
aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcg
dGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hl
Y2spOwogfQogCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBp
ZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2Ny
aXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2Ug
dXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lk
ZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRo
b3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRl
cywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1
c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVy
d2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlv
biBpbmNvbnNpc3RlbnQuCi0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0g
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KICAgICAKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7Ci0KLSAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAg
ICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgdmFsdWVzW2ldLmZp
cnN0ID0gdmFsdWU7Ci0gICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24g
c3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlz
ZXMgYW4gZXhjZXB0aW9uLgotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVl
c1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNp
bmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRv
IHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFu
IE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFj
dEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPnN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1f
c3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBi
ZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24g
dGhhdC4KKyAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVy
IGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJn
ZSB0ZW1wb3JhcnkKKyAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVz
IGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhv
ZHMgdGhhdCByZXR1cm4KKyAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyBy
ZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQu
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewor
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNo
VGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBib29sIGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyA9IHRydWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
dmFsdWUuaXNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1
ZTsKKyAgICAgICAgICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRv
U3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAgICAgLy8gYSB0b1N0
cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAg
ICAgICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUo
ZXhlYyk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQg
YmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgICAg
ICAvLyB0aGFuIE8oTiBsb2cgTikuCisgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAg
IGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdp
bigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3Ry
aW5nUGFpckZvclFTb3J0KTsKLSAgICBlbHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVn
aW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMp
CisgICAgICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9m
KFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CiAjZWxzZQotICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtl
bHkgdG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCi0gICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBu
b3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZv
cm0gYSBzdGFibGUgc29ydC4KLSAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CisgICAgICAgIC8vIEZJWE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkg
dG8gbm90IGJlIGEgc3RhYmxlIHNvcnQuCisgICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMg
bm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJm
b3JtIGEgc3RhYmxlIHNvcnQuCisgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMu
c2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KTsKICNlbmRpZgotCi0gICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQg
dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgLy8gaW5jcmVh
c2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1
ZXMuCi0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KQotICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGgg
PSBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7Ci0KLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKLQotICAgIEhl
YXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgIAotICAgIGNo
ZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICAKKyAgICAgICAg
Ly8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJy
YXkgb3IgdmVjdG9yIHN0b3JhZ2UsCisgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8g
aGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgICAgICBpZiAo
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsK
KyAgICAgICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxl
bmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIAorICAg
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWVzW2ldLmZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcykt
PnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KIH0KIAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTYsMTQ4
ICs3NzksMTgzIEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIHZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9u
LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewogICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
Ly8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBvciBpbiB0b051bWJlci4KLQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGgg
aXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QK
LSAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFn
ZS0+bV9sZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1f
bGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZl
Y3Rvckxlbmd0aCArIChtX3NwYXJzZVZhbHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgp
IDogMCk7Ci0KLSAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZM
VHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRo
IDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhl
YyA9IGV4ZWM7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21w
YXJlRnVuY3Rpb247Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBj
YWxsVHlwZTsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxs
RGF0YTsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQot
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
SWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBt
YXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKLSAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1
cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgotCi0gICAgdW5zaWduZWQgbnVt
RGVmaW5lZCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQotICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1
bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVl
LgotICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVk
KSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0u
Z2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IHY7Ci0gICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgIH0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdiA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
IGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAg
ICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgKytudW1E
ZWZpbmVkOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24g
b3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRl
cHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBn
b29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNT
RVJUKHN0b3JhZ2UtPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9y
YWdlLT5tX3NwYXJzZU1hcCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwg
NDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0
aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAg
ICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJl
ZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAg
ICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVy
YXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5k
ZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4K
KyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmlu
ZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWRdLmdldCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5l
ZCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAg
ICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZp
bmVkOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51
bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7
Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJy
YXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYg
KChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0
aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZl
Y3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAg
ICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsK
KyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAg
ICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJh
eSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAg
aWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxl
bmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZp
bmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlTWFwKCk7CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0u
dmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKLSAgICAgICAgICAgIHRyZWUu
aW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURl
ZmluZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQg
YmUKKyAgICAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCisgICAgICAg
IAorICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICAg
ICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRv
ciBpdGVyOworICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgeworICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQot
Ci0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1
dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7
CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNl
ZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENv
bnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgQVNTRVJUKHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURlZmluZWQpOwotCi0gICAgLy8g
RklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUg
YXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUKLSAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3Rv
ciBpbmNvcnJlY3RseS4KLQotICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9y
YWdlLgotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6
SXRlcmF0b3IgaXRlcjsKLSAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKLSAgICAgICAgbV9zdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1sqaXRlcl0udmFsdWUpOwotICAgICAgICArK2l0ZXI7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIC8vIFB1dCB1bmRl
ZmluZWQgdmFsdWVzIGJhY2sgaW4uCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRVbmRlZmluZWQoKTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMg
aW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7Ci0KLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShT
b3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhl
Y1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1p
bihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAw
OwotICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm47
CisgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3Rv
cjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAg
ICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQotCi0gICAgZm9yICg7IGkgPCBzdG9yYWdlLT5tX2xlbmd0aDsgKytpKQotICAg
ICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogfQogCiB2b2lkIEpTQXJyYXk6OmNvcHlU
b0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1aW50MzJf
dCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOwotICAgIHVuc2lnbmVk
IHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKDsgaSA8
IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZl
Y3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
bGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
dW5zaWduZWQgaSA9IDA7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0g
c3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5n
dGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQotCi0gICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgY2FsbEZyYW1l
LT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQogCiB1bnNpZ25lZCBKU0FycmF5Ojpj
b21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xNzQ1LDEwMyAr
OTYzLDcxIEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2wKICAgICBB
U1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJy
YXk6CisgICAgICAgIHJldHVybiAwOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5t
X2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotCi0gICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7
Ci0gICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQotICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwg
di5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAg
ICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYg
KHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAg
KytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQg
PSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAg
ICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdl
dCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0
b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotCi0gICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgbmV3VXNlZFZl
Y3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKLSAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBw
b3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhl
IGVudHJpZXMgLSBpZiBub3QsCi0gICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgdGhyb3duIGJ5
IGNhbGxlci4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBu
ZXdVc2VkVmVjdG9yTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAg
aWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotICAgIH0KLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kp
Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7Ci0KLSAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAgcmV0dXJuIG51bURlZmlu
ZWQ7Ci19Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotCi12b2lkIEpTQXJyYXk6OmNo
ZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKLXsKLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24pOwotCi0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIGlmICh0
eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICBBU1NFUlQoIW1fc3BhcnNlVmFs
dWVNYXApOwotCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKHR5cGUgIT0g
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRl
ZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVk
LgotICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAg
ICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1V
bmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCAr
PSBtYXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFs
bCB0aGUgZW50cmllcyAtIGlmIG5vdCwKKyAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMg
dGhyb3duIGJ5IGNhbGxlci4KKyAgICAgICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAg
ICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0
ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0K
LSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3Ro
KTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFy
c2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3Jh
Z2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0
aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAg
ICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3Ry
dWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9CiAKLSNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBKU0FycmF5
X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAKICNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMApAQCAtMzAsMTMxICszMiwyMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0FycmF5OwogICAgIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIAotICAgIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdy
aXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25v
d24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7
fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFBy
b3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1v
ZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBl
bnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VN
b2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9Owot
Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0g
ICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAg
ICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAg
LCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VN
b2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2Rl
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNl
TW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5n
dGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5
IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAg
ICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1
bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9t
YXAuZmluZChpKTsgfQotICAgICAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBp
cyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCi0gICAgICAgIHZvaWQgcmVt
b3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KLSAgICAgICAgdm9pZCByZW1v
dmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KLQotICAgICAgICAvLyBUaGVzZSBt
ZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCi0gICAgICAgIGl0
ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLSAgICAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wg
Y29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0K
LSAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KLSAg
ICAgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgotICAgICAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAg
ICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1hcCBtX21hcDsKLSAgICAgICAgRmxhZ3MgbV9mbGFn
czsKLSAgICAgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0gICAgLy8g
VGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEg
SlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQotICAg
IC8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFp
bmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKLSAgICAv
LyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhl
cmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCi0gICAgLy8gaXMg
dXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxv
Y2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6Ci0gICAgLy8gICAgIGdldFN0b3Jh
Z2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCi0gICAgc3RydWN0IEFycmF5U3Rv
cmFnZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIgcHJvcGVy
dHkgb24gdGhlIGFycmF5Ci0gICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIHZvaWQqIG1fYWxsb2NCYXNlOyAvLyBQb2ludGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1
cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBpbmcgdGhpcyBwb2ludGVyIGRvZXMgZWxpbWluYXRlIGZh
bHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBsZWFrIGRldGVjdG9yLgotI2lmIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCi0gICAgICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1l
bnQgcHVycG9zZXMuCi0gICAgICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7Ci0g
ICAgICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOwotI2Vsc2UKLSAgICAg
ICAgdWludHB0cl90IG1fcGFkZGluZzsKLSNlbmRpZgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92ZWN0b3JbMV07Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0K
LSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRp
YyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0gICAgfTsKLQogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYWxrZXI7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAgICAgICAgLCBt
X2luZGV4QmlhcygwKQotICAgICAgICAgICAgLCBtX3N0b3JhZ2UoMCkKLSAgICAgICAgICAgICwg
bV9zcGFyc2VWYWx1ZU1hcCgwKQorICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQorICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGggPSAwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheSogdHJ5RmluaXNo
Q3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgpOwotICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7Ci0KICAgICAg
ICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBh
bmQKQEAgLTE2NywyNSArNTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0
aW9uKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0
aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2lt
aWxhciB0byB0aGUgSlNPYmplY3Q6OnB1dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAgLy8gIC0g
dGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAtIGFjY2Vz
c29ycyBhcmUgbm90IGNhbGxlZC4KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHBy
b3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJh
YmxlIGFsbCBzZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyA9IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleChw
cm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19p
bmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVzZSBvbiBuZXcg
YXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KICAgICAg
ICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhyb3dFeGNlcHRp
b24gPSBmYWxzZSk7CiAKQEAgLTE5OSw2NCArNzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAg
Ym9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogCi0gICAgICAg
IGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3Ro
ICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1
bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkp
OwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkg
PCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAg
ICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
LSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIEFTU0VS
VChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4K
LSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7
Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0lu
VmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8g
bm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVz
LgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIGNvbXBsZXRl
SW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFz
IHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwg
bmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgcHJvcHJldGll
cyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgotICAgICAgICAgICAgQVNT
RVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBib29sIGlu
U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1cm4gbWFwICYmIG1hcC0+
c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVj
U3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwogCkBAIC0yNjUs
MzMgKzg1LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAg
ICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgc2l6ZV90IHN0
b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhX
cml0YWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8
ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCkBAIC0zMDEsNDAgKzEwOSw1
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0ds
b2JhbERhdGEmKTsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKLSAgICAg
ICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
IAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExl
bmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25l
ZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKLQotICAgICAgICBlbnVtIENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNp
c3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQgY2hlY2tD
b25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2sp
OwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3Ro
IG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVy
IG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAgICAgIEFy
cmF5U3RvcmFnZSAqbV9zdG9yYWdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBTcGFyc2VB
cnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1faW5k
ZXhCaWFzKTsgfQogICAgIH07CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1
dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgYmFzZUluZGV4
aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihC
QVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOwor
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAw
OworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRp
ZgorICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9i
YWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGlu
aXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChC
QVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
c3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAg
ICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5
PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAg
ICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsK
QEAgLTM1MywzMCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNK
U0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJy
YXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0
dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZp
bml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBk
ZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0v
LyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdo
aWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihB
cnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNy
b3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8g
YSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcx
MzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFY
X1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAg
ICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
aXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZv
bGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXpl
ID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
ICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAg
ICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNh
bGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAg
IC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAg
ICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZl
Y3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAg
IH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7
CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24g
MTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlND
ZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwogVVN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCop
CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
KyAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
CiAgICAgcHVibGljOgpAQCAtMTQwLDcgKzE0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAgICAgICB9Ci0KKyAgICAg
ICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxp
ZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9
CiAjZW5kaWYKQEAgLTE1OCw2ICsxNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
RHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBm
b3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpT
VmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
ICAgICAgICAgc3RhdGljIFVTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAg
ICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOCw3ICszMTgsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRv
CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rp
b24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzMwLDcg
KzMzMCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAg
IH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0
aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyNjQ4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUg
PSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAg
ICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwog
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUg
c2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwor
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxh
c3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwq
IGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsK
QEAgLTg2LDI5ICs5MSw3MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5h
bWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2Us
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXpl
X3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIEFTU0VSVChidXR0
ZXJmbHkpOworICAgIEFTU0VSVChidXR0ZXJmbHkgIT0gQnV0dGVyZmx5OjplbXB0eVNpbmdsZXRv
bigpKTsKICAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0
eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0
eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdl
ID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxk
Q29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0g
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJv
cGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFn
ZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJl
bnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0
b3JhZ2UgLSAxOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7
CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gaGVhZGVyLnByZUNhcGFj
aXR5KHN0cnVjdHVyZSk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0g
aGVhZGVyLmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgc2l6ZV90
IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAgICBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAg
ICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNp
dHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAor
ICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0
eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7
CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFnZS0+cHJvcGVy
dHlTdG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNv
dW50LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSkt
PmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRh
cmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAg
IG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hl
Y2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2Ug
LSBzdG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1h
cmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb20oKnN0b3JhZ2Ut
PmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3Vy
cmVudFRhcmdldCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0g
bmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgewor
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAoY3VycmVu
dFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbmV3U3RvcmFnZS0+
bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9
IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0
aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBN
YXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFn
ZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAg
ICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkg
KzE2OSw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAK
ICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQ
cm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsK
LSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9y
YWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVT
aXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRo
aXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+
c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQy
LDkgKzE4OSw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAg
ICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAg
ICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2Uo
KTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVT
dG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRo
aXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+
c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOwogCiAgICAg
c2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlubGluZVNpemVG
b3JLbm93bkZpbmFsT2JqZWN0KCk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVj
dC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAgKzIwOCw0OCBAQCBV
U3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplCiAgICAgcmV0dXJuIGluZm8t
PmNsYXNzTmFtZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CisgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29u
c3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKKyAgICAv
LyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhv
dXQgYWxzbyBvdmVycmlkaW5nCisgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgor
ICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSks
IHNsb3QpOworICAgIAorICAgIGlmIChpIDw9IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpdC0+c2Vj
b25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgOC42LjIu
MgpAQCAtMTc0LDYgKzI1OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUp
IHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAv
LyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAg
ICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUg
YXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpT
VmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzMyNywxNDIgQEAgdm9pZCBKU09iamVjdDo6cHV0
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOwor
ICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlm
IChVTkxJS0VMWShpID49IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUs
IHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFy
cmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1f
bnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7
Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgbV92
ZWN0b3JMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRo
ZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQg
YXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBp
ZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25k
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBtX3N0b3JhZ2UtPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCAwLCAwKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
KyAgICBuZXdCdXR0ZXJmbHktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKG1fYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpLT50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0
YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdU
eXBlIG9sZFR5cGUgPSBtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXItPnR5cGUoKTsKKyAgICBB
U1NFUlQob2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIDAsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JB
U0goKTsKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkuc2V0VHlwZShvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAg
ICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9y
TGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5z
ZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0g
MDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAg
IHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJy
YXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRl
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNo
IChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwor
ICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAg
ICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAt
MzA0LDYgKzUyOSwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVj
dC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0
YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTYxLDQ1IEBAIGJvb2wg
SlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2Fz
dDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29u
c3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwor
ICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToK
KyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFwLT5y
ZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0
aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3
MjksNTEgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lk
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBw
ZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGlu
ZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIK
KyAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5l
ZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBt
ZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3
aXRjaCAob2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnR5cGUoKSkgeworICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
dXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVk
PiBrZXlzOworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8
fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAg
ICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigp
LCBrZXlzLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3Zv
aWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2Jq
ZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFt
ZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CkBAIC01MTUsOCArODI0LDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0
YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJh
eSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQog
ICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5z
aW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSAr
ODgxLDExIEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQ
cm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAg
IGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+
Z2V0KCkpLT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBh
c0dldHRlclNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAg
ICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5z
ZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2Nh
dGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90
KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAz
LDI2ICs5MTEsNTI0IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoK
ICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9y
KQogewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisg
ICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNj
cmlwdG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSXQncyBp
bXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5j
ZQotICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAg
IGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmpl
Y3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkK
KyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAg
IGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAg
ICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2Jq
ZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkp
CisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAg
ICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAg
ICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdl
dHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAg
ICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNj
ZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAg
ZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAg
ICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwor
ICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlk
aW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEy
LjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisg
ICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTog
d2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAg
ICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0
dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAg
ICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0
dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAg
IC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEg
dmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAg
IGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlv
bik7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VB
cnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAg
Ly8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBp
bnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVk
IGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJy
ZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAg
ICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVy
dHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3Jp
cHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAg
ICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1d
LCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisg
ICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJp
YnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkK
KyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUu
CisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5
IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBv
ZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFi
bGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQg
YnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBv
ZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9w
ZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8v
IDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRz
OworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAg
ICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwg
ZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKKyAg
ICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBp
biBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmll
bGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBp
biBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDku
MTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdl
dChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5l
cXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcu
IElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgor
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVj
dCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAg
ICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25m
aWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtb
RW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJs
ZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBv
ZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgp
ICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMg
dHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBp
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhh
dmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVz
Y3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAg
ICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVu
dCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9w
ZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3Bl
cnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
IGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVz
IHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8v
IDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8v
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
IFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFs
dWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAm
JiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJs
ZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0
ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
IHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMg
cHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBm
YWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkg
aXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRp
bmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
dG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVj
LCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRy
dWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlE
YXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKCk7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0Ojph
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKKyAg
ICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAgPSByZXN1bHQ7CisgICAgZ2xvYmFsRGF0YS5o
ZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZUFycmF5RGF0YSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sK
KyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBp
ZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBkZWxldGUgc3RvcmFnZS0+bV9zcGFy
c2VNYXA7CisgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworfQorCit2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5
U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4
IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0g
TUFYX0FSUkFZX0lOREVYKTsKKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0
T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9y
YWdlID0gMDsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJz
ZU1hcDsKIAotICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0ND
J3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVu
bmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXAp
ICsgbmV3U2l6ZSArIDE7CisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24n
dCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgewor
ICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZl
IGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAg
ICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9s
ZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRo
ZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3Vj
Y2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9j
YXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkg
LSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBh
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+
cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgewor
ICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdy
aXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5z
aWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsg
MTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8g
V2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2Fu
dCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFy
c2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNl
LCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkg
PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1h
cC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFs
dWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFn
ZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3Iu
CisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZy
b20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRo
ZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3Jb
aV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30K
Kwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAg
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKKyAgICBzd2l0Y2ggKGJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToK
KyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBp
ID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aChpICsgMSkp
OworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49
IG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zdG9yYWdlLT5tX3NwYXJzZU1hcDsKKwor
ICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUg
YSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhl
IGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25h
cnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0
ZW5zaWJsZSgpKTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6
ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAg
ICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRy
eSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVj
dG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3Mh
IC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQs
IGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkg
LSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBh
bGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVy
biBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAg
IH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAg
ICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFi
bGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJv
cGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIGxlbmd0
aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisK
KyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBz
dGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVz
ZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRv
byBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVz
SW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAg
ICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3Ro
LCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0
ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAg
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRo
ZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVj
dG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwor
ICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1cm4g
bmV3UHJvcGVydHlTdG9yYWdlOworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5k
ZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8
PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHk7CisgICAgc3dpdGNoIChidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnR5cGUo
KSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAo
IWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgeworICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2Uo
aSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6
Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2ly
ZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWdu
ZWQgbWF4SW5pdExlbmd0aCA9IG1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlm
IChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCisgICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAg
ICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKKyAgICAg
ICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwo
bmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8g
aW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5n
dGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgfQor
CisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKKworICAgIGxh
c3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisK
KyAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxl
bmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHJldHVybiBnZXROZXdWZWN0b3JM
ZW5ndGgoZ2V0QXJyYXlMZW5ndGgoKSwgZGVzaWduZWRMZW5ndGgpOworfQorCitib29sIEpTT2Jq
ZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkg
aW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3Qg
bW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0
b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRv
IGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3Rv
cmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0
aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhl
c2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4Qmlh
cykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIGlmICghbmV3QnV0dGVyZmx5
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1
dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNv
bWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBl
ZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4Qmlh
cyA9IG1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1Zl
Y3Rvckxlbmd0aCk7CisgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93
aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNh
cGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFzOworICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KAorICAgICAg
ICBnbG9iYWxEYXRhLAorICAgICAgICBpbmRleEJpYXMsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAg
bmV3SW5kZXhCaWFzLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7Cisg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0Ojpj
aGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sKKyAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAo
IXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5
cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9z
cGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAg
aWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAg
dmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2Fz
IGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQor
ICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ip
OworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3Ig
PD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VW
YWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAg
QVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGlu
ZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOwor
ICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsg
Ly8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAg
ICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRl
cmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdT
aXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rp
b24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCisgICAgLy8gd2UgbWlnaHQgYmUgaW4g
dGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwogfQog
CiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0MzYsNDYgQEAgYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAw
OwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAg
aWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0
LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgc3dpdGNoIChtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+dHlwZSgp
KSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3Rv
cmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChp
IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICgh
dmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0
aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9
PSBtYXAtPm5vdEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNzA0LDI2ICsxNTQ2LDI2IEBAIHByaXZhdGU6CiAgICAg
SlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJv
d0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJhY2sgb24g
dGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3Vy
cmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVz
IHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4g
Y2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25m
aWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0
ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgogICAg
IERlZmluZU93blByb3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAvLyBJZiB3
ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxseQogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnQpKSB7CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1
bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAoIW9iamVjdC0+aXNF
eHRlbnNpYmxlKCkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewogICAgICAgICAg
ICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBv
YmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7
CiAgICAgICAgIG9sZERlc2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlm
IChkZXNjcmlwdG9yLmlzRW1wdHkoKSkKQEAgLTc0OSw4ICsxNTkxLDggQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9y
IGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0
eQogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBp
ZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2MDQs
OCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0
b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAg
Ly8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3Bl
cnR5CkBAIC03ODQsOCArMTYyNiw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwo
ZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhl
Yywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRl
c092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVu
dCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBh
biBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2NDQsNyBAQCBib29sIEpT
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFj
Y2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAg
ICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVy
KiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2
NTQsMzcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAg
ICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlw
dG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNp
Z25lZCBhdHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJl
bnQpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRl
ciwgYXR0cnMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgs
IHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgdW5zaWduZWQgaW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3Vt
ZW50cy4KKyAgICAgICAgLy8gZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBmYWxzZS4KKyAgICAg
ICAgLy8gZS4gSWYgaW5kZXggPj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRl
c2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVm
YXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEg
cGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhp
cyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgorICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1
ZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMs
IGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBvYmplY3QtPmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAg
ICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI2NDgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlB1
dFByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9y
YWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCkBAIC03Nyw2ICs3Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBEb250RGVsZXRlICAgPSAxIDw8IDMsICAvLyBwcm9wZXJ0eSBjYW4n
dCBiZSBkZWxldGVkCiAgICAgICAgIEZ1bmN0aW9uICAgICA9IDEgPDwgNCwgIC8vIHByb3BlcnR5
IGlzIGEgZnVuY3Rpb24gLSBvbmx5IHVzZWQgYnkgc3RhdGljIGhhc2h0YWJsZXMKICAgICAgICAg
QWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCisg
ICAgICAgIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDYgLy8gVXNlIGZvciB0cmFuc2l0
aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCiAgICAg
fTsKIAogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CkBAIC05Niw2ICs5Niw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAg
ICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxs
KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTEyMCw4ICsxMjIsMTc1IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAor
ICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2Rz
OgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAg
ICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1l
dGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJh
YmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERp
cmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAg
c2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2Fu
R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBp
IDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGlu
aXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
dGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAg
ICAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7
CisgICAgICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1
ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVj
ayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHBy
b3BlcnRpZXMuCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3
TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMg
YXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xl
bmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9m
IHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9z
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX3N0
b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFy
c2VNb2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgLy8gcHV0RGlyZWN0IGlzIGVmZmVj
dGl2ZWx5IGFuIHVuY2hlY2tlZCB2ZXNpb24gb2YgJ2RlZmluZU93blByb3BlcnR5JzoKICAgICAg
ICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCkBAIC0xNDcsNiAr
MzE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1
ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgICAg
IEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9
IE5vUHJlZmVyZW5jZSkgY29uc3Q7CkBAIC0yMDMsOCArMzczLDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFn
ZS5nZXQoKTsgfQorICAgICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2Uo
KSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgICAgICBj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTIyNyw3ICs0MDAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0
aWNfY2FzdDxzaXplX3Q+KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGlu
ZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpOwogICAg
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjY5LDE3
ICs0NDIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCk7
IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUq
IGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFnZSBncm93
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
QnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3Ry
dWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAg
IH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5E
aWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ2MSwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTgsMTQgKzQ5NSw2NCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtl
bHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2
ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAg
ICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3Qo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IEJ1dHRlcmZseTo6ZW1wdHlT
aW5nbGV0b24oKSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJl
Y3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3Im
LCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CisgICAgICAgIC8vIHN0b3JhZ2UuIFRo
aXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3Rv
cmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBv
ciBub3QgdGhlCisgICAgICAgIC8vIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFy
cmF5IHN0b3JhZ2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlT3JaZXJvKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCisgICAgICAgIC8vIHRoaXMgaWYgeW91
J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhl
CisgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdl
LCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdAorICAgICAgICAvLyBhbHJlYWR5LgorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0
aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC0zMzgsMTcgKzU2NSw0NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAg
ICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRl
cm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIs
IFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSog
ZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAg
ICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5
KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAg
ICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJy
YXlTdG9yYWdlKik7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAg
IGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNl
bHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgICAgICAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgICAgIAogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCogbV9wYWRkaW5nOwogI2Vu
ZGlmCiAgICAgfTsKQEAgLTM3NCw4ICs2MjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgZXhwbGljaXQgSlNO
b25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkK
KyAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00OTMsMTggKzc0OCwxMiBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6aXNHbG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVChidXR0ZXJm
bHkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmICghc3RvcmFnZSkgewotICAgICAg
ICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VS
VCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0KICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxp
bmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDIsOSArNzkxLDggQEAgaW5saW5lIEpTT2JqZWN0KiBhc09i
amVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBhc09iamVjdCh2YWx1ZS5hc0NlbGwoKSk7
CiB9CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKK2lubGlu
ZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5MiwxNSArODQwLDE2IEBAIGlu
bGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUKIAogQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYg
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSk7CisgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uLT5p
c0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBsb2NhdGlvbik7CisgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIG9m
ZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgbG9j
YXRpb24tPmdldCgpLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzLCBnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
IC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVz
cGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtNjg2LDYgKzkzNSw3IEBAIGlubGluZSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBBU1NFUlQodmFsdWUpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZS5hc0luZGV4KCkg
PT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKIAogICAgIGlmIChzdHJ1Y3R1cmUoKS0+aXNE
aWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CkBAIC05
NDUsMTMgKzExOTUsMTMgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
bwogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
OwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0
KSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKIH0KIAogaW5saW5lIGlu
dCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAo
aXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBB
U1NFUlQoIShKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0
KTsKIH0KQEAgLTk1OSw3ICsxMjA5LDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNl
KFByb3BlcnR5TwogaW5saW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
IHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlT
dG9yYWdlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNTeW1ib2xU
YWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7CkBA
IC01OSw3ICs1OSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkK
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0
LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgCiAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2UoUAogewogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0
T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQog
CiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlT
dG9yYWdlX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0
eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9y
YWdlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDExICsxMTUsMTEgQEAgYm9v
bCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIFJlZ0V4
cE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFs
dWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1
YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVu
a25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9
CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZv
aWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3Jp
cHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAg
eworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJ
bnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAg
ICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAg
IH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAg
dHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYg
TWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisg
ICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDAp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwor
CisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYg
U3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAg
ICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7
CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExl
bmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZs
YWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCos
IHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFw
LmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxp
ZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0
b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkp
IHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRh
dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJl
dHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0
ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdz
OworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
X2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJh
eUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAg
ICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAh
PSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVv
Zih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBt
X3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNw
YXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAv
LyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0
aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMg
YSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwg
dGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fp
bi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkg
eworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRo
cm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
KGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJp
YnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBl
bnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwor
ICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAo
IXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwg
Y2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBl
bmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFy
cmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGly
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQo
YXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmly
c3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24g
Y2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Cisg
ICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9u
ZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5
LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVm
aW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0K
KworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxE
YXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lk
IFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBp
ZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZh
bHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7
CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sK
KyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwor
fQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpn
ZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dl
dHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRl
cikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGlu
ZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAorewor
ICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitp
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24g
MTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBT
dG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7
Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlT
dG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNo
ZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAg
IHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAg
Ci0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRh
ZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3
U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRU
YWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3It
PigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4g
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4m
IG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQot
ICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAog
I2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1
ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIK
QEAgLTE0MCw2ICsxNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
ICZzX2luZm8pOyByZXR1cm4gbV90eXBlSW5mbzsgfQogICAgICAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAKKyAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlOyB9CiAK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2ds
b2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpAQCAtMzI3
LDYgKzMyOSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwg
bV9pbmRleGluZ1R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKQEAgLTQwOSw2ICs0MTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7CiAKICAgICAgICAgVHlwZUluZm8gbV90eXBl
SW5mbzsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwogICAgICAgICAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwpAQCAtNTg4LDkgKzU5NiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAg
ICAgOiBtX2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3Ry
dWN0dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZs
eShidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160305</attachid>
            <date>2012-08-23 18:33:31 -0700</date>
            <delta_ts>2012-08-24 13:45:53 -0700</delta_ts>
            <desc>rebasing done</desc>
            <filename>butterflies_patch_16.diff</filename>
            <type>text/plain</type>
            <size>260810</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wOC0yMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSmF2
YVNjcmlwdENvcmUgYnVpbGQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgY2xhbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOwogICAg
IAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5OjpvZmZzZXRPZkxl
bmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0Zvcihp
KSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICAvLyBUZXN0IGJhc2Un
cyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVn
VDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0
cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzgyLDcgKzc4Miw3
IEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk4KICAgICBhc3NlcnQo
bWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VD
YXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKICAgICBs
b2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmpl
Y3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAg
bG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hl
YWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVl
CiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNl
dEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKQEAgLTc5Miw5ICs3OTIsOSBAQCBtYWNy
byBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiAgICAgc3hpMnAgcHJvcGVydHlP
ZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGlu
ZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxP
YmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDgg
KyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBs
b2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2Jh
bChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSwxNSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVu
ZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJ
c0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBl
cyA9IDE1Citjb25zdCBOdW1iZXJPZlR5cGVCaXRzID0gNAorY29uc3QgTnVtYmVyT2ZMZW5ndGhC
aXRzID0gMzIgLSBOdW1iZXJPZlR5cGVCaXRzCitjb25zdCBMZW5ndGhNYXNrID0gKDEgPDwgTnVt
YmVyT2ZMZW5ndGhCaXRzKSAtIDEKK2NvbnN0IE1heGltdW1MZW5ndGggPSBMZW5ndGhNYXNrCisK
ICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlw
ZSA9IDEzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlD
b252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
Ki8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9u
c19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmll
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8v
IFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRo
cmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAu
CisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkg
ZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMs
IHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVu
c2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9B
UlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAt
IHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIp
IGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0
aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBu
dW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGks
CisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5k
IHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBz
cGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxv
d2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAor
Ly8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFs
bCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdp
bGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0
aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRh
IHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQg
d2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUg
ZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlz
IGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUg
bWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVl
KSAvIDIgdG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisj
ZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKEluZGV4aW5nSGVhZGVyOjptYXhpbXVt
TGVuZ3RoKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBp
biBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGlu
IE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUg
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMg
YSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4g
aW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2
YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVt
ZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0
aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBC
QVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3
ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8g
aXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kg
Zm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisv
LyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2Ug
YWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9u
ZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBt
YXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitp
bmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisK
K2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3Vs
dDsKKyAgICByZXN1bHQuc2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGhB
bmRUeXBlKHZlY3Rvckxlbmd0aCwgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9y
QXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRlckZvckFy
cmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0
ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2Yg
YW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0
aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFu
ZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhh
dCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlz
IHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxs
b2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2Uo
KSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBB
cnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkg
YmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0
YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBB
cnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJycGV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7
IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMg
ZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0K
KyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+
c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1
cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0
aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7
IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJy
YXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9z
cGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAg
ICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9
IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9
CisgICAgCisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7CisgICAgfQorICAgIAorICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhC
aWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50
IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWlu
dHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsg
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpICsgaW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZv
cih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2Rl
ZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAi
SW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRl
IDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xv
YmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgp
IHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2lu
Z2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNp
emUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVy
biAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpIHsgcmV0dXJuIG9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUo
KTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVh
dGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1cmlu
Z0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdI
ZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRl
eGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGlu
ZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQ
cm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hl
YWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAt
IHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Cisg
ICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRo
ZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAgIC8vIG9mIHRo
ZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5v
dGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5k
IGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgor
ICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBh
bGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkgaW50byBIZWFw
Ojp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNp
dHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVy
bywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNp
emVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1By
ZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1
dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xv
dHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
dW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0
dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVy
Zmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHZv
aWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRv
dGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGZyb21CYXNl
KHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByb3BlcnR5Q2FwYWNpdHksIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHBy
b3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
OworICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1
cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5KQoreworICAgIHJldHVybiBjcmVhdGUoc2xvdFZpc2l0b3IsIDAsIHByb3BlcnR5Q2FwYWNp
dHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5Ojpi
YXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVh
ZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2Fw
YWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2Fw
YWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksIGJhc2Uob2xkUHJvcGVydHlD
YXBhY2l0eSksIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwg
b2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBh
Y2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRT
dHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3UHJvcGVydHlD
YXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVF9VTlVT
RUQoc3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7
CisgICAgdm9pZCogYmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICAmYmFzZSwK
KyAgICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGluZGV4aW5nSGVhZGVy
KCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNp
emVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
Z2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkocmVzdWx0LT5iYXNlKHByb3BlcnR5Q2Fw
YWNpdHkpLCBiYXNlKHByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgc3RkOjptaW4ob2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIHJlc2l6ZUFycmF5KGds
b2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNo
aWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBB
U1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1
Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNl
IHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKKyAg
ICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBl
eHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3ZpbmcgYSBzbWFs
bCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBv
ZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcg
aXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0bworICAgIC8v
IGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMg
bGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkgb24gdGhlIGNv
bXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRz
IChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNh
dXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgorICAgIG1lbW1v
dmUocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwK
KyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAg
ICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNs
b3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hp
ZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
CisgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVt
bW92ZShwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3Rz
LAorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAg
ICAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHksIHNpemVv
ZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVy
biBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZT
bG90cyktPmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3BlcnR5
TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
OworCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVz
OwogCkBAIC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAg
ICAgICAgICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpk
ZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywg
XAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmlu
ZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZs
eTsKK2NsYXNzIEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVibGlj
OgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUg
Ml4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGVyZSBp
cyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBtYXhpbXVt
TGVuZ3RoID0gMHgxMDAwMDAwMDsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZB
dXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2F1eFdv
cmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9sZW5ndGgpOyB9CisgICAgCisgICAgLy8g
VGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlz
IHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5v
dCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJ
bmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5n
dGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aChpbnQzMl90IGxlbmd0
aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAg
ICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBhdXhXb3Jk
KCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQzMl90IGF1
eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGlu
Z0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFy
cmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4
aW5nSGVhZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJ
bmRleGluZ0hlYWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2Up
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+
KHByb3BlcnR5U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9w
ZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJv
cGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAg
QXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1l
dGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJl
CisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVf
dCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoU3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYXV4
V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0
eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoQW5kVHlwZTsgLy8gVGhlIGxlbmd0aCBvZiB0aGUg
aW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6ZV90IEluZGV4
aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAo
TElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCktPm1faW5k
ZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZKCEo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEluZGV4aW5nVHlwZV9oCisjZGVmaW5lIEluZGV4aW5nVHlwZV9oCisKK25h
bWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOworCisvLyBGbGFn
cyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGljIGNvbnN0
IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSGFzQXJyYXlTdG9y
YWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhl
IGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CisvLyBtYXNrZWQgb2ZmIHVu
bGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3RhdGljIGNvbnN0IEhhZEFycmF5U3Rv
cmFnZSAgICAgICAgICA9IDE2OworCisvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMu
CitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25z
dCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29u
c3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisvLyBN
YXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBBbGxBcnJheVR5cGVzICAg
ICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5n
IHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMx
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAko
cmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIGlubGluZSBib29s
IEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQWN0aXZhdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogICAgIFN5bWJv
bFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVu
ZCgpOwpAQCAtMTMzLDggKzEzMyw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lw
IHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFt
ZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGlt
cGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24g
MTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsK
IAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24g
MTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChh
cEBueXBvcC5jb20pCiAgKgpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NF
UlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RS
VUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0
aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2Nh
dGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAq
IEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMu
Ci0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlk
ZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5E
RVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFs
dWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90
IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2Jq
ZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBp
ZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hl
cmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1h
cC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8v
IGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1
bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVy
dGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhl
cgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJz
ZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdv
dWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0
IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMg
d291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9y
ZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBz
dG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxj
dWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhp
bXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVz
ZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5j
aCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVm
aW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZG
IGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdz
IGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBU
aGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3Ig
ZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVk
IHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZp
bmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNp
emUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQK
LS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9s
aWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFw
LgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgs
IHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFz
IGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNl
IGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsK
LQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5h
bE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAot
Ly8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3
YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0
aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFs
dWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFi
b3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51
bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
fHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0
aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkg
KzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5l
IHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsK
LX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0K
LSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAg
IHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JM
ZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2Up
KQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFy
cmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBt
X3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAg
bV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hD
cmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwot
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3Ro
cyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRp
YWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwg
QkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9y
YWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAw
OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3Rv
cmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0
b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGgg
PSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0
aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwot
Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rp
b24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lk
IEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFs
bG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRS
ZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBp
KQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21h
cC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7
Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFw
OjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0
ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRk
KGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZp
cnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9u
IGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAot
ICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRv
bmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJh
eS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAg
ICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBl
bnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7
Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVy
KCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNh
bGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5n
ZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywg
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRl
bnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VS
VCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewot
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwot
ICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQot
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0
KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJ
S0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
Ci0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigp
OwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRo
b2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2Fs
bChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNl
TW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFz
ZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAu
ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpT
QXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAg
ICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFs
RGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7
Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0
aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJz
ZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9
Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
cC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3
YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2Fu
IHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVk
IHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0
aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5l
d1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1f
YWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAg
IG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNB
cnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVu
dHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlw
dG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50
cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgp
KTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3Nv
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAg
IGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRl
c2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0
b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAg
ICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBk
ZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlw
dG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBH
ZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAg
ICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAg
ICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5n
bG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1
dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRv
cikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVz
Y3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5l
T3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBB
U1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7
Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkg
dG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0
aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xs
IGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5
IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0
aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9w
ZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRl
cmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2Ny
aXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50
ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7
Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtb
R2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUg
UC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQo
dGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFs
dWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8g
My4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4g
UmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxl
IGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYg
KCFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJh
dG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5z
aWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3Jp
cHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRl
IGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hv
c2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3Vy
YWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNj
LiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0
aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlz
IHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11
c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBh
Y2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtb
R2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJp
YnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFs
dWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRl
IG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMg
ZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJ
bk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3Rv
cmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXgg
KyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1
ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRy
dWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhl
IHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNv
cnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1l
VmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsK
LSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0
eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAg
ICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERl
c2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxl
IGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5i
LiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQg
YW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhl
IEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNE
ZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJl
cXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAg
ICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlm
IChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFu
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0Rh
dGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkg
bmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkg
dG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2Yg
dGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxl
XV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUg
cHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQg
dmFsdWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBu
YW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHBy
b3BlcnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0
aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFi
bGVdXQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBw
cm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAg
fSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwg
dGhlbgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZp
Z3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAx
MC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZh
bHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ug
d3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAg
ICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBp
ZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERl
c2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3Iu
dmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9m
IGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAx
MC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUs
IHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0
ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8g
MTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVz
Y3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBm
aWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRo
ZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tT
ZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50
LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBp
ZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNj
LltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3Vy
cmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBw
cmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHBy
b3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAg
ICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwot
ICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0Fy
cmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7
CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICgh
aXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBl
bnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAg
ICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9v
bCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJy
YXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhy
b3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAg
aWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
aSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVj
dC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHNsb3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwog
fQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0
aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
LSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAg
IHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2Rl
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0
aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0Fy
cmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJh
eTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlm
IChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChp
ID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNP
YmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4x
IDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVO
TElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMs
IGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFs
aWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAg
ICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBt
YXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMg
bm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBh
bmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkp
OwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
LSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0
b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRo
ZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
LSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywg
dGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3Vy
cmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRv
aW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7
Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5j
cmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZh
bHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8g
dGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0g
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNs
b3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2
YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgot
ICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJS
QVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBG
aXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNl
IG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBp
cyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUs
IGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUo
KSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9s
ZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRv
IHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9y
LgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRh
LCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ug
c2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZl
Y3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNl
IGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAm
IGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERh
dGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBt
YXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0K
LQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUu
Ci0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVy
dHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9
IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAg
ICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGls
bCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBh
IHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBz
cGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5B
cnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBp
ZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBu
dW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJp
bmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVt
VmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50
byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5z
ZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0K
LSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVl
U2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVl
U2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4
LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhp
c09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xv
dCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0g
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihhKTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNv
cnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9p
ZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0
eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBp
cyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZm
ZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1f
dmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0K
LQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5
cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQot
ICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmly
c3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXpl
KCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAog
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9y
TGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFz
ZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1f
bGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0
aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlm
ICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVk
TGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRp
Y2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3
TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVh
c2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8v
IFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGlu
Y3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChk
ZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+
PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVu
Z3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0
aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5n
dGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVy
bmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZh
bHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJz
IGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVm
ZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsK
LSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdW
ZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZh
c3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxs
b2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAg
IHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VT
aXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3Rv
cmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9y
TGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBh
Y2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3Ro
LgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxh
dGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0
eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBu
ZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFj
aXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8g
VGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNl
ZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0
aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAg
ICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4
Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBj
b250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBz
dG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0
aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5l
d0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZl
cyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAv
LyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgot
ICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFj
aXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJv
cGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZl
IGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3Jh
Z2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkg
bWV0cmljczoKQEAgLTEwOTMsOCArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRT
bG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1
cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAg
ICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3Jv
dyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVz
ZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hl
Y2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxv
dy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9y
TGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3Vt
IG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92
ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNp
dHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlv
biBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2Yg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkg
PSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVx
dWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3Jl
IGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBv
ciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdB
bGxvY0Jhc2UgPSAwOwotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJ
ZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5v
dCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENh
cGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVu
dENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNl
ID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1
cnJlbnRDYXBhY2l0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0Fs
bG9jQmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VD
YXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAg
Ly8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAv
LyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5
LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdl
J3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3Qt
Y2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAh
PSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAt
IGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGgg
PSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNp
cmVkSW5kZXhCaWFzOwogCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0
aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUg
ZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9y
IHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0Fs
bG9jQmFzZSA9IDA7CisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElm
IHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90
IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50
Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0
aGluZ3MKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1f
aW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5
ID0gY3VycmVudENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFn
ZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBk
ZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0
aDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRl
cmZseTo6dG90YWxTaXplKGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVjdG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBk
ZXNpcmVkQ2FwYWNpdHk7CisgICAgfQorCisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3Ro
KTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAg
ICAvLyBTdGVwIDQ6CiAgICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIg
bmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0
aW9uLgogCiAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5n
IGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRv
IHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1t
b3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1f
dmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9y
YWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3
IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxv
Y0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0g
ICAgfQorICAgIG1lbW1vdmUobmV3U3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0
aCk7CisgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxp
bmVTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG91dE9mTGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTE2MiwxMyArMzI0LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYywKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5n
dGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
Pmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJz
ZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChp
c0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVu
Z3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBG
YWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5n
dGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3
ICszODIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBz
dG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5t
X2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFi
bGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAg
ICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5k
ZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xv
dCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFs
dWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAg
ICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwot
ICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBK
U1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUg
W1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0
cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0
eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVt
ZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChl
eGVjLCBpbmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1d
IGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAg
ICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHku
Iik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRz
ICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4
LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVu
Z3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJ
bmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBA
IC0xMjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVj
KQogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5
U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBG
YXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBt
X251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVu
Z3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsK
LSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0
aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3Iu
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBp
ZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
UHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHks
IGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2Ut
Pmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+
cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOwor
ICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAg
My5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJy
YXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZh
bHVlLCB0cnVlLCBzdG9yYWdlKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIC8vIFB1c2hpbmcgdG8gYW4g
YXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEg
cmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZG
RkZGRkZ1KSkgewotICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMs
IHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAx
NS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQotCi0gICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAg
ICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSgpOwogICAgIAotICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBo
b2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRo
ZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KQEAgLTEzMTgsMTggKzUwNiwx
OCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291
bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
aWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1
bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3Vu
dDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRW
ZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rv
ckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9y
YWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0
cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxl
bmd0aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBtX2luZGV4Qmlh
cyArPSBjb3VudDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMzksNTkgKzUyNywyOSBAQCBib29s
IEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVu
c3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhv
bGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhl
IGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAo
bGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFy
c2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+
PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciog
bmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFz
ZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAg
ICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJp
YXMgPj0gY291bnQpIHsKKyAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZS0+bV9p
bmRleEJpYXMgLT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291
bnRTbG93Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1
Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06
ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0g
c3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2Jq
ZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+
bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAg
IGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7
Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0
cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9m
KEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09i
amVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAg
QVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1f
c3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0K
LQogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0
IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+
KGEpLT5hc051bWJlcigpOwpAQCAtMTQxMCwxMTAgKzU2OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpz
b3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkp
OwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qg
c2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5p
c051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29y
dGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0
b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9y
YWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVz
QXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMp
CisgICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBl
LCBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29u
LCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAg
ICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRo
ZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBp
bmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0
b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29t
cGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0g
ICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBj
b21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJp
YyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNv
cnQuIFdlCi0gICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwg
c2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3
YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0
b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29t
cGFyZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0
ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7
Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcg
SmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBp
dCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBh
IGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJp
c29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIu
IEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMg
aGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBv
ciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUg
ZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFs
dWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4o
KSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9y
KCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVl
c1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3Ry
aW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNh
bGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQg
PSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdo
dCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAg
Ly8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9
IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9y
YWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5n
cyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJh
c2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1l
bnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVz
IGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90
ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmlu
ZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hh
bmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25z
aXN0ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVz
KGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2lu
KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBB
U1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0
ID0gdmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8g
Y2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8v
IGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykK
KyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5n
SW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGht
IG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIK
KyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09S
VCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1
ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBh
cmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24g
aXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYy
IGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2Vy
cyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMg
bGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2
MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3Nl
cnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBj
aGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8v
IGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1
YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVu
Z3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1f
bGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0K
LSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAK
LSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVu
Z3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAg
ICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRh
KCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9y
YWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAg
ICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0x
NTk2LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUgCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVG
dW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsK
ICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNv
bXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVl
IGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBu
byBnb29kCi0gICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVCht
X3N0b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9y
YWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9
IHVzZWRWZWN0b3JMZW5ndGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAt
PnNpemUoKSA6IDApOwotCi0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAv
LyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2V4ZWMgPSBleGVjOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9u
ID0gY29tcGFyZUZ1bmN0aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxU
eXBlID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEg
PSAmY2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3Vu
dCk7Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganND
YXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZl
Y3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20g
dW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2ln
bmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291
bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0
aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVt
RGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwot
ICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2Owot
ICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAg
ICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1
bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0g
dHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAg
dG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAg
ICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVu
Z3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGgg
KyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDog
MCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNv
bXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0
PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9k
aWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQK
KyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcg
dGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAw
OworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50
aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhl
IHRyZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytu
dW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251
bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICAg
ICArK251bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmlu
ZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+
c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRl
IGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0
b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5l
d1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAK
KyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwor
ICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUg
YW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAg
ICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRW
ZWN0b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsr
bnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVh
bGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAg
ICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+
PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFy
ZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5n
IG1pZ2h0IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5Lgor
ICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2Uu
CisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6
SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAg
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAg
ICAgIH0KLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBv
dXQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG5ld1VzZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFT
U0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQot
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRo
ZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRv
IG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQ
dXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQg
dmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lz
dGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+
bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5n
dGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsr
aSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkp
OwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9y
ICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBt
aW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwg
dmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9
IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNh
bGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNB
cnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0
NSwxMDMgKzk2Myw3MSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0ds
CiAgICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3Rv
cmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIG51bURlZmlu
ZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVt
RGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1Zh
bHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYg
KCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAg
ICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1E
ZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAg
CisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZp
bmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZp
bmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdV
c2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5l
d1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVj
dG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
aXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQg
YWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRo
cm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFs
RGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwot
ICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0
aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBu
dW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0Fy
cmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAg
ICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3Nw
YXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0
eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVl
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVk
ICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JM
ZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0
aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
dGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8g
aG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCisgICAgICAgICAgICAgICAgLy8gZXhjZXB0
aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVj
dG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9y
TGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFy
cmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsK
ICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5t
X2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQo
KTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXgg
PCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0
b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7
Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAh
PSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYg
dGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYg
SlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9u
cy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogCiAjZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZIDAKQEAgLTMwLDEzMSAr
MzIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1
YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmll
cjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0
ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29u
c3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lk
IGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25T
cGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9
OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90Piwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAg
ICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAg
U3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAg
ICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJh
dG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAg
ICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wg
c3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3Bh
cnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8
IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRP
bmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdz
IHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRo
b2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVk
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0Fy
cmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0
dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSBy
ZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2
b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZv
aWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8g
VGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAg
ICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAg
ICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5z
KGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgp
OyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAg
ICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigp
OyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVu
ZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdz
IG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQot
ICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJy
YXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3Jh
Z2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhl
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQg
Ci0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0
aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAg
IC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1
YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBn
ZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBB
cnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgi
IHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJl
c3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1p
bmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3Ig
YWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbklu
ZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNl
Ci0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVu
Z3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBm
cmllbmQgY2xhc3MgSklUOwogCisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJh
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAg
ICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAg
ICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRy
eUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwot
CiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3Nl
IHNpemUgYW5kCkBAIC0xNjcsMjUgKzU5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAg
IC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAg
LSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0
ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNv
bmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0
SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ug
b24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXku
CiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93
RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0xOTksNjQgKzc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAg
ICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAot
ICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rv
ckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0
SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbkdldElu
ZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJl
dHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAg
ICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9y
YWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAg
ICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2Vx
dWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1W
YWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNr
IHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJv
cGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBj
b21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVy
dGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdM
ZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHBy
b3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0dXJuIG1hcCAm
JiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIApA
QCAtMjY1LDMzICs4NSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3Jh
Z2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhP
ZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
QXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJik7Ci0KICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIHNp
emVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBib29sIGlz
TGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2Up
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAgICAgICAgICAgICByZXR1cm4g
IW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KIApAQCAtMzAxLDQw
ICsxMDksNTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VN
YXAoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwog
Ci0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CiAKLSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7Ci0KLSAgICAgICAgZW51
bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0
b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OwotICAgICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5j
eUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBtX3ZlY3Rvckxlbmd0aDsgLy8gVGhlIHZhbGlk
IGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsgLy8gVGhl
IG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2NrcyBiZWZvcmUgQXJyYXlTdG9yYWdlLgotICAg
ICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsKLQotICAgICAgICAvLyBGSVhNRTogTWF5YmUg
U3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUgcHV0IGludG8gaXRzIG93biBKU0NlbGw/Ci0g
ICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAgICAg
c3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5
LCBtX2luZGV4Qmlhcyk7IH0KICAgICB9OwogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0Fy
cmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIGJh
c2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFw
ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7
CisjZW5kaWYKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkq
IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0g
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3Rk
OjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBp
bmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAg
c3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7CisjZW5kaWYKKyAgICAg
ICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNW
YWx1ZSk7CkBAIC0zNTMsMzAgKzE3MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSBi
b29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwpIHsgcmV0dXJuIGNlbGwtPmNsYXNzSW5mbygpID09
ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZSB2
KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlzSlNBcnJheSh2LmFzQ2VsbCgpKTsgfQogCi0vLyBU
aGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBv
biB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3Rv
cmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5
U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxl
bmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZG
RkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChz
aXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8g
YmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNp
bmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2Js
ZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0FycmF5OjpzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0
b3JMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHByb3ZpZGVkICh2ZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92ZSAt
IHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7
Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBkZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBpbiBwcmV2
aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSwgcHJvdmlkZWQgdGhhdAot
ICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGNvcnJlY3RseSBkZWZpbmVk
KS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkpOwotICAgIAotICAgICAgICByZXR1cm4gc2l6
ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMp
CiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2
b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJpbmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUYWcp
OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU0NlbGwoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CisgICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJm
bHkqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAogICAgIHB1YmxpYzoKQEAgLTE0MCw3ICsxNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQot
CisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUq
IHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRH
ZXQoKTsgfQogI2VuZGlmCkBAIC0xNTgsNiArMTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5j
dGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0
YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCop
OwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0
aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9z
dEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAg
LTMzMCw3ICszMzAsNyBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNP
CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIp
OwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQg
SlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lv
biAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sg
b2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNl
IHRoaXMKKy8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cg
dGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0
aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRpYyB1bnNp
Z25lZCBsYXN0QXJyYXlTaXplID0gMDsKKwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3co
SlNDZWxsKiBjZWxsKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0
dXJlKCk7CkBAIC04NiwyOSArOTEsNzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJv
cGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNp
dE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3RvcmFnZSBz
dG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBBU1NF
UlQoYnV0dGVyZmx5KTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlT
aW5nbGV0b24oKSk7CiAgICAgQVNTRVJUKHN0b3JhZ2VTaXplKTsKICAgICAKLSAgICBzaXplX3Qg
Y2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQo
Y2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVv
ZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9m
U3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJ
ZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVz
KSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19j
YXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5C
eXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VP
ZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2Ug
PSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3Vy
Y2UgPSBzdG9yYWdlIC0gMTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSgpOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5pbmRleGlu
Z0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IGhlYWRlci5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyA9IGhlYWRlci5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAg
IHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAg
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSgKKyAg
ICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSks
IGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHksIGhlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
ICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAg
UHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOworICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2Ut
PnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VT
aXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRT
b3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1
cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQot
ICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVy
OjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhz
dG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tKCpz
dG9yYWdlLT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBzdG9y
YWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQt
LTspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKykt
PmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAg
KGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG5ld1N0
b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2
aXNpdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idXR0
ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUg
cHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAg
ICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Is
IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAg
ICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAg
LTEyMiw5ICsxNjksOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
CiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
Ci0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9y
YWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAg
ICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgp
KTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
QEAgLTE0Miw5ICsxODksOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVT
dG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0
T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAg
ICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsK
IAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxp
bmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRo
aXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsyMDgs
NDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAgIHJldHVy
biBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJv
cGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVj
dGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90
CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3Qo
KSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBOb25BcnJheToKKyAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAg
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwogfQogCiAvLyBFQ01B
IDguNi4yLjIKQEAgLTE3NCw2ICsyNTksMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsK
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
CisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkg
eworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENoZWNrIGlm
IHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4K
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszMjcsMTQyIEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBz
bG90KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAK
KyAgICBpZiAoVU5MSUtFTFkoaSA+PSBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5n
dGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0g
bGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNs
b3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0
aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBt
YXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUo
KTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3Ro
KCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRy
eSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAg
Ly8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAg
ICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3It
PnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNI
KCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVy
Zmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
MCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xk
VHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQo
IXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7
CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQt
Pm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwor
I2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9u
SW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7Cisj
ZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5U3RvcmFn
ZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0
dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xF
Tik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwor
ICAgICAgICByZXR1cm4gc3RvcmFnZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CkBAIC0zMDQsNiArNTI5LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXgKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlz
T2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJl
aWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1NjEsNDUgQEAg
Ym9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xv
dChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KSk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90
KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
LS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09i
amVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2Jq
ZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzI5LDUx
IEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMg
dG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJv
cGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAg
Ly8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEg
ZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMg
YSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2gg
KG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAgICBjYXNl
IE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
c3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5
czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShp
dC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtl
eXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+
Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpA
QCAtNTE1LDggKzgyNCw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGds
b2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhp
cyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAg
ICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg4MSwx
MSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAo
SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgp
KS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0
ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBp
ZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2Fj
aGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24o
bG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlz
LCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xv
dC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiAr
OTExLDUyMiBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAg
cmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhl
Y1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsK
LSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAm
IH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7
CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdl
dHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAw
OworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBz
ZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGRE
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikK
KyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0
ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFw
LT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xk
RGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRp
b24uCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citi
b29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlm
ICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3Jl
IHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAv
LyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1
dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8v
IGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1
dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBz
dGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVl
IHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAo
IWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwor
ICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlF
bnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIDIu
IExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJu
YWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQg
ZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBp
cyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAg
ICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3Io
RGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAgICAg
Ly8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tF
bnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAg
ICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUg
ZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5CisgICAg
ICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAg
ICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNj
cmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKKyAg
ICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0g
YW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Cisg
ICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVz
YyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkK
KyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmMu
IFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKKyAg
ICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8
IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAgICAg
IHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1
bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAgICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERl
c2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3Vy
cmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4K
KyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3Vy
cmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxU
byhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0
aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYg
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBm
aWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFj
aCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBj
dXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNE
YXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRp
ZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0
b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8g
OS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlz
IHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHku
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
CisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bwor
ICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMu
IEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0Nv
bmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRl
cyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIg
ZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlw
dG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8v
IDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAg
ICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0p
IGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJl
c2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNl
bnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2Uu
CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAg
ICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZh
bHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkg
bmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRo
ZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVz
dHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5h
ZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFz
dG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFw
OworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0
IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9B
UlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGlu
ZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9
IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7
CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRo
aXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBw
b2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICgh
Z2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3
UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5l
d1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3Vy
cmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAg
ICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRl
cmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAg
QVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXpl
b2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICAgICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3Is
IGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYm
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAg
IC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4g
cmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHBy
b3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAg
bWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0
dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNz
YXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChp
ID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBs
ZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5
KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7Cisg
ICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRo
ZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVl
ICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3Vs
ZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51
bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXpl
KCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
UmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVt
VmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29w
eSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhl
IG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVj
dG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwor
ICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBw
cm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlz
IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJB
WV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgewor
ICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0
TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3Vs
ZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2
ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0
b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFw
KSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhp
cyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAg
ICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5n
dGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlz
IG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRv
IGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAg
ICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgp
OworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3
aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250
aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Ig
d291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25l
ZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+
c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVj
dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVyZWFkIG1f
c3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFs
dWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Cisg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxs
b2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBp
bnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2
ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkg
aW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQo
aSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7Cisg
ICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxk
VGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFy
cmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIGkgKyAxKSk7CisgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9y
YWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5z
aWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsK
KyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUp
OworCisgICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0
aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJh
eVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50
IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkg
LyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5z
aWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5v
dCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
ZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAx
KTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgp
OworCisgICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RP
Ul9HUk9XKTsKKworICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgcmV0dXJuIGdl
dE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJheUxlbmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7Cit9CisK
K2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVz
IHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBp
dCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8g
dG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2Ug
dGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRl
eEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9y
TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5n
dGgobmV3TGVuZ3RoKTsKKworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFj
aXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VM
WSghaW5kZXhCaWFzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCks
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFu
ZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVy
Zmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVj
YXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCisgICAgdW5zaWduZWQg
bmV3SW5kZXhCaWFzID0gbWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2Fw
Y2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBu
ZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7CisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJy
YXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
LAorICAgICAgICBuZXdJbmRleEJpYXMsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JM
ZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwor
ICAgIHJldHVybiB0cnVlOworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQg
SlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0
eXBlKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygp
OworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsK
KyAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFz
dG9yYWdlLT5tX3NwYXJzZU1hcCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAg
ICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhl
IG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3Rl
bmN5Q2hlY2spCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVj
dG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1
ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgeworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
QVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaykKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1Vu
ZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0
ZWQuCisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKworQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAg
QVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQg
dGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQor
ICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUg
c3RydWN0dXJlIGluLXBsYWNlLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1By
b3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7
CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTYzMCwxMCArMTQzNCw0NiBAQCBib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRl
cyA9IDA7CiAgICAgSlNDZWxsKiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkK
KyAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihv
YmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09i
amVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFw
LT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU0NCwyNiBAQCBwcml2YXRlOgogICAgIEpTR2xv
YmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNl
cHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRoZSBn
bG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJlbnRs
eSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3aGVu
IHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNoYW5n
aW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmlndXJh
YmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBG
b3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBEZWZp
bmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2UgaGF2
ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJy
ZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5sZXNz
IGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0ZW5z
aWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAgIGlm
ICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAg
ICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4g
cHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2Ny
aXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVz
Y3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTU4OSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBz
aW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAg
ICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFj
dXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBw
dXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAyLDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENo
YW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQpA
QCAtNzg0LDggKzE2MjQsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2Ny
aXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
biBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwog
ICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhp
c3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjQyLDcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nlc3Nv
ciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjUyLDM3
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgZ2V0
dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRl
ck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWduZWQg
YXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KTsK
LSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0
dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVu
IHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMu
CisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8v
IGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltb
VmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQg
W1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3Np
bmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2Fs
bCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisg
ICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRl
eCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
b2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQdXRQcm9w
ZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUJh
cnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtNzksNiArNzgsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0
dGVyL3NldHRlcgogICAgIH07CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRP
bmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJU
KERvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3dfRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0ZSA8IEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVybmFsQXR0
cmlidXRlLCBGdW5jdGlvbl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBD
T01QSUxFX0FTU0VSVChBY2Nlc3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFjY2Vzc29y
X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNGaW5hbE9i
amVjdDsKIAogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05Niw2ICsx
MDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplQXJyYXlE
YXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAsOCArMTI4
LDE3NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20o
RXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1
dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBu
b3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KKyAg
ICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3
cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KKyAg
ICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgewor
ICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07
CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBp
biBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0
aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsK
KyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0
aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMg
bWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPmxlbmd0aCgpKTsK
KyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRp
YWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAg
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRl
eGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZWZseS0+YXJyYXlT
dG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1
dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Q
cm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1
bHRlZApAQCAtMTQ3LDYgKzMyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM3OSwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZl
KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91
dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7
IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBt
X291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0
ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
OyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25G
b3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcs
NyArNDA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBs
b2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KQEAgLTI2OSwxNyArNDQ4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JE
ZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9w
ZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3Ry
dWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAg
IH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5E
aWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ2NywxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTgsMTQgKzUwMSw2NCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtl
bHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2
ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAg
ICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3Qo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IEJ1dHRlcmZseTo6ZW1wdHlT
aW5nbGV0b24oKSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJl
Y3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3Im
LCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlz
aXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CisgICAgICAgIC8vIHN0b3JhZ2UuIFRo
aXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3Rv
cmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2Fs
bCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBv
ciBub3QgdGhlCisgICAgICAgIC8vIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFy
cmF5IHN0b3JhZ2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlT3JaZXJvKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCisgICAgICAgIC8vIHRoaXMgaWYgeW91
J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhl
CisgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdl
LCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdAorICAgICAgICAvLyBhbHJlYWR5LgorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9y
YWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0
aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC0zMzgsMTcgKzU3MSw0NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAg
ICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRl
cm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIs
IFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSog
ZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAg
ICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5
KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAg
ICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJy
YXlTdG9yYWdlKik7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rv
ckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAg
IGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNl
bHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgICAgICAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgICAgIAogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCogbV9wYWRkaW5nOwogI2Vu
ZGlmCiAgICAgfTsKQEAgLTM3NCw4ICs2MzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgZXhwbGljaXQgSlNO
b25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSkK
KyAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00OTMsMTggKzc1NCwxMiBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6aXNHbG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIEFTU0VSVChidXR0ZXJm
bHkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmICghc3RvcmFnZSkgewotICAgICAg
ICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VS
VCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0KICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxp
bmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDIsOSArNzk3LDggQEAgaW5saW5lIEpTT2JqZWN0KiBhc09i
amVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBhc09iamVjdCh2YWx1ZS5hc0NlbGwoKSk7
CiB9CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKK2lubGlu
ZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5MiwxNSArODQ2LDE2IEBAIGlu
bGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUKIAogQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYg
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSk7CisgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uLT5p
c0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBsb2NhdGlvbik7CisgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIG9m
ZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgbG9j
YXRpb24tPmdldCgpLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzLCBnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
IC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVz
cGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtNjg2LDYgKzk0MSw3IEBAIGlubGluZSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBBU1NFUlQodmFsdWUpOwogICAg
IEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZS5hc0luZGV4KCkg
PT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKIAogICAgIGlmIChzdHJ1Y3R1cmUoKS0+aXNE
aWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CkBAIC03
MTQsMTEgKzk3MCwxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNFeHRlbnNpYmxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0
b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dP
dXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGlu
ZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0
cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3Rv
cmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKIAogICAgICAg
ICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC03MzIsMTMgKzk4OCwxMyBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0Owog
ICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewotICAgICAg
ICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsgCisgICAg
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChj
dXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAg
ICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJl
bnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJlbnRD
YXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIAogICAgICAgICB2YWxp
ZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5l
d1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERpcmVjdE9mZnNldChnbG9iYWxE
YXRhLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsg
dHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFi
bGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUu
CkBAIC04MDUsOSArMTA2MSw5IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVB
bmRSZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
bmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIGdsb2JhbERhdGEsIG9sZENh
cGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIHNldE91dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBz
ZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogfQog
CiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlKQpAQCAtODQxLDExICsxMDk3LDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3QoSlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1
ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgUHJv
cGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1
dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVk
TmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKLSAg
ICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgp
KTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUo
KSk7CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogfQog
CkBAIC05NDUsMTMgKzEyMDEsMTMgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0
Y2hlZFN0bwogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShv
ZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
b2Zmc2V0KSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKIH0KIAogaW5s
aW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAg
ICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICBBU1NFUlQoIShKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uo
b2Zmc2V0KTsKIH0KQEAgLTk1OSw3ICsxMjE1LDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZl
VG9CYXNlKFByb3BlcnR5TwogaW5saW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0g
ICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
b2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJv
cGVydHlTdG9yYWdlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJv
cGVydHkKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9s
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5k
KCk7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJv
cGVydHkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQt
PmZpcnN0LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0
VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2
b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29s
JiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2UoUAogewogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJU
KGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAx
OwogfQogCiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJv
cGVydHlTdG9yYWdlX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3Jh
Z2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVy
dHlTdG9yYWdlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3Rv
cmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDExICsxMTUsMTEg
QEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBC
YXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lk
IFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFy
cmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRy
eSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJy
aWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVz
KDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0Owor
ICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5
RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0
OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFs
dWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwg
V1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0g
MCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAy
LAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7
CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5
cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFj
aXR5KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Zs
YWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAg
IHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNl
TW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lk
IHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19j
YXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09i
amVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBp
cyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUo
aXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2ln
bmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5v
dCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQo
KSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4v
ZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBt
X2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFy
c2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNV
bmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5
KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBh
Y2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSkt
PnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICog
KHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
ICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwor
ICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisK
KyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFk
ZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRo
aXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5z
aWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92
ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2li
bGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5
LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6Omdl
dCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVj
dCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAg
ICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNl
dHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwg
d2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5j
b21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMg
bm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhh
dmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYg
IWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwor
ICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGlu
ZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisK
KyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90
LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0
dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29u
c3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0
ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBC
YXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3Vs
dC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAo
IWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0
dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisK
K2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25z
dAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOwor
fQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAg
IGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2
aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0
b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJv
cGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdl
KQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9
Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hl
Y2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3Jh
Z2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNo
ZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0K
LSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3Bl
cmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQot
ICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAg
IAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsMzcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwog
fQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5z
aXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1
dGVzKHRyYW5zaXRpb24pOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRl
eGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5z
aXRpb24pOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSB7CisgICAgICAg
IEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0gYXR0
cmlidXRlcyk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gZXhp
c3RpbmdUcmFuc2l0aW9uOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJp
YnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5n
VHlwZSA9IGluZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJl
bGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3Vz
KQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxE
YXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVy
dHlNYXAoKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5h
ZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisK
IC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBT
dHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAi
Q2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxs
LmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtMTAwLDYg
KzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFs
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAg
ICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJ
bmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygp
LmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBz
ZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9i
YWxPYmplY3QpOyB9CkBAIC0zMjcsNiArMzMxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFz
c0luZm8pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGlu
ZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAg
ICAgIApAQCAtNDA5LDYgKzQxOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAg
ICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGlu
Z1R5cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1f
Z2xvYmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7
CkBAIC00NDAsNyArNDUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1f
aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJp
YnV0ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2
aW91cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAg
ICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNTg4LDkgKzU5OCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBK
U0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBt
X2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3RydWN0dXJl
KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZseShidXR0
ZXJmbHkpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEy
NjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9o
CiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5j
bHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTM3
LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xhc3MgU3RydWN0
dXJlOwogCit1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAvLyBVc2Ug
Zm9yIHRyYW5zaXRpb25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5IGFkZGl0
aW9ucy4KKworLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5z
aXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhlc2UgYXJl
IHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgorZW51bSBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9OworCit1
bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7
CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitJ
bmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsK
KyAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8
IEhhc0FycmF5U3RvcmFnZSB8IEhhZEFycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQor
fQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160496</attachid>
            <date>2012-08-24 13:45:53 -0700</date>
            <delta_ts>2012-08-24 23:00:37 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_17.diff</filename>
            <type>text/plain</type>
            <size>278789</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wOC0yMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSmF2
YVNjcmlwdENvcmUgYnVpbGQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgY2xhbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2
ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJ
bmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcg
dHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3Vn
aC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOwor
I2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVy
biBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksOCArODg5LDEyIEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoK
KyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUg
aGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC05NjIs
MTEgKzk2NiwxNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwpA
QCAtMTM0MSwyOCArMTM0OSwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVk
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNTdHJpbmdTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVu
dHMpOwpAQCAtMTQxMyw2ICsxNDEyLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAKQEAgLTE0OTEsOCArMTQ5MywxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBUaGlz
IGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2Fu
dCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1
bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlCiAg
ICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIEFycmF5OjpV
bmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFr
ZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6QXJyYXlTdG9y
YWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAg
ICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBp
cyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2ggdGhlcmUgaXMgbm8K
ICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUsIHdlIG1heSBiZSBh
YmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtNjksOCArNzMsMTIgQEAgQXJyYXk6
Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlIAogICAgIC8vIGdldCBmcm9tIHRoZSBh
cnJheSBwcm9maWxlLgogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKICAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKQEAgLTEyNCwxMCArMTMyLDE4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0
VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmlu
Z1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
LSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhh
c0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAg
ICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQor
ICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkKKyAgICAgICAgICAgICYmICh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJ
c0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBy
ZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwpAQCAtMTc4LDEwICsx
OTQsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAg
ICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBy
ZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgcmV0dXJu
ICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAg
IHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBy
ZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1
bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCAr
NDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBo
YXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBq
dXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBTdHJpbmcsCi0gICAgSlNBcnJheSwKLSAg
ICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlTdG9yYWdlLAorICAgIEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIEFy
Z3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKQEAgLTk2LDIzICsxMDAs
OSBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kCiAgICAgfQogfQog
Ci1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBs
ZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKK2lubGluZSBib29sIG1vZGVzQ29tcGF0aWJsZUZvcklu
ZGV4ZWRTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKIHsK
LSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
Ym9vbCBsZWZ0SXNKU0FycmF5ID0KLSAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAg
ICAgICB8fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9v
bCByaWdodElzSlNBcnJheSA9Ci0gICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAg
ICAgIHx8IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYg
KGxlZnRJc0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbGVmdCA9PSByaWdodDsKIH0KIAog
aW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCkBAIC0xMjEs
NiArMTExLDggQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAg
IGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMyLDcgKzUzMiw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVl
OjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXks
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CkBAIC01NDAsNyArNTQwLDcg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRl
eCA+PSAwKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlz
IG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2Fu
U2V0SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhl
YywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAg
SlNPYmplY3Q6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01
NDksNyArNTQ5LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwog
ICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3Qg
aW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRleCA+PSAwKSB7
CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUg
dGhlIGV4aXN0aW5nIHZlY3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgo
aW5kZXgpKTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEpTT2JqZWN0
OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjY0ODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM4LDggKzEzOCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVj
U3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDggKzMx
MiwxMCBAQCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6
c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNhdGVz
IHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKICAgICAg
ICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCiAgICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
cG5hbWUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAK
ICAgICAvLyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IEpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5n
dGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSks
IHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogCiAgICAgLy8gVGVzdCBiYXNlJ3Mg
c3RydWN0dXJlCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1Qy
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1
Y3R1cmUpKSkpOwogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3ODIsNyBA
QCBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25OCiAgICAgYXNzZXJ0KG1h
Y3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFk
ZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQog
ZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRB
c0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCkBAIC03OTIsOSArNzkyLDkgQEAgbWFjcm8g
bG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZQogICAgIHN4aTJwIHByb3BlcnR5T2Zm
c2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6
Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2Jq
ZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsg
c2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9h
ZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9w
ZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwo
c2l6ZSwgc2xvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsMTUgQEAgZWxzZQogICAgIGNvbnN0IFBheWxvYWRPZmZzZXQgPSAwCiBlbmQK
IAorIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgorY29uc3QgSXNB
cnJheSA9IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2NvbnN0IEFsbEFycmF5VHlwZXMg
PSAxNQorY29uc3QgTnVtYmVyT2ZUeXBlQml0cyA9IDQKK2NvbnN0IE51bWJlck9mTGVuZ3RoQml0
cyA9IDMyIC0gTnVtYmVyT2ZUeXBlQml0cworY29uc3QgTGVuZ3RoTWFzayA9ICgxIDw8IE51bWJl
ck9mTGVuZ3RoQml0cykgLSAxCitjb25zdCBNYXhpbXVtTGVuZ3RoID0gTGVuZ3RoTWFzaworCiAj
IFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKIGNvbnN0IE9iamVjdFR5cGUg
PSAxMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29u
dmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICov
CisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVudGlvbnNf
aAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQ
cm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJl
ZSBsb2NhdGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgor
Ly8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVu
dHJpZXMuCisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3
aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNp
Z25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJS
QVlfSU5ERVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0
aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBh
cmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhl
IEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVt
ZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAor
Ly8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3
aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3Bh
cnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dp
bmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8v
ICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwg
cHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxs
IGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhl
IHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0
aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdo
ZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVu
dHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVD
VE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBi
ZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisvLyBEZWZpbmUgdGhlIG1h
eGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkg
LyAyIHRvIGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorI2Rl
ZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChJbmRleGluZ0hlYWRlcjo6bWF4aW11bUxl
bmd0aCkKKworLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4g
bWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBN
YWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9J
TkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEg
Yml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGlu
dGVnZXIuCisjZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFs
dWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVu
dHMgd2UnbGwgYWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGgg
YSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFT
RV9WRUNUT1JfTEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2Un
bGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlz
IGFkZGVkLgorI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZv
ciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8g
Rm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFs
d2F5cyB1c2UgYSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcg
YXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFw
Lgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5s
aW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IG51bVZhbHVlcykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCitp
bmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7
CisgICAgcmVzdWx0LnNldEF1eFdvcmQobGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0TGVuZ3RoKHZl
Y3Rvckxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEluZGV4aW5nSGVh
ZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBy
ZXR1cm4gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlDb252ZW50aW9uc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUg
QXJyYXlTdG9yYWdlX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAi
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0
aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2lu
dHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcg
dG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0
LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0
IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUg
QXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBv
cGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1
c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVl
KQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlT
dG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3Rs
eSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZs
eS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZs
eSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1
dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVy
KiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgp
OyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiByZWludGVycnBl
dF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5n
SGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAg
ICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9y
TGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVu
Z3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9
CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVh
ZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGNvcHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisgICAgeworICAgICAg
ICBtX3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBtX2luZGV4QmlhcyA9
IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIu
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAg
ICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7Cisg
ICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3NwYXJzZU1hcCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNl
TW9kZSgpOworICAgIH0KKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1h
cDsKKyAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0lu
VmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUg
YSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0
aWFsaXphdGlvbkluZGV4OworICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2Vu
ZGlmCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0
YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQo
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIGluZGV4aW5nSGVhZGVy
OjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZl
Y3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAgICAK
KyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5n
dGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkFy
cmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJv
cGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1Byb3BlcnR5T2Zmc2V0Lmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKwor
Y2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOwor
cHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1Ymxp
YzoKKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBlbXB0eVNpbmdsZXRvbigpIHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjplbXB0eVNpbmdsZXRvbigpLT5idXR0ZXJmbHkoKTsgfQorICAgIAor
ICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7
CisgICAgICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGlu
Z0hlYWRlcikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0
eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkq
IGZyb21CYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJm
bHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZT4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHBy
b3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3Jk
KCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aEFu
ZFR5cGUoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRl
cjo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4
aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hl
YWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsg
cmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9
CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2Uo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxv
Y2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90
IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUg
cmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAgICAvLyBtZXRo
b2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUg
YWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRo
ZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZwor
ICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgorICAgIEJ1dHRl
cmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1l
cyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5l
TWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAi
QnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAgICAgICBDUkFT
SCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5n
SGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
KnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJu
IGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigp
LCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xs
ZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksIHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKHNsb3RW
aXNpdG9yLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKwor
aW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHBy
ZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5
Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3Bl
cnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAg
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBw
cm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93
QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdy
b3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhz
dHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdQcm9w
ZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5
KHJlc3VsdC0+YmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwg
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
ZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorewor
ICAgIHJldHVybiByZXNpemVBcnJheShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGluZGV4
aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1By
ZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTog
SXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNl
ICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1v
cnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdl
J3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9u
IGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXpl
IHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRo
ZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNp
bmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4K
KyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5n
IG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5
IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNv
bXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZT
bG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
cHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3Bl
cnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bnVtYmVyT2ZTbG90cykKK3sKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1
bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUocHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgp
IC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9w
ZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEy
NjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBN
ZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3Qs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFt
ZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05h
bWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAi
UHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBBcnJheVN0b3JhZ2U7CisKK2NsYXNz
IEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBEZWZpbmUgdGhlIG1heGltdW0gc3Rv
cmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVu
c3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICBzdGF0
aWMgdW5zaWduZWQgY29uc3QgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDA7CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihJbmRleGluZ0hlYWRlciwgbV9hdXhXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1f
bGVuZ3RoKTsgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhp
bmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9m
IHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVw
ZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4
V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9p
ZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3Ro
IDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9Cisg
ICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZv
aWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0K
KyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFk
ZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0
eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAK
KyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAg
IAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4o
dGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMg
KyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUg
c2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJ
bmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJp
dmF0ZToKKyAgICB1aW50MzJfdCBtX2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmll
bGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aEFuZFR5
cGU7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRz
IHR5cGUuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVh
ZGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19o
CisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRl
eGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2Rl
ZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90
IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNh
cGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOwor
c3RhdGljIGNvbnN0IEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9u
YWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUg
dXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4K
K3N0YXRpYyBjb25zdCBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhh
dCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAg
ICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Ug
PSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAg
ID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0Fy
cmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4K
K3N0YXRpYyBjb25zdCBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBv
ZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0
IEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIyLDcgKzEyMiw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQ
dXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZh
dGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fj
dGl2YXRpb24qPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwpAQCAtMTMzLDggKzEzMyw4IEBAIHZv
aWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJz
dC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxl
bWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAv
LyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBi
b29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYg
cmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNDUsNzEg
KzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJy
YXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2
aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkg
YmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICog
QSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5v
bi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXBy
ZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUg
aXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMg
aXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWdu
ZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBB
bGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMg
YW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwg
YXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBz
dG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBi
ZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJl
IChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJz
ZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAg
ICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUg
c3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBk
ZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9y
IChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5z
aXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAg
KiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFy
cmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlz
IGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVs
b3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2gg
dGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAo
c2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwot
Ly8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJl
IDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZG
RkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFs
dWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhv
dXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8
cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
MTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBh
biBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9B
UlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8v
IGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChl
LmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAg
Ci0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3Ro
IGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJT
VF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3Rv
ciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2Vz
IHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0v
LyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGlu
dm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElm
IG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6
OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6
ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8g
YXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBh
cnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFu
dCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RB
cnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rv
cih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVu
Z3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRp
cGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBl
eGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlm
ICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkgKzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVj
dChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0
ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJh
eTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9y
TGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6
ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3Rv
cmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGlu
aXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAot
ICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwot
ICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5t
X2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVj
dG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQot
Ci1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxl
IHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0
b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNp
Z25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3Ro
KTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0
b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9y
YWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVj
dG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlu
bGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkg
ZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsK
LQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVf
dCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVw
b3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2ln
bmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0
ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1p
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
LXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJh
eUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMg
bm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAg
ICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5h
dHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYg
UmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NF
UlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFz
R2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIp
IHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRh
KTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVl
KTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJn
cyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkp
OwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlz
IGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0
IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0
ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJl
bW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVu
c2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVu
dHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFy
cmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFy
cmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZ
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dl
dHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90
LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxp
bmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAg
IEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVy
KCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFz
R2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0
ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBp
dCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNw
YXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlz
LCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17
Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7
Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAo
IW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAg
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0
b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBt
YXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0
cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3Rv
cmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0
b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4o
bmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAg
ICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3Zl
Y3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAg
IGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3Jp
cHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
SlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNl
bnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAg
ICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAg
IEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwot
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0g
ICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAg
ICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsK
LSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3Ip
OwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUu
MSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7
Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2Un
cmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJp
YnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAg
Ly8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBh
dHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAg
ICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBh
IHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRp
b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9i
YWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFy
cmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAv
LyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGlu
dGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQg
YW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJl
bnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAgICAg
ICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0
eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAg
ICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0s
IFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAg
ICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmli
dXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQot
ICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4K
LSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkg
RGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9m
Ci0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJs
ZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBi
eQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9m
IERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3Bl
cnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8g
NC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7
Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAg
ICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRz
KTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAg
ICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBp
cyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2Mg
YWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERl
c2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVu
dCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVu
dCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhl
eGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVs
ZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBv
dGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJy
ZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRh
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZl
cmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3Io
KSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gOS5h
LiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRy
dWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEK
LSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFBy
ZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMK
LSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJp
YnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8K
LSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8gOS5j
LiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4g
YWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8gUHJl
c2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0cmli
dXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAg
ICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAuYS4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRh
YmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFs
dWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAm
JiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJs
ZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0
ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
IHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMg
cHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBm
YWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAg
ICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkg
aXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRp
bmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
dG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVj
U3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFi
bGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRh
YmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHko
KTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAg
IHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgp
IHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29u
ZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBvYmplY3Qt
PkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29s
IEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAg
IGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7
Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9y
YWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAg
IGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAg
aWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZh
bHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAt
Pm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQs
MTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZv
aWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhl
YywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpA
QCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2Ug
LSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rv
ciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAgICAg
bGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsK
LSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBl
bHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlz
IG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBh
IHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgp
KSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0
aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBk
b24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkg
ewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBo
YXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgot
ICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUg
bV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8g
Q2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5k
IHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8g
c3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFs
bG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0g
bV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0g
YWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVT
cGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAg
aWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5
IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVh
ZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJv
dykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sg
d2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29u
dGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9y
IHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWdu
ZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAt
PnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBt
X251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5
IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUg
bWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3Rd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0g
ICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0
eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3Qg
PSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVu
Z3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXAp
KSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxk
IGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAu
Ci0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVu
Z3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAv
LyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBh
bmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAv
LyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJl
YWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9w
ZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFs
bG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0g
ICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFy
cmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElz
UmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3cs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNF
eHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5n
IGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAg
IC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBp
cyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFp
bHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQot
ICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRl
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENv
cHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRo
ZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3Zl
Y3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJz
dF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
LSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3Bl
cnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwp
OwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsK
IAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJy
YXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAo
aSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90
LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNP
YmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVs
ZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0Zv
clFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBA
QCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChk
YSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsK
LSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZp
ZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZv
ciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hp
Y2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3Bl
cnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3Rv
cmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChz
dG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXpl
KCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNl
Y29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5k
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBh
cmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4
SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlm
IChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAg
ICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAg
ICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwo
bmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8g
aW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5n
dGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxh
c3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0K
LSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBi
ZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAK
LSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwg
YmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVj
dG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JM
ZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNh
cGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJ
S0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdl
LT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0
ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VT
aXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3Jh
Z2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9h
bGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNv
bWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBl
ZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4Qmlh
cyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3
VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxs
b3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdl
Q2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3
QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBh
bmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2lu
ZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBt
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBB
cnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAg
IG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsK
LQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0g
ICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0
cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2Vz
IHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4K
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhh
bmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhC
aWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHko
KTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91
dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
KyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBw
YXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8v
IFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmljczoKQEAgLTEwOTMsOCArMjU0LDgg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1
cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBp
bmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBo
b3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24g
MnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9y
TGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVu
Z3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNv
dW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0x
MTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0ds
bwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCAr
IGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2lu
ZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAg
IEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFz
KTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5k
ZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBj
dXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qg
b3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4K
ICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwog
CiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3JlIGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8g
YWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUg
ZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIHVuc2lnbmVk
IG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5
IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2Vl
cCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYm
IGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxl
bmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0g
ICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFn
ZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsK
LSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAgLy8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29p
bmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhl
IHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBh
Y2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4g
dGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4K
ICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBw
b3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCk7CiAgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBv
c3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNpcmVkSW5kZXhCaWFzOwogCi0gICAgbV92ZWN0
b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2lu
ZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3Rv
cmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsK
KyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBh
bGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBl
eGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CisgICAgdW5zaWduZWQg
bmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkg
aXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVw
IHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYg
aXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVu
Z3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0aGluZ3MKKyAgICAgICAgbmV3QWxsb2NCYXNl
ID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1faW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OworICAgICAg
ICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxl
bmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFn
ZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKGRlc2lyZWRJbmRl
eEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVj
dG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CisgICAgfQorCisg
ICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJl
ZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZl
Y3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4
QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAgICAvLyBTdGVwIDQ6CiAgICAgLy8gQ29weSBh
cnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1j
YXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgogCiAgICAgLy8gSWYgdGhpcyBpcyBi
ZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBh
bHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBt
X2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFk
ZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1f
dmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgp
OwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAg
ICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0Fs
bG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhl
IG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0gICAgfQorICAgIG1lbW1vdmUobmV3U3RvcmFn
ZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShtX2J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG91dE9m
TGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE2MiwxMyArMzI0LDEzIEBAIGJvb2wg
SlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIHsKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlz
IHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhl
IGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFy
c2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5t
X3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdy
aXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3ICszODIsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3Ro
KTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjks
NDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBK
U1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkg
ewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFs
dWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVl
U2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1l
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywg
aW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
KyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2Fs
bCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3Ro
IiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAg
ICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJu
IGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwg
d2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1
ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIAorICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2
YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0
b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBt
X2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5n
dGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4K
KyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkg
eworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9y
YWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1
LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJ
bmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOwog
ICAgIH0KLQotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9y
ZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElL
RUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBtZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBz
dGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBs
ZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8gSGFuZGxlZCB0aGUgc2Ft
ZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0
b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
fQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQp
CiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5
U3RvcmFnZSgpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVu
Z3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAog
ICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4g
YWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJh
eVByb3RvdHlwZS4KQEAgLTEzMTgsMTggKzUwNiwxOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGgg
LT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAg
ICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0
b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAg
ICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAot
ICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09
IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hh
ciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNv
dW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3Zl
KG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3Rv
cmFnZSk7Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAg
IH0KQEAgLTEzMzksNTkgKzUyNywyOSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0
YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQs
IGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAg
ICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBh
Ym5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5
UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4
QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VT
aXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlT
dG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3Vu
dDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgc3Rv
cmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IGNvdW50KTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CisgICAgICAg
IHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIGNvdW50
KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVjLT5nbG9iYWxEYXRh
KCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAg
IEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNp
dENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAg
ICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsK
LQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7
Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAg
ICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFz
ZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNP
YmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2Fz
dDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9p
bmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1h
cC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVy
c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRh
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTQxMCwx
MTAgKzU2OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQog
ewogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBh
bGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxW
YWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigp
KSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChl
eGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBm
YXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBt
ZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAg
ICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1p
dGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAg
ICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJz
KQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0
LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxzbyBkb24ndCBy
ZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2li
bGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RG
b3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5n
cyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJh
c2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBv
dmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBs
YXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMg
ZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9k
cyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotCi0g
ICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgCi0gICAgSGVhcDo6
aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUu
aXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAg
ICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYg
dmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2
ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5n
SW5saW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmlu
ZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBU
aGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAg
ICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRp
bmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBk
byBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRo
aXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIg
Y29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAg
IC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNv
bWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAg
ICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkg
bWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAg
VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0
cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUu
aXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50
IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNv
bmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4p
LgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhN
RTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJs
ZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUg
c29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0g
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTog
VGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBz
b3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFu
ZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rv
ckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBm
dW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdl
LAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBu
dW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3Rl
bmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxU
cmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk2LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3Qg
QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9y
ZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1i
ZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0
IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCi0gICAgLy8gaWYgYSBsYXJnZXIg
YXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7Ci0gICAg
aWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5n
dGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAobV9zcGFy
c2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAtPnNpemUoKSA6IDApOwotCi0gICAgaWYgKCFu
b2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0
b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJe
MzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOwotICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRv
cHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVu
Y3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4o
KSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1v
ZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRp
bmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVu
c2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5
LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBp
bnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVm
aW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVl
IHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAo
IXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVl
Lmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2Vw
dGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAt
IGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBh
IGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgo
KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVk
IG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBz
dG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAo
IW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRy
ZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0
NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9l
eGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24g
PSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdy
b3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQ
dHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rp
b24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9y
LCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20g
dW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwg
aWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5z
ZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1E
ZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBo
b2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZp
bmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2Vk
VmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0
b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhv
bGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0
aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5z
ZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsK
LSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCisgICAgICAgIC8vIG1vZGlm
eWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0
aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFi
c3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRl
ci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1
ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLQotICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBi
YWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAgICAgICAKKyAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7CisgICAg
ICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFy
ZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5n
IG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAg
ICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFW
TFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAg
aXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAg
ICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGlu
LgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7
Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHpl
cm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZl
Y3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2sp
OwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2Vk
QXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgs
IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZl
Y3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rv
cltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVk
IHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZv
ciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0
KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFT
U0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgp
OwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVu
Z3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlm
ICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwor
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlm
ICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0
QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGks
IGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0
KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0NSwxMDMgKzk2Myw3MSBAQCB1bnNpZ25lZCBK
U0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAgICAgQVNTRVJUKCFpblNwYXJzZU1vZGUo
KSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4g
MDsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVu
Z3RoKTsKLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVu
ZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBp
ZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5l
ZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5z
aXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUg
YW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAot
ICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAg
ICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1E
ZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25z
aXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
KTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0
byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9
PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5l
d1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAK
KyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXAp
IHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAg
ICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxv
Y2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBu
b3QsCisgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisg
ICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRW
ZWN0b3JMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251
bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAo
KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAK
KyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVl
c0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmly
c3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNT
RVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNl
Y29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
aykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVm
aW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQu
Ci0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlf
aAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAjZGVmaW5lIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZIDAKQEAgLTMwLDEzMSArMzIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAg
ICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
ewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAg
IFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVl
IGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3Bl
cnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBj
b25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlW
YWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlF
bnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAg
ICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAg
ICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRS
ZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAg
ICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5
KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3Mg
PSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFn
cyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2ln
bmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3Qo
RXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBp
dGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAg
ICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSBy
ZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBt
X21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9t
YXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cg
Y29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBt
X3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRo
ZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50
cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRp
bmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3Ry
dWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhv
ZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZv
cmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlm
dCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZh
aWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNp
Z25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAg
ICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9j
QmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBL
ZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0
aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAv
LyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAg
ICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRp
bmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwot
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsg
fQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBm
cmllbmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVi
bGljOgorICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAg
ICAgICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkK
KyAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNO
b25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXpl
ZChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJs
aWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFz
dCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjUgKzU5LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0
OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4g
aXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQu
Ci0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0
ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUu
Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7
IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5n
dGgoKTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBp
dCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0x
OTksOTkgKzc3LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1
bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9
Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRl
eChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
eCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lk
IGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsK
LSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJU
KGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRp
YWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxp
emUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NF
UlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsK
LSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNp
Z25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
aGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4K
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9y
YWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNo
ZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2lu
aXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwot
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAg
ICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENh
bGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JM
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQg
ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXpl
KHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcDsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCkBAIC0zMDEsNDAgKzEwOSw1MCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEm
KTsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgICAg
ICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0g
ICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0
Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKLQotICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hl
Y2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hl
Y2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5j
eShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAg
ICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVj
dG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFs
dWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAgICAgIEFycmF5U3RvcmFn
ZSAqbV9zdG9yYWdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVl
TWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXks
IG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFz
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsg
fQogICAgIH07CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGlu
aXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgYmFzZUluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RP
Ul9MRU4pKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAg
ICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJl
dHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJh
eS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5n
dGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RP
Ul9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAg
ICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsK
KyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+
bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxE
YXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAg
ICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1Mywz
MCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpT
Q2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5m
bzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXND
ZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9m
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9u
IHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNh
bGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1h
eGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUg
dXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJh
bmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNk
ZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0Vf
VkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUg
c2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5l
ZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBj
YWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVv
ZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNz
ZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9u
IChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NF
UlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0
aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAg
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI2NDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogVVN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAg
ICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1
Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxp
ZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNTgsNiArMTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRp
YyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09i
amVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjQ4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3Qt
PmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykp
IHsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
YWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShy
ZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAg
dHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAg
V2UgdXNlIHRoaXMKKy8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRv
IGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBl
ZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRp
YyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKKwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVj
dFNsb3coSlNDZWxsKiBjZWxsKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+
c3RydWN0dXJlKCk7CkBAIC04NiwyOSArOTEsNzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENs
YXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3Rv
cmFnZSBzdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKKyAg
ICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6
ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAgQVNTRVJUKHN0b3JhZ2VTaXplKTsKICAgICAKLSAgICBz
aXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBB
U1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAq
IHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
YmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJ
bkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0
YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFj
aXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5l
d0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0
b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJl
bnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSgpOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IGhl
YWRlci5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IGhlYWRlci5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUp
OworICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAg
ICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lz
ZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOworICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0
b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0
b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1
cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAg
ICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAg
ICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VC
YXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAor
ICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJG
cm9tKCpzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2Ug
PSBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb3VudCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsg
Y291bnQtLTspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3Vy
Y2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGls
ZHJlbih2aXNpdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFy
ayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3IsIHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
ICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAp
CisgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQg
SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKQEAgLTEyMiw5ICsxNjksOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxp
bmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9i
amVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKQEAgLTE0Miw5ICsxODksOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRP
ZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVj
dCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEw
ICsyMDgsNDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAg
IHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3Jl
IGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQg
aXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0
eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAg
ICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwogfQogCiAv
LyBFQ01BIDguNi4yLjIKQEAgLTE3NCw2ICsyNTksMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmpl
Y3QpKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENo
ZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4KICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszMjcsMTQyIEBAIHZvaWQg
SlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHNob3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZh
bHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsK
KyAgICAKKyAgICBpZiAoVU5MSUtFTFkoaSA+PSBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0
ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYg
KGkgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2
YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAg
ICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAg
ICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJz
ZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+
bGVuZ3RoKCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5l
dyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAg
ICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhl
bS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRl
cmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAg
IENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3
QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkg
fHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBB
U1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxl
bmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBy
ZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5
U3RvcmFnZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3
U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVD
VE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5B
cnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9j
YXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9k
ZSgpOworICAgICAgICByZXR1cm4gc3RvcmFnZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCkBAIC0zMDQsNiArNTI5LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZSogZXgKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5z
aWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYg
KCF0aGlzT2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmpl
Y3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1NjEs
NDUgQEAgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVy
biBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6
CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFs
dWVTbG90KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAg
ICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiAr
NzI5LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFw
cGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxp
bmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2Vy
CisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBu
ZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkg
bWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBz
d2l0Y2ggKG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAg
ICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMg
fHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAg
ICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4o
KSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2
b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9i
amVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5h
bWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQpAQCAtNTE1LDggKzgyNCw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERh
dGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJy
YXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkK
ICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVu
c2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEg
Kzg4MSwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVy
UHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAg
ICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24t
PmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0g
YXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAg
ICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9j
YXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xv
dCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYw
MywyNiArOTExLDUyMiBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChK
CiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6
Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRv
cikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQor
ICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVz
Y3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNj
cmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRl
ciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAg
ICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYg
KG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRl
ciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRl
ciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdl
dHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNl
dFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1h
cC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3Ry
dWN0dXJlKCksIHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRy
YW5zaXRpb24uCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsK
KyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4x
Mi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKwor
ICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6
IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAg
ICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBh
dHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAg
ICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBh
dHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAg
ICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBh
IHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRp
b24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAg
IC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5l
ZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3Vy
cmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAg
ICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2Ny
aXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAg
ICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVd
XSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwor
ICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5
CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVl
LgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0
eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAg
b2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJh
YmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVk
IGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJv
cGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAv
LyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0
czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250
RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisg
ICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3Is
IGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisg
ICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZp
ZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQg
aW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5
LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5n
ZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3Iu
ZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4K
KyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWpl
Y3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBb
W0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24g
b2YgZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQo
KSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlz
IHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICgh
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwg
aWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBo
YXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJl
bnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJv
cGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVd
XSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRl
cyB0bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAv
LyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJv
bSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAv
LyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkn
cyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8g
dGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
ICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFE
ZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEu
IElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
KyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0
YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dy
aXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBm
aWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3Jp
dGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0
aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1Zh
bHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkg
JiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24s
ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFi
bGUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0
dGVyUHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3Jp
cHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1
ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwg
dGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMg
ZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYm
IGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVz
YyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0p
IGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQo
KSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0
dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25k
aW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhl
YywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0
cnVlLgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5
RGF0YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6
YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Cisg
ICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291
dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3Rv
cmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdD
QydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1
bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1w
KSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9u
J3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsK
KyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2
ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAg
ICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVy
dHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICAgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisg
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2
ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtF
TFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5
IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAg
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0
aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAg
ICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0g
ICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAg
IGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJh
eSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1Jl
YWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRl
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAg
Ly8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxl
dGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQt
PmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhl
IG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhl
YywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3N0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3
aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VM
WSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdl
IHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3Bh
cmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZl
Y3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VM
WSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAg
ICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkg
YmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhv
bGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUu
CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVu
Z3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUo
KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0
aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4i
KTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBj
aGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2ls
bCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2
ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1
bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAr
IG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1
dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVy
ZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBh
bGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1h
cC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9y
OworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5k
KCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAg
IGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5
OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNy
ZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIGkgKyAxKSk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVu
c2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNlZExl
bmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKGN1cnJlbnRMZW5ndGgsIDEw
MDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAg
ICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFtX3ZlY3Rv
ckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxh
c3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVp
dmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAz
ICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGgg
PSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3Jt
IGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5n
dGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRM
ZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgcmV0
dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJheUxlbmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7
Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24g
bGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVj
YXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisg
ICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJl
Y2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25l
ZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4g
dmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0
b3JMZW5ndGgobmV3TGVuZ3RoKTsKKworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHBy
ZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYg
KExJS0VMWSghaW5kZXhCaWFzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxl
bmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAg
aWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
YnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9t
aWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCisgICAgdW5z
aWduZWQgbmV3SW5kZXhCaWFzID0gbWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2Fy
Z2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KKyAgICB1bnNp
Z25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVz
aXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdW
ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwor
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhC
aWFzOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
K3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNr
VHlwZSB0eXBlKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9y
WmVybygpOworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9y
YWdlKTsKKyAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNT
RVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZl
Y3RvciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgo
KSk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykK
KyAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2gg
aWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENv
bnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVl
c0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgeworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmly
c3Q7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NF
UlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lz
dGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUo
KS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVh
bGxvY2F0ZWQuCisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKworQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7
CisgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9w
ZXJ0eQorICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRl
ZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3
U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTYzMCwxMCArMTQzNCw0NiBAQCBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDA7CiAgICAgSlNDZWxsKiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9m
ZnNldCkKKyAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1
dGVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
aSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
dGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQg
PT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU0NCwyNiBAQCBwcml2YXRlOgogICAg
IEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhy
b3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9u
IHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1
cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGll
cyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVu
IGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29u
ZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxl
dGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAg
ICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYg
d2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8g
dW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlz
RXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAg
ICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24g
b2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9y
OwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTU4OSw4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVy
dHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAy
LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVu
dChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlw
dG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAg
IC8vIENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9w
ZXJ0eQpAQCAtNzg0LDggKzE2MjQsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFs
KGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
IHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJl
bnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2Yg
YW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjQyLDcgQEAgYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdl
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsx
NjUyLDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAg
ICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9y
LmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3Jp
cHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5z
aWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0
ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4
LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1
bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAg
ICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5E
ZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRo
aXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRy
dWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVj
LCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xv
dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQ
dXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3Rv
cmFnZUJhcnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bERhdGEuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtNzksNiArNzgsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlz
IGEgZ2V0dGVyL3NldHRlcgogICAgIH07CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRl
KTsKKyAgICBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUs
IFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVf
QVNTRVJUKERvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0
ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBGdW5jdGlvbl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KyAgICBDT01QSUxFX0FTU0VSVChBY2Nlc3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFj
Y2Vzc29yX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNG
aW5hbE9iamVjdDsKIAogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05
Niw2ICsxMDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXpl
QXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAs
OCArMTI4LDE3NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vz
c0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0
aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8g
dGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFp
biBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxl
ZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmli
dXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1
ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1l
KSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBp
bmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisg
ICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUg
dGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRp
YWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6
ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPmxlbmd0
aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhl
IGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7
CisgICAgICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFy
c2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZWZseS0+
YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAg
IC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZp
bmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90
IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM3
OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdl
VW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2Uu
Z2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJl
dHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAg
ICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBA
IC0yMjcsNyArNDA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0
SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdl
KCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQ4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3Rh
dGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlv
bnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVT
dG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShK
U0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0g
ICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ2
NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTgsMTQgKzUwMSw2NCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlv
dSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRl
IGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93Lgot
ICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAg
ICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBz
aXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNp
dG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8v
IENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJl
IGl0IGhhcyBhcnJheQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVy
d2lzZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlT
dG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0
byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAv
LyBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5
IHN0b3JhZ2UuIFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3Jt
IGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3Qg
dG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUg
aXQKKyAgICAgICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRp
YWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAg
CisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAg
Ym9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM4LDE3
ICs1NzEsNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAg
ICAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhK
U0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRl
PFB1dE1vZGU+CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBK
U0NlbGwqKTsKIAogICAgICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KTsKIAogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRy
eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNy
ZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVy
IG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERl
c2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRv
ciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAg
ICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRM
ZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVz
aXJlZExlbmd0aCk7CisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hl
Y2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hl
Y2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNp
c3RlbmN5Q2hlY2spOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJm
bHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzQs
OCArNjM1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5MywxOCArNzU0LDEyIEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNT
RVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdl
KSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7
CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0Miw5ICs3OTcsOSBAQCBpbmxpbmUgSlNP
YmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVl
LmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0
dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkyLDE1ICs4NDcsMTYgQEAgaW5saW5lIEpT
T2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVj
dHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVy
U2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0
aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+
Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNldChvZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93
blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQg
bWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxs
eSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODYsNiArOTQyLDcgQEAgaW5saW5lIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJU
KHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAg
ICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFw
OjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25h
cnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKQEAgLTcxNCwxMSAr
OTcxLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAg
ICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9
IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJl
KCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5
KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogCiAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKQEAgLTczMiwxMyArOTg5LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6
ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwog
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1cnJlbnRD
YXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICBu
ZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFj
aXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFn
ZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRl
cmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9m
ZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0
aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAg
ICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KQEAgLTgw
NSw5ICsxMDYyLDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9y
YWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3Rv
cmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNz
YXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBA
IC04NDEsMTEgKzEwOTgsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0ds
b2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0
dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdy
b3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRP
ZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwotICAgIHNldE91
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKICAg
ICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKQEAgLTk0
NSwxMyArMTIwMiwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
ICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
ICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50
IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChp
c091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFT
U0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
OwogfQpAQCAtOTU5LDcgKzEyMTYsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2Uo
UHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQog
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKQEAg
LTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQog
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3Qu
Z2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0
RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVp
cmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRP
ZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAK
IGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3Jh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0
b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5
cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzExNSwxMSBAQCBib29s
IFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1
ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVi
bGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30K
KworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9p
ZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlw
dG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7
CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6Oklu
dEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAg
ICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAg
fTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0
eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBN
YXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAg
ICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
KyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBT
cGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAg
ICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsK
KyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVu
Z3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8Rmxh
Z3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChF
eGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0Kiwg
dW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAu
ZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlk
IChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRv
ciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkg
eyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0
ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0
dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRl
cmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7
CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNf
aAorCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVl
TWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5
RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAg
IHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9
IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9m
KHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1f
cmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3Bh
cnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8v
IFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRo
ZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0
aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWlu
LgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEo
ZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnkuYXR0cmli
dXRlcyAmIFJlYWRPbmx5KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Cisg
ICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0KiBzZXR0
ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAgIGlmICgh
c2V0dGVyKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBj
YWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVu
ZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJy
YXksIGFyZ3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChh
cnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAg
ICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25l
IC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXkt
PmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgfQor
CisgICAgZW50cnkuYXR0cmlidXRlcyA9IDA7CisgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBK
U1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIGlm
IChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsK
KyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAorewor
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Cit9
CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6Omdl
dCgpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0
dGVyU2V0dGVyKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmplY3QqIGdl
dHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVy
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRh
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKworaW5saW5l
IEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9CisKK2lu
bGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChp
dGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAx
MjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0
b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsK
LXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0
b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hl
Y2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAg
ewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAK
LSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFn
KQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRh
ZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+
KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIAotcHJp
dmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAs
IG1faW5kZXhpbmd0eXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6
TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBl
KQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0
IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2Vs
bCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
KQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEs
IHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJh
bnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTks
NyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJl
dmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQorICAg
ICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQ
cm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAg
ICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTUw
Miw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb24pOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmUq
IGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAs
IGF0dHJpYnV0ZXMpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0
cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcyk7CisgICAgICAgIEFTU0VSVChleGlzdGlu
Z1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5
cGUpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
KyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKKyAg
ICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKKyAgICAKKyAgICBp
ZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3Bl
cnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVj
dHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAg
cmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNo
ZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBT
dHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdU
eXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogCiAgICAgICAgIGJvb2wgaXNTZWFs
ZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7
CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFR5cGVJ
bmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0KICAgICAgICAgYm9vbCBpc09iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZSAmIEFs
bEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZTsgfQogCiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVj
dC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KQEAgLTMyNyw2ICszMzEsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdU
eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBAIC0zNTYsNyArMzY1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAgICAg
ICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00MDksNiArNDE4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJbmZvIG1fdHlwZUluZm87CisgICAgICAg
IEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICAgICAgCiAgICAgICAgIFdyaXRlQmFy
cmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0MCw3ICs0NTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgOiAxOwogICAgICAg
ICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0g
ICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiA3OworICAgICAgICB1bnNp
Z25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7CiAgICAgICAgIHVuc2lnbmVkIG1fc3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAgICAgICAgdW5zaWduZWQgbV9wcmV2ZW50
RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBA
IC00NTgsMTEgKzQ2OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBBU1NF
UlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoY2xhc3NJ
bmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbyk7CisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0
dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSk7CiAgICAgICAg
IHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CiAgICAgfQpAQCAtNTg4LDkgKzU5OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIGlubGlu
ZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBtX2NsYXNzSW5mbyhzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3RydWN0dXJlKGdsb2JhbERhdGEsIHRo
aXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiAgICAgewog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJ
bmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFw
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCit1bnNpZ25l
ZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb25z
IHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5IGFkZGl0aW9ucy4KKworLy8gU3Vw
cG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxh
dGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJp
bmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgorZW51bSBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9OworCit1bnNpZ25lZCB0b0F0dHJp
YnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRy
YW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitJbmRleGluZ1R5cGUgbmV3
SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9j
YXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFn
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160553</attachid>
            <date>2012-08-24 23:00:37 -0700</date>
            <delta_ts>2012-08-26 22:07:59 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>butterflies_patch_18.diff</filename>
            <type>text/plain</type>
            <size>284603</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMi0wNy0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjppc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpT
Qzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjphbGxvY0Jhc2VPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICog
cnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0
dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGlu
Z1BheWxvYWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnR5cGUpOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVu
Z3RoQW5kVHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAg
ICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9t
RW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJmbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgor
ICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNv
cnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxs
KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRp
dmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAg
IChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0
Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJy
YXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4p
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5
OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9TdG9yYWdlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SlNDZWxsKToKKwogMjAx
Mi0wOC0yMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgSmF2
YVNjcmlwdENvcmUgYnVpbGQgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgY2xhbmcuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1Zh
bHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAg
ICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2
ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJ
bmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcg
dHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3Vn
aC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOwor
I2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVy
biBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksOCArODg5LDEyIEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoK
KyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUg
aGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkBAIC05NjIs
MTEgKzk2NiwxNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIp
LmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVj
Q2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwpA
QCAtMTM0MSwyOCArMTM0OSwxOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVk
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNTdHJpbmdTcGVjdWxhdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChTcGVjSW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNBcmd1bWVu
dHMpOwpAQCAtMTQxMyw2ICsxNDEyLDkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y0Zsb2F0NjRBcnJheSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAKQEAgLTE0OTEsOCArMTQ5MywxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBUaGlz
IGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2Fu
dCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1
bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlCiAg
ICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIEFycmF5OjpV
bmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsKKyAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFr
ZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6QXJyYXlTdG9y
YWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAg
ICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBp
cyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2ggdGhlcmUgaXMgbm8K
ICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUsIHdlIG1heSBiZSBh
YmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtNjksOCArNzMsMTIgQEAgQXJyYXk6
Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlIAogICAgIC8vIGdldCBmcm9tIHRoZSBh
cnJheSBwcm9maWxlLgogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CiAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKICAgICAgICAgcmV0dXJuIGFycmF5TW9kZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKQEAgLTEyNCwxMCArMTMyLDE4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0
VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmlu
Z1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
LSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhh
c0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAg
ICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQor
ICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkKKyAgICAgICAgICAgICYmICh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJ
c0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBy
ZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwpAQCAtMTc4LDEwICsx
OTQsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAg
ICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBy
ZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgcmV0dXJu
ICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAg
IHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBy
ZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1
bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCAr
NDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBo
YXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBq
dXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBTdHJpbmcsCi0gICAgSlNBcnJheSwKLSAg
ICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlTdG9yYWdlLAorICAgIEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIEFy
Z3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKQEAgLTk2LDIzICsxMDAs
OSBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kCiAgICAgfQogfQog
Ci1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBs
ZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKK2lubGluZSBib29sIG1vZGVzQ29tcGF0aWJsZUZvcklu
ZGV4ZWRTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKIHsK
LSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
Ym9vbCBsZWZ0SXNKU0FycmF5ID0KLSAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAg
ICAgICB8fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9v
bCByaWdodElzSlNBcnJheSA9Ci0gICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAg
ICAgIHx8IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYg
KGxlZnRJc0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbGVmdCA9PSByaWdodDsKIH0KIAog
aW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCkBAIC0xMjEs
NiArMTExLDggQEAgaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNbwogICAg
IGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY0
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY3MCw3ICsxNjcwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQotICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICBzZXQo
ZGVzdGluYXRpb25PcGVyYW5kLAogICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgR2V0
QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLApAQCAtMjMwMyw3ICsyMzAzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNl
dChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0
ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9w
SW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdl
LCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CkBAIC0yMzU0LDEzICsyMzU0LDEzIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFk
ZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNl
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAog
ICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdldFByb3Bl
cnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhHZXRCdXR0ZXJmbHks
IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0
QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEJ5T2Zmc2V0LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlW
YWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJv
cGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOwpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW8KICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0
b3IuCiAgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAg
IEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFycmF5
LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
c2xvdCk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMy
X3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOwpAQCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW8KICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCiAgICAg
ICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6
OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgZmFsc2UpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwgZXhlYywg
aW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOCBAQCB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5
KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJO
QUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw4ICszMTIsMTAgQEAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczogewogICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29k
ZSBiZWxvdyBpbiBhbnRpY2lwYXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCiAgICAgICAgIC8vIHN1
YnN0YW50aWFsbHkgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLgogICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKQEAgLTMyMSwxMCArMzIzLDI1IEBAIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiBTcGVjdWxhdGl2ZUoKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1
cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgIC8v
IFRoaXMgY29kZSBkdXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0
aGlzIGNvZGUgYmVpbmcKKyAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBm
dXR1cmUuCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKQEAgLTMxMjIsMTEgKzMx
MzksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9y
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMyNjIsMTAg
KzMyNzQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAg
ICAgICBzcGVjdWxhdGVBcnJheShub2RlLmFycmF5TW9kZSgpLCBub2RlLmNoaWxkMSgpLCBiYXNl
R1BSKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
OgorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9u
IDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwg
cmVnVDEpOwogICAgIAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5
OjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIo
YWRkcmVzc0ZvcihpKSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTYsNiArMTk2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0
aQogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKICAgICAv
LyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRU
eXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1Qz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAt
NzgyLDcgKzc4Miw3IEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk4K
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElu
bGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1Bv
aW50ZXIKICAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0
b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0s
IHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVv
ZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRl
ciwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKQEAgLTc5Miw5ICs3
OTIsOSBAQCBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiAgICAgc3hp
MnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVh
ZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAt
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBh
ZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5y
ZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFu
ZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0
QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8g
cmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI2NDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxNSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9m
ZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxp
ZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3Qg
QWxsQXJyYXlUeXBlcyA9IDE1Citjb25zdCBOdW1iZXJPZlR5cGVCaXRzID0gNAorY29uc3QgTnVt
YmVyT2ZMZW5ndGhCaXRzID0gMzIgLSBOdW1iZXJPZlR5cGVCaXRzCitjb25zdCBMZW5ndGhNYXNr
ID0gKDEgPDwgTnVtYmVyT2ZMZW5ndGhCaXRzKSAtIDEKK2NvbnN0IE1heGltdW1MZW5ndGggPSBM
ZW5ndGhNYXNrCisKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29u
c3QgT2JqZWN0VHlwZSA9IDEzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJy
YXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNB
cnJheQorLy8KKy8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQg
aW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBw
cm9wZXJ0eSBtYXAuCisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBt
YXAgb2YgYXJyYXkgZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMg
aWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUK
Ky8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVy
IHRoYW4gIE1BWF9BUlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9u
ZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQK
Ky8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0
aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIGksCisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJy
YXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVj
dG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQg
aW4gdGhlIGZvbGxvd2luZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3Jh
Z2UgdmVjdG9yLAorLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3
aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAo
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZl
Y3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YK
Ky8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9y
IGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBs
aWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChN
QVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVl
IHdpbGwgYWx3YXlzIGJlIHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8v
IERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNp
emVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Yg
b3ZlcmZsb3cuCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKEluZGV4aW5nSGVh
ZGVyOjptYXhpbXVtTGVuZ3RoKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3Mg
dG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQ
SUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkx
Pi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4
RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhv
dWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVV
CisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2Fz
IGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMp
KQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0
byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3Qg
ZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8v
IE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNw
YXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVy
IHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3Rv
cgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0
LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxp
ZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1W
YWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5
KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5n
SGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3Vs
dC5zZXRMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxp
bmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVu
Z3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNv
bnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlT
dG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheVN0b3Jh
Z2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIu
aCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRoaXMg
c3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJy
YXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVj
dCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5
U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2Uo
KSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3Bh
Y2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5z
aGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMg
YXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICog
c2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0g
Ly8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0
IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2Uq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJy
YXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20o
SW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+
YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIHJlaW50ZXJycGV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlz
KTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcg
aGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7
IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExlbmd0
aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5ndGgp
OyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIo
KS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgp
IHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRP
ZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikK
KyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAgICAg
IG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlhbGl6
YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVyLm1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgYm9vbCBp
blNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3Bh
cnNlTWFwLT5zcGFyc2VNb2RlKCk7CisgICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVk
IG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAv
LyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVp
bnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBt
X3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsg
aW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZl
Y3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAor
CisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZz
ZXQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNs
b3RWaXNpdG9yOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFu
dGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xl
dG9uKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZs
eSgpOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBw
cm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhp
bmdIZWFkZXIpICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHBy
ZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhp
bmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFk
ZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4
aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hl
YWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsg
cmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9
CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2Uo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxv
Y2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90
IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUg
cmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAgICAvLyBtZXRo
b2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUg
YWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRo
ZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZwor
ICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgorICAgIEJ1dHRl
cmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1l
cyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5l
TWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAi
QnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAgICAgICBDUkFT
SCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5n
SGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
KnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJu
IGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigp
LCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xs
ZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksIHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKHNsb3RW
aXNpdG9yLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKwor
aW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHBy
ZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgbWVtY3B5KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LCBiYXNlKG9sZFByb3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgb2xkUHJvcGVy
dHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5
Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3Bl
cnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKAorICAgICAgICAgICAgJmJhc2UsCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAg
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBw
cm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93
QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdy
b3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhz
dHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdQcm9w
ZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5
KHJlc3VsdC0+YmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwg
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
ZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorewor
ICAgIHJldHVybiByZXNpemVBcnJheShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGluZGV4
aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1By
ZUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTog
SXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNl
ICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1v
cnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdl
J3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9u
IGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXpl
IHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRo
ZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNp
bmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4K
KyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5n
IG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5
IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNv
bXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZT
bG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
cHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3Bl
cnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bnVtYmVyT2ZTbG90cykKK3sKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1
bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUocHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgp
IC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9w
ZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEy
NjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBN
ZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3Qs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFt
ZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05h
bWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAi
UHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBBcnJheVN0b3JhZ2U7CisKK2NsYXNz
IEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBEZWZpbmUgdGhlIG1heGltdW0gc3Rv
cmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVu
c3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICBzdGF0
aWMgdW5zaWduZWQgY29uc3QgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDA7CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihJbmRleGluZ0hlYWRlciwgbV9hdXhXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1f
bGVuZ3RoKTsgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhp
bmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9m
IHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVw
ZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4
V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9p
ZCBzZXRMZW5ndGgoaW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3Ro
IDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9Cisg
ICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZv
aWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0K
KyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFk
ZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0
eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAK
KyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAg
IAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4o
dGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMg
KyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUg
c2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJ
bmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJp
dmF0ZToKKyAgICB1aW50MzJfdCBtX2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmll
bGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aEFuZFR5
cGU7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRz
IHR5cGUuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVh
ZGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19o
CisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRl
eGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRl
eGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2Rl
ZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90
IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNh
cGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOwor
c3RhdGljIGNvbnN0IEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9u
YWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUg
dXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4K
K3N0YXRpYyBjb25zdCBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhh
dCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAg
ICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Ug
PSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAg
ID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0Fy
cmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4K
K3N0YXRpYyBjb25zdCBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBv
ZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0
IEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIyLDcgKzEyMiw3IEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQ
dXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZh
dGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fj
dGl2YXRpb24qPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQg
PSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwpAQCAtMTMzLDggKzEzMyw4IEBAIHZv
aWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJz
dC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxl
bWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAv
LyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBi
b29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYg
cmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAo
QykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNDUsNzEg
KzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJy
YXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2
aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkg
YmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICog
QSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5v
bi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXBy
ZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUg
aXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMg
aXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWdu
ZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBB
bGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMg
YW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwg
YXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBz
dG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBi
ZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJl
IChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJz
ZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAg
ICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUg
c3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBk
ZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9y
IChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5z
aXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAg
KiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFy
cmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlz
IGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVs
b3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2gg
dGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAo
c2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwot
Ly8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJl
IDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZG
RkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFs
dWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhv
dXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8
cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
MTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBh
biBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9B
UlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8v
IGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChl
LmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAg
Ci0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3Ro
IGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJT
VF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3Rv
ciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2Vz
IHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0v
LyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGlu
dm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElm
IG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6
OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6
ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8g
YXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBh
cnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFu
dCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RB
cnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rv
cih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVu
Z3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRp
cGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBl
eGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlm
ICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkgKzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVj
dChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0
ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJh
eTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9y
TGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6
ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3Rv
cmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGlu
aXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAot
ICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwot
ICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5t
X2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVj
dG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQot
Ci1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxl
IHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0
b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNp
Z25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3Ro
KTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0
b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9y
YWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVj
dG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlu
bGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkg
ZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsK
LQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVf
dCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVw
b3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2ln
bmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0
ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1p
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
LXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJh
eUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMg
bm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAg
ICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5h
dHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYg
UmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NF
UlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFz
R2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIp
IHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRh
KTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVl
KTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJn
cyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkp
OwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlz
IGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0
IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0
ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJl
bW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVu
c2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVu
dHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFy
cmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFy
cmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZ
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dl
dHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90
LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxp
bmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAg
IEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVy
KCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFz
R2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0
ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBp
dCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNw
YXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlz
LCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17
Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7
Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAo
IW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAg
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0
b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBt
YXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0
cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3Rv
cmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0
b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4o
bmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAg
ICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3Zl
Y3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAg
IGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3Jp
cHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
SlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNl
bnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAg
ICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAg
IEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwot
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0g
ICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAg
ICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsK
LSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3Ip
OwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUu
MSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7
Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2Un
cmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJp
YnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAg
Ly8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBh
dHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAg
ICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBh
IHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRp
b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9i
YWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFy
cmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAv
LyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGlu
dGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQg
YW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJl
bnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAgICAg
ICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0
eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAg
ICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0s
IFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAg
ICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmli
dXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQot
ICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4K
LSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkg
RGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9m
Ci0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJs
ZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBi
eQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9m
IERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3Bl
cnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8g
NC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7
Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAg
ICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRz
KTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAg
ICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBp
cyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2Mg
YWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERl
c2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVu
dCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVu
dCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhl
eGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVs
ZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBv
dGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJy
ZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRh
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZl
cmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3Io
KSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gOS5h
LiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRy
dWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEK
LSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFBy
ZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMK
LSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJp
YnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8K
LSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8gOS5j
LiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4g
YWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8gUHJl
c2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0cmli
dXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAg
ICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAuYS4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRh
YmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFs
dWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAm
JiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJs
ZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0
ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
IHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMg
cHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBm
YWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAg
ICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkg
aXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRp
bmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
dG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVj
U3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFi
bGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRh
YmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHko
KTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAg
IHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgp
IHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29u
ZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBvYmplY3Qt
PkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29s
IEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAg
IGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7
Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9y
YWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAg
IGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAg
aWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZh
bHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2Jq
ZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAt
Pm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQs
MTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZv
aWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhl
YywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpA
QCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2Ug
LSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rv
ciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAgICAg
bGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsK
LSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBl
bHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlz
IG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBh
IHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgp
KSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0
aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBk
b24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkg
ewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBo
YXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgot
ICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUg
bV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8g
Q2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5k
IHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8g
c3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFs
bG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0g
bV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0g
YWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVT
cGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAg
aWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5
IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVh
ZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJv
dykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sg
d2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29u
dGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9y
IHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWdu
ZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAt
PnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBt
X251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5
IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUg
bWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3Rd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0g
ICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0
eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3Qg
PSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVu
Z3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXAp
KSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxk
IGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAu
Ci0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVu
Z3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAv
LyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBh
bmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAv
LyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJl
YWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9w
ZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFs
bG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0g
ICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFy
cmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElz
UmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3cs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNF
eHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5n
IGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAg
IC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBp
cyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFp
bHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQot
ICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRl
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENv
cHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRo
ZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3Zl
Y3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJz
dF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
LSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3Bl
cnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwp
OwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsK
IAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJy
YXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAo
aSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90
LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNP
YmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVs
ZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0Zv
clFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBA
QCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChk
YSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsK
LSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZp
ZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZv
ciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hp
Y2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3Bl
cnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3Rv
cmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChz
dG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXpl
KCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNl
Y29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5k
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBh
cmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4
SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlm
IChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAg
ICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAg
ICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwo
bmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8g
aW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5n
dGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxh
c3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0K
LSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBi
ZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAK
LSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwg
YmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVj
dG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JM
ZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNh
cGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJ
S0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdl
LT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0
ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VT
aXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3Jh
Z2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9h
bGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNv
bWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBl
ZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4Qmlh
cyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3
VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxs
b3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdl
Q2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3
QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBh
bmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2lu
ZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBt
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBB
cnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAg
IG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsK
LQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0g
ICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0
cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2Vz
IHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4K
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhh
bmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhC
aWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHko
KTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91
dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
KyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBw
YXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8v
IFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmljczoKQEAgLTEwOTMsOCArMjU0LDgg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1
cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBp
bmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBo
b3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24g
MnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9y
TGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVu
Z3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNv
dW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0x
MTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0ds
bwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCAr
IGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2lu
ZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAg
IEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFz
KTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5k
ZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBj
dXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qg
b3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4K
ICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwog
CiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3JlIGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8g
YWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUg
ZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIHVuc2lnbmVk
IG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5
IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2Vl
cCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYm
IGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxl
bmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0g
ICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFn
ZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsK
LSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAgLy8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29p
bmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhl
IHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBh
Y2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4g
dGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4K
ICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBw
b3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCk7CiAgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBv
c3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNpcmVkSW5kZXhCaWFzOwogCi0gICAgbV92ZWN0
b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2lu
ZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3Rv
cmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nh
c3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsK
KyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBh
bGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBl
eGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7CisgICAgdW5zaWduZWQg
bmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkg
aXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVw
IHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYg
aXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVu
Z3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0aGluZ3MKKyAgICAgICAgbmV3QWxsb2NCYXNl
ID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1faW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OworICAgICAg
ICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxl
bmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFn
ZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKGRlc2lyZWRJbmRl
eEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVj
dG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CisgICAgfQorCisg
ICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJl
ZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZl
Y3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4
QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAgICAvLyBTdGVwIDQ6CiAgICAgLy8gQ29weSBh
cnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1j
YXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgogCiAgICAgLy8gSWYgdGhpcyBpcyBi
ZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBh
bHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBt
X2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFk
ZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1f
dmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgp
OwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAg
ICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0Fs
bG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhl
IG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0gICAgfQorICAgIG1lbW1vdmUobmV3U3RvcmFn
ZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShtX2J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG91dE9m
TGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE2MiwxMyArMzI0LDEzIEBAIGJvb2wg
SlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKIHsKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlz
IHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhl
IGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFy
c2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5t
X3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdy
aXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3ICszODIsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3Ro
KTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjks
NDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBK
U1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkg
ewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFs
dWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVl
U2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1l
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywg
aW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
KyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2Fs
bCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3Ro
IiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAg
ICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJu
IGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwg
d2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1
ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIAorICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAg
ICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2
YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0
b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBt
X2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5n
dGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4K
KyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkg
eworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9y
YWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1
LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJ
bmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOwog
ICAgIH0KLQotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9y
ZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElL
RUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBtZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBz
dGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBs
ZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8gSGFuZGxlZCB0aGUgc2Ft
ZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0
b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
fQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQp
CiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5
U3RvcmFnZSgpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVu
Z3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAog
ICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4g
YWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJh
eVByb3RvdHlwZS4KQEAgLTEzMTgsMTggKzUwNiwxOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGgg
LT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAg
ICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0
b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAg
ICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAot
ICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09
IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hh
ciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNv
dW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3Zl
KG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3Rv
cmFnZSk7Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAg
IH0KQEAgLTEzMzksNTkgKzUyNywyOSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0
YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQs
IGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAg
ICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBh
Ym5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5
UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4
QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VT
aXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlT
dG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3Vu
dDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgc3Rv
cmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IGNvdW50KTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CisgICAgICAg
IHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIGNvdW50
KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVjLT5nbG9iYWxEYXRh
KCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAg
IEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNp
dENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAg
ICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsK
LQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7
Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAg
ICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFz
ZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNP
YmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2Fz
dDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9p
bmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1h
cC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVy
c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRh
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTQxMCwx
MTAgKzU2OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQog
ewogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBh
bGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxW
YWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigp
KSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChl
eGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBm
YXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBt
ZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAg
ICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1p
dGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAg
ICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJz
KQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0
LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxzbyBkb24ndCBy
ZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2li
bGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RG
b3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5n
cyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJh
c2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBv
dmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBs
YXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMg
ZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9k
cyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotCi0g
ICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgCi0gICAgSGVhcDo6
aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUu
aXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAg
ICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYg
dmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2
ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5n
SW5saW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmlu
ZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBU
aGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAg
ICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRp
bmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBk
byBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRo
aXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIg
Y29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAg
IC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNv
bWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAg
ICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkg
bWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAg
VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0
cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUu
aXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50
IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNv
bmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4p
LgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhN
RTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJs
ZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUg
c29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0g
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTog
VGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBz
b3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFu
ZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rv
ckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBm
dW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdl
LAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBu
dW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3Rl
bmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxU
cmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk2LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3Qg
QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9y
ZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1i
ZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0
IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCi0gICAgLy8gaWYgYSBsYXJnZXIg
YXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7Ci0gICAg
aWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5n
dGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAobV9zcGFy
c2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAtPnNpemUoKSA6IDApOwotCi0gICAgaWYgKCFu
b2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0
b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJe
MzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOwotICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRv
cHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVu
Y3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4o
KSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1v
ZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRp
bmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVu
c2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5
LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBp
bnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVm
aW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVl
IHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAo
IXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVl
Lmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAg
ICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2Vw
dGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAt
IGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBh
IGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgo
KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVk
IG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBz
dG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAo
IW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRy
ZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0
NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9l
eGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24g
PSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdy
b3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQ
dHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rp
b24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9y
LCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20g
dW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwg
aWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5z
ZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1E
ZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBo
b2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZp
bmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2Vk
VmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0
b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhv
bGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0
aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5z
ZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsK
LSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCisgICAgICAgIC8vIG1vZGlm
eWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0
aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFi
c3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRl
ci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1
ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLQotICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBi
YWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAgICAgICAKKyAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7CisgICAg
ICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFy
ZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5n
IG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAg
ICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFW
TFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAg
aXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
RGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAg
ICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGlu
LgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7
Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHpl
cm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZl
Y3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2sp
OwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2Vk
QXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgs
IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZl
Y3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rv
cltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3Mu
YXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVk
IHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZv
ciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0
KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRl
KiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFT
U0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgp
OwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVu
Z3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlm
ICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwor
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlm
ICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0
QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGks
IGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0
KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0NSwxMDMgKzk2Myw3MSBAQCB1bnNpZ25lZCBK
U0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAgICAgQVNTRVJUKCFpblNwYXJzZU1vZGUo
KSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4g
MDsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVu
Z3RoKTsKLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVu
ZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBp
ZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5l
ZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5z
aXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUg
YW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAot
ICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAg
ICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1E
ZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25z
aXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
KTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0
byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9
PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5l
d1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAK
KyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXAp
IHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAg
ICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxv
Y2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBu
b3QsCisgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisg
ICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRW
ZWN0b3JMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251
bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJz
ZU1vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAo
KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAK
KyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVl
c0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmly
c3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNT
RVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNl
Y29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
aykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVm
aW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQu
Ci0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY0ODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlf
aAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiAjZGVmaW5lIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZIDAKQEAgLTMwLDEzMSArMzIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAg
ICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
ewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAg
IFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVl
IGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3Bl
cnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBj
b25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlW
YWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlF
bnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAg
ICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAg
ICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRS
ZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAg
ICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5
KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3Mg
PSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFn
cyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2ln
bmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3Qo
RXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBp
dGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAg
ICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSBy
ZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBt
X21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9t
YXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cg
Y29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBt
X3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRo
ZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50
cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRp
bmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3Ry
dWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhv
ZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZv
cmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlm
dCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZh
aWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAq
IHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNp
Z25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAg
ICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9j
QmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBL
ZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0
aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAv
LyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAg
ICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRp
bmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwot
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsg
fQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBm
cmllbmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVi
bGljOgorICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAg
ICAgICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkK
KyAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNO
b25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXpl
ZChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJs
aWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9
IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFz
dCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjUgKzU5LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0
OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4g
aXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQu
Ci0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0
ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUu
Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7
IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5n
dGgoKTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBp
dCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0x
OTksOTkgKzc3LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1
bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9
Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRl
eChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
eCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lk
IGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsK
LSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJU
KGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRp
YWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxp
emUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NF
UlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsK
LSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNp
Z25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
aGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4K
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9y
YWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNo
ZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2lu
aXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwot
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAg
ICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENh
bGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JM
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQg
ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXpl
KHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcDsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCkBAIC0zMDEsNDAgKzEwOSw1MCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEm
KTsKICAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgICAg
ICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0g
ICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0
Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKLQotICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hl
Y2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hl
Y2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5j
eShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAg
ICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVj
dG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFs
dWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAgICAgIEFycmF5U3RvcmFn
ZSAqbV9zdG9yYWdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVl
TWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXks
IG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFz
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsg
fQogICAgIH07CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGlu
aXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgYmFzZUluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RP
Ul9MRU4pKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAg
ICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJl
dHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJh
eS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5n
dGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RP
Ul9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAg
ICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsK
KyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+
bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxE
YXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAg
ICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1Mywz
MCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpT
Q2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5m
bzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXND
ZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9m
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9u
IHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNh
bGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1h
eGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUg
dXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJh
bmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNk
ZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0Vf
VkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUg
c2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5l
ZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBj
YWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVv
ZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNz
ZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9u
IChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NF
UlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0
aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAg
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI2NDgzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogVVN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAg
ICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1
Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxp
ZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNTgsNiArMTU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRp
YyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBVU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09i
amVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjQ4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3Qt
PmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykp
IHsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
YWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShy
ZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNjQ4MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAg
dHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAg
V2UgdXNlIHRoaXMKKy8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRv
IGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBl
ZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRp
YyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKKwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVj
dFNsb3coSlNDZWxsKiBjZWxsKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+
c3RydWN0dXJlKCk7CkBAIC04NiwyOSArOTEsNzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENs
YXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3Rv
cmFnZSBzdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKKyAg
ICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6
ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAgQVNTRVJUKHN0b3JhZ2VTaXplKTsKICAgICAKLSAgICBz
aXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBB
U1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAq
IHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
YmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJ
bkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0
YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFj
aXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5l
d0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0
b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJl
bnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSgpOworICAgIEluZGV4aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5p
bmRleGluZ0hlYWRlcigpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IGhl
YWRlci5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IGhlYWRlci5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUp
OworICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAg
ICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lz
ZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OworICAgICAgICAKKyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOworICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0
b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0
b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1
cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAg
ICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAg
ICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VC
YXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAor
ICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJG
cm9tKCpzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2Ug
PSBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb3VudCA9IG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsg
Y291bnQtLTspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3Vy
Y2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGls
ZHJlbih2aXNpdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFy
ayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3IsIHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
ICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAp
CisgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQg
SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKQEAgLTEyMiw5ICsxNjksOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxp
bmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9i
amVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKQEAgLTE0Miw5ICsxODksOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRP
ZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVj
dCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEw
ICsyMDgsNDggQEAgVVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAg
IHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3Jl
IGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQg
aXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0
eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAg
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAg
ICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwogfQogCiAv
LyBFQ01BIDguNi4yLjIKQEAgLTE3NCw2ICsyNTksMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmpl
Y3QpKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENo
ZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4KICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszMjcsMTQyIEBAIHZvaWQg
SlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHNob3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU09iamVjdCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZh
bHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsK
KyAgICAKKyAgICBpZiAoVU5MSUtFTFkoaSA+PSBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0
ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYg
KGkgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2
YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAg
ICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAg
ICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJz
ZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+
bGVuZ3RoKCksIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5l
dyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAg
ICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhl
bS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRl
cmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAg
IENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3
QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgoMCk7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkg
fHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBB
U1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxl
bmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBy
ZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5
U3RvcmFnZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3
U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVD
VE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5B
cnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9j
YXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9k
ZSgpOworICAgICAgICByZXR1cm4gc3RvcmFnZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCkBAIC0zMDQsNiArNTI5LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZSogZXgKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5z
aWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYg
KCF0aGlzT2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmpl
Y3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1NjEs
NDUgQEAgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVy
biBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6
CisgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFs
dWVTbG90KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAg
ICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiAr
NzI5LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFw
cGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxp
bmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2Vy
CisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBu
ZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkg
bWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBz
d2l0Y2ggKG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAg
ICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMg
fHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAg
ICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4o
KSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2
b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9i
amVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5h
bWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQpAQCAtNTE1LDggKzgyNCw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERh
dGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJy
YXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkK
ICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVu
c2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEg
Kzg4MSwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVy
UHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAg
ICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24t
PmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0g
YXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAg
ICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9j
YXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xv
dCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYw
MywyNiArOTExLDUyMiBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChK
CiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6
Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRv
cikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQor
ICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVz
Y3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNj
cmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRl
ciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAg
ICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYg
KG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRl
ciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRl
ciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdl
dHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNl
dFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1h
cC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3Ry
dWN0dXJlKCksIHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRy
YW5zaXRpb24uCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsK
KyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4x
Mi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKwor
ICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6
IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAg
ICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBh
dHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAg
ICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBh
dHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAg
ICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBh
IHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRp
b24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAg
IC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5l
ZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3Vy
cmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAg
ICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2Ny
aXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAg
ICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVd
XSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwor
ICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5
CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVl
LgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0
eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAg
b2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJh
YmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVk
IGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJv
cGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAv
LyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0
czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250
RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisg
ICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3Is
IGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisg
ICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZp
ZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQg
aW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5
LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5n
ZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3Iu
ZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4K
KyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWpl
Y3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBb
W0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24g
b2YgZWFjaCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQo
KSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlz
IHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICgh
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwg
aWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBo
YXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJl
bnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJv
cGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eSdzCisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVd
XSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRl
cyB0bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAv
LyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJv
bSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAv
LyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkn
cyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8g
dGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
ICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFE
ZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEu
IElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4K
KyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0
YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dy
aXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBm
aWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3Jp
dGFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0
aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1Zh
bHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkg
JiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24s
ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFi
bGUuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0
dGVyUHJlc2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3Jp
cHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1
ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwg
dGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMg
ZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYm
IGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVz
YyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0p
IGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQo
KSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0
dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25k
aW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhl
YywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0
cnVlLgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5
RGF0YShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcCgpOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6
YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Cisg
ICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEu
aGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291
dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3Rv
cmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdD
QydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1
bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1w
KSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9u
J3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsK
KyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2
ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAg
ICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVy
dHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICAgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisg
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2
ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtF
TFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5
IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAg
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0
aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAg
ICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0g
ICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAg
IGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJh
eSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1Jl
YWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRl
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAg
Ly8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxl
dGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQt
PmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhl
IG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1
cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhl
YywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3N0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3
aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VM
WSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdl
IHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3Bh
cmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZl
Y3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VM
WSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAg
ICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkg
YmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhv
bGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUu
CisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVu
Z3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUo
KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0
aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4i
KTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBj
aGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2ls
bCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2
ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1
bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAr
IG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1
dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVy
ZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBh
bGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1h
cC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9y
OworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5k
KCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAg
IGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5
OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNy
ZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIGkgKyAxKSk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVu
c2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0
aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNlZExl
bmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKGN1cnJlbnRMZW5ndGgsIDEw
MDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAg
ICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFtX3ZlY3Rv
ckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxh
c3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVp
dmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAz
ICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGgg
PSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3Jt
IGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5n
dGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRM
ZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgcmV0
dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJheUxlbmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7
Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24g
bGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVj
YXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisg
ICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJl
Y2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25l
ZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4g
dmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0
b3JMZW5ndGgobmV3TGVuZ3RoKTsKKworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHBy
ZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYg
KExJS0VMWSghaW5kZXhCaWFzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxl
bmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAg
aWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1f
YnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9t
aWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCisgICAgdW5z
aWduZWQgbmV3SW5kZXhCaWFzID0gbWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2Fy
Z2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KKyAgICB1bnNp
Z25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVz
aXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdW
ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwor
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhC
aWFzOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
K3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNr
VHlwZSB0eXBlKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9y
WmVybygpOworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9y
YWdlKTsKKyAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNT
RVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZl
Y3RvciA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgo
KSk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykK
KyAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2gg
aWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENv
bnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVl
c0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgeworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmly
c3Q7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaW5kZXggPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NF
UlQoaXQtPnNlY29uZCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lz
dGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUo
KS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVh
bGxvY2F0ZWQuCisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKworQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7
CisgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9w
ZXJ0eQorICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRl
ZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3
U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTYzMCwxMCArMTQzNCw0NiBAQCBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDA7CiAgICAgSlNDZWxsKiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9m
ZnNldCkKKyAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1
dGVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
aSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
dGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQg
PT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU0NCwyNiBAQCBwcml2YXRlOgogICAg
IEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhy
b3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9u
IHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1
cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGll
cyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVu
IGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29u
ZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxl
dGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAg
ICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYg
d2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8g
dW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlz
RXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAg
ICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24g
b2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9y
OwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTU4OSw4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRv
ciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVy
dHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAy
LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVu
dChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlw
dG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAg
IC8vIENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9w
ZXJ0eQpAQCAtNzg0LDggKzE2MjQsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFs
KGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
IHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJl
bnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2Yg
YW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjQyLDcgQEAgYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdl
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAg
ICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsx
NjUyLDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAg
ICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9y
LmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3Jp
cHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5z
aWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0
ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4
LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1
bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAg
ICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5E
ZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRo
aXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRy
dWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVj
LCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xv
dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQ
dXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3Rv
cmFnZUJhcnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bERhdGEuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgpAQCAtNzksNiArNzgsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlz
IGEgZ2V0dGVyL3NldHRlcgogICAgIH07CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRl
KTsKKyAgICBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUs
IFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVf
QVNTRVJUKERvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0
ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBGdW5jdGlvbl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KyAgICBDT01QSUxFX0FTU0VSVChBY2Nlc3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFj
Y2Vzc29yX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNG
aW5hbE9iamVjdDsKIAogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05
Niw2ICsxMDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXpl
QXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAs
OCArMTI4LDE3NSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vz
c0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0
aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8g
dGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFp
biBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxl
ZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmli
dXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1
ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1l
KSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBp
bmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisg
ICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUg
dGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsK
KyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRp
YWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6
ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPmxlbmd0
aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhl
IGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7
CisgICAgICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFy
c2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZWZseS0+
YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAg
IC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZp
bmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90
IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM3
OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdl
VW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2Uu
Z2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJl
dHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAg
ICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3Rv
cmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBA
IC0yMjcsNyArNDA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0
SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdl
KCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQ4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3Rh
dGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlv
bnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVT
dG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShK
U0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0g
ICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ2
NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTgsMTQgKzUwMSw2NCBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlv
dSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRl
IGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93Lgot
ICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAg
ICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZv
aWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBz
aXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNp
dG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8v
IENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJl
IGl0IGhhcyBhcnJheQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVy
d2lzZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlT
dG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0
byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAv
LyBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5
IHN0b3JhZ2UuIFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3Jt
IGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3Qg
dG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUg
aXQKKyAgICAgICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRp
YWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAg
CisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAg
Ym9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM4LDE3
ICs1NzEsNDUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAg
ICAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhK
U0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRl
PFB1dE1vZGU+CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBK
U0NlbGwqKTsKIAogICAgICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KTsKIAogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRy
eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNy
ZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVy
IG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERl
c2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRv
ciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAg
ICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0
TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRM
ZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVz
aXJlZExlbmd0aCk7CisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hl
Y2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hl
Y2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNp
c3RlbmN5Q2hlY2spOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJm
bHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzQs
OCArNjM1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoK
LSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ5MywxOCArNzU0LDEyIEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNT
RVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdl
KSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7
CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0Miw5ICs3OTcsOSBAQCBpbmxpbmUgSlNP
YmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVl
LmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0
dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkyLDE1ICs4NDcsMTYgQEAgaW5saW5lIEpT
T2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVj
dHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVy
U2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0
aW9uKTsKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+
Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXMsIGdldERpcmVjdE9mZnNldChvZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93
blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQg
bWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxs
eSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODYsNiArOTQyLDcgQEAgaW5saW5lIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJU
KHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAg
ICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFw
OjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25h
cnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKQEAgLTcxNCwxMSAr
OTcxLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAg
ICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9
IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJl
KCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5
KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogCiAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKQEAgLTczMiwxMyArOTg5LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6
ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwog
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1cnJlbnRD
YXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICBu
ZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFj
aXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFn
ZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRl
cmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9m
ZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0
aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAg
ICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KQEAgLTgw
NSw5ICsxMDYyLDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9y
YWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3Rv
cmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNz
YXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBA
IC04NDEsMTEgKzEwOTgsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0ds
b2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0
dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdy
b3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRP
ZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwotICAgIHNldE91
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKICAg
ICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKQEAgLTk0
NSwxMyArMTIwMiwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
ICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
ICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50
IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChp
c091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFT
U0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
OwogfQpAQCAtOTU5LDcgKzEyMTYsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2Uo
UHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQog
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKQEAg
LTU5LDcgKzU5LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQog
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3Qu
Z2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0
RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVp
cmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRP
ZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAK
IGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3Jh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0
b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5
cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTEgKzExNSwxMSBAQCBib29s
IFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1
ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVi
bGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30K
KworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9p
ZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlw
dG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7
CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6Oklu
dEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAg
ICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAg
fTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0
eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBN
YXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAg
ICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisK
KyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBT
cGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAg
ICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsK
KyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVu
Z3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8Rmxh
Z3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChF
eGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0Kiwg
dW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAu
ZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlk
IChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRv
ciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkg
eyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0
ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0
dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRl
cmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7
CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNf
aAorCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVl
TWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5
RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAg
IHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9
IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9m
KHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1f
cmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3Bh
cnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8v
IFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRo
ZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0
aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWlu
LgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEo
ZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnkuYXR0cmli
dXRlcyAmIFJlYWRPbmx5KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Cisg
ICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0KiBzZXR0
ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAgIGlmICgh
c2V0dGVyKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBj
YWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVu
ZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJy
YXksIGFyZ3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChh
cnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAg
ICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25l
IC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXkt
PmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgfQor
CisgICAgZW50cnkuYXR0cmlidXRlcyA9IDA7CisgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBK
U1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIGlm
IChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRl
ciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsK
KyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAorewor
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Cit9
CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6Omdl
dCgpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0
dGVyU2V0dGVyKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmplY3QqIGdl
dHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVy
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRh
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKworaW5saW5l
IEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9CisKK2lu
bGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChp
dGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAx
MjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0
b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsK
LXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0
b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hl
Y2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAg
ewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAK
LSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFn
KQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRh
ZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+
KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYg
b3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIAotcHJp
dmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTI2NDgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAs
IG1faW5kZXhpbmd0eXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6
TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBl
KQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0
IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2Vs
bCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
KQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEs
IHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJh
bnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTks
NyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJl
dmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQorICAg
ICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQ
cm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAg
ICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTUw
Miw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb24pOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmUq
IGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAs
IGF0dHJpYnV0ZXMpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0
cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcyk7CisgICAgICAgIEFTU0VSVChleGlzdGlu
Z1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5
cGUpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
KyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKKyAg
ICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKKyAgICAKKyAgICBp
ZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3Bl
cnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVj
dHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAg
cmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNo
ZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxMjY0ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBT
dHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdU
eXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogCiAgICAgICAgIGJvb2wgaXNTZWFs
ZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7
CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFR5cGVJ
bmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0KICAgICAgICAgYm9vbCBpc09iamVjdCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCisgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZSAmIEFs
bEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZTsgfQogCiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVj
dC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KQEAgLTMyNyw2ICszMzEsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdU
eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBAIC0zNTYsNyArMzY1LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAgICAg
ICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00MDksNiArNDE4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJbmZvIG1fdHlwZUluZm87CisgICAgICAg
IEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICAgICAgCiAgICAgICAgIFdyaXRlQmFy
cmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0MCw3ICs0NTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgOiAxOwogICAgICAg
ICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0g
ICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiA3OworICAgICAgICB1bnNp
Z25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7CiAgICAgICAgIHVuc2lnbmVkIG1fc3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAgICAgICAgdW5zaWduZWQgbV9wcmV2ZW50
RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBA
IC00NTgsMTEgKzQ2OCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBBU1NF
UlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoY2xhc3NJ
bmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbyk7CisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0
dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSk7CiAgICAgICAg
IHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CiAgICAgfQpAQCAtNTg4LDkgKzU5OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIGlubGlu
ZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICAgICAgOiBtX2NsYXNzSW5mbyhzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1fc3RydWN0dXJlKGdsb2JhbERhdGEsIHRo
aXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiAgICAgewog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEyNjQ4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJ
bmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFw
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCit1bnNpZ25l
ZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb25z
IHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5IGFkZGl0aW9ucy4KKworLy8gU3Vw
cG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxh
dGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJp
bmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgorZW51bSBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9OworCit1bnNpZ25lZCB0b0F0dHJp
YnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRy
YW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitJbmRleGluZ1R5cGUgbmV3
SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9j
YXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFn
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160629</attachid>
            <date>2012-08-26 22:07:59 -0700</date>
            <delta_ts>2012-08-27 21:40:54 -0700</delta_ts>
            <desc>rebased again</desc>
            <filename>butterflies_patch_19.diff</filename>
            <type>text/plain</type>
            <size>288959</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5MSBA
QAorMjAxMi0wOC0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmFycmF5TW9kZUZyb21T
dHJ1Y3R1cmUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRv
U3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1v
ZGVTdXBwb3J0c0xlbmd0aCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFt
ZSk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IpOgorICAgICAgICAoSlNDOjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAg
ICAgKEpTQzo6YmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlTdG9yYWdlLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6QXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpmcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRWZWN0b3JMZW5ndGgp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6Y29weUhlYWRlckZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6OmluU3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6OnNpemVGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjplbXB0eVNp
bmdsZXRvbik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dG90YWxTaXplKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5Ojpmcm9tQmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZB
dXhXb3JkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhp
bmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbik6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd1By
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQp
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6Cisg
ICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKE1ldGhvZFRhYmxlKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlci5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpJ
bmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6OmF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6
c2V0QXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZik6CisgICAgICAgIChKU0M6OkluZGV4
aW5nSGVhZGVyOjpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRl
cjo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmJ1dHRlcmZs
eSk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJlQ2Fw
YWNpdHkpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRl
bGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3Vu
dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNM
ZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUlu
aXRpYWxBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpmaW5hbGl6ZUFycmF5RGF0YSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxp
bmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToK
KyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6aW5TcGFyc2VJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZs
eUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVybyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNOb25GaW5hbE9iamVjdDo6
SlNOb25GaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVy
ZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxh
dGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNl
KToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDog
QWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBP
YmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VB
cnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJz
ZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdlQmFy
cmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6
CisgICAgICAgIChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisKIDIwMTItMDgtMjYgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggZm9yIGJ1
aWxkcyB3aXRob3V0IFZBTFVFX1BST0ZJTElORy4gSSBoYWQgZm9yZ290dGVuIHRoYXQgc2hvdWxk
RW1pdFByb2ZpbGluZygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRh
KEpTQ2VsbCosIENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2NzIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMp
OwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Qcm8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjY3
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFj
aCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBU
aGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJp
dHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgx
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJy
YXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4g
SXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFz
cyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCAr
ODk0LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAg
ICAgICAgIC8vIGNhc2UuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihTcGVjSW50MzIpOwpAQCAtOTU2LDEwICs5NjAsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CiAgICAgICAg
ICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNDA0LDggKzE0MTIsMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZp
bHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAg
ICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1
dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTIg
QEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZQogICAgIHN3aXRjaCAo
bW9kZXMpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVybiBBcnJheTo6VW5kZWNpZGVkOwot
ICAgIGNhc2UgSXNKU0FycmF5OgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzIDogQXJyYXk6OkpTQXJyYXk7CisgICAgY2FzZSBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5U3RvcmFnZTsKKyAgICBj
YXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4g
bWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgaXMgcG9zc2libHkg
YSBraW5kIG9mIGFycmF5IGZvciB3aGljaCwgdGhvdWdoIHRoZXJlIGlzIG5vCiAgICAgICAgIC8v
IHVzZWZ1bCBkYXRhIGluIHRoZSBhcnJheSBwcm9maWxlLCB3ZSBtYXkgYmUgYWJsZSB0byBleHRy
YWN0IHVzZWZ1bCBkYXRhIGZyb20KQEAgLTEyMCwxMCArMTI0LDE4IEBAIGJvb2wgbW9kZUFscmVh
ZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAg
ICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIAot
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkKKyAg
ICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJn
dW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOwpAQCAtMTc0LDEwICsxODYsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5
OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6
U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJh
eToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVy
biAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAg
ICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI2
NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4aXQsIC8v
IEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRp
b24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBTdHJpbmcs
Ci0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlTdG9yYWdl
LAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFn
ZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJh
eSwKQEAgLTc0LDggKzc4LDggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2Rl
KTsKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTE0LDI1ICsxMTgsNiBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9k
CiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZChB
cnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKLXsKLSAgICBpZiAobGVmdCA9PSBy
aWdodCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgYm9vbCBsZWZ0SXNKU0FycmF5
ID0KLSAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCBsZWZ0ID09IEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9vbCByaWdodElzSlNBcnJheSA9
Ci0gICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8IHJpZ2h0ID09IEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYgKGxlZnRJc0pTQXJyYXkgJiYg
cmlnaHRJc0pTQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogaW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbW9kZSkK
IHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKQEAgLTE0Nyw3ICsxMzIsMTYgQEAgaW5saW5lIGJvb2wg
bW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbQogCiBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNM
ZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9k
ZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAg
IGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDcgKzE2NzQsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCi0gICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsK
KyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2Up
OwogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAg
ICAgICAgICBHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5z
aXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksCkBAIC0yMzA5LDcgKzIzMDksNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRC
eU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBwcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKQEAgLTIzNjAsMTMgKzIz
NjAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0
ZXJmbHksIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3Rh
dHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRT
dG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFj
cm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKEdl
dEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0FycmF5LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwg
Tm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpT
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5h
bDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVu
Y29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJl
eW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOwpAQCAtNTQwLDcgKzU0MCw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW8KICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCiAgICAg
ICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6
OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgdHJ1ZSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
CiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwpAQCAt
NTU3LDcgKzU1Nyw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8K
ICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVy
ZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCiAgICAgICAgIEFTU0VS
VCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5k
ZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFs
c2UpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsOCBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9w
ZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmlj
dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMy
X3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJp
Y3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNjcy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MzIsOCArMjQzMiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI0NDUsOSAr
MjQ0OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQg
dGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgICAgICAvLyBhdCB0
aGlzIHBvaW50LgotICAgICAgICAgICAgCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAx
MjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDggKzMxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBl
eHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czogeworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiB7CiAgICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNhdGVzIHRoZSBjb2Rl
IGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKICAgICAgICAgLy8gc3Vi
c3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCiAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwpAQCAtMzI0LDEwICszMjYsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheShOb2RlJiBubwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgLy8g
VGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhlIGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRo
aXMgY29kZSBiZWluZworICAgICAgICAvLyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAor
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVt
cC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCiAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzEyNywxMSAr
MzE0NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJp
bmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgICAg
ICBicmVhazsKLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0
b3IpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIGRlc2NyaXB0b3ItPm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwpAQCAtMzI2MCwx
MyArMzI3MiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVz
Y3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOiB7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRSZWcp
OworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAg
ICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NSw2ICsx
MDY1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVt
aXRMb2FkUGF5bG9hZChpdGVyLCByZWdUMSk7CiAgICAgCiAgICAgLy8gVGVzdCBiYXNlJ3Mgc3Ry
dWN0dXJlCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1
cmUpKSkpOwogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfcG5hbWUoSW5zdHJ1Y3RpCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKIAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIo
YWRkcmVzc0ZvcihpKSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEy
NjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsMjEgKzk0MSwyMSBAQCBfbGxpbnRfb3Bf
aXNfc3RyaW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90Rmlu
YWwocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBh
c3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBh
Y2l0eSwgb2sgZW5kKQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKLSAgICBsb2FkcCBKU09iamVj
dDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdl
Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxv
YWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3Jh
Z2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRpIFRh
Z09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhp
bmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNp
emVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0s
IHBheWxvYWQKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3Bl
cnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAgICAgYmlsdCBwcm9w
ZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKLSAgICBsb2FkcCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRT
dG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2Vd
LCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAogICAgIGptcCAucmVh
ZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAt
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBh
ZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5y
ZWFkeToKLSAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikg
KiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkg
UGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0
ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBh
eWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9h
ZAogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzk1LDcgKzc5NSw3IEBAIG1h
Y3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk4KICAgICBhc3NlcnQobWFjcm8g
KG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VDYXBhY2l0
eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKICAgICBsb2FkcCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRT
dG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAgbG9hZHAg
KElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCiBlbmQK
IAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50
LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKQEAgLTgwNSw5ICs4MDUsOSBAQCBtYWNybyBsb2Fk
UHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiAgICAgc3hpMnAgcHJvcGVydHlPZmZzZXRB
c0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAg
ICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6
Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXpl
b2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcCAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5
T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXpl
LCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSwxNSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisj
IENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5
ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1
Citjb25zdCBOdW1iZXJPZlR5cGVCaXRzID0gNAorY29uc3QgTnVtYmVyT2ZMZW5ndGhCaXRzID0g
MzIgLSBOdW1iZXJPZlR5cGVCaXRzCitjb25zdCBMZW5ndGhNYXNrID0gKDEgPDwgTnVtYmVyT2ZM
ZW5ndGhCaXRzKSAtIDEKK2NvbnN0IE1heGltdW1MZW5ndGggPSBMZW5ndGhNYXNrCisKICMgVHlw
ZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50
aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKwor
I2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisK
KyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFByb3Bl
cnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxv
Y2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLyAg
ICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmll
cy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGgg
aWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2lnbmVk
IGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9J
TkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2
YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFyZSBu
b3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNP
YmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmlj
IGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisvLyB3
aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwg
YmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2Ug
bWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZwor
Ly8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
KSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8gICAg
IHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBwcm9w
ZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgZWl0
aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUgc3Bh
cnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRoYXQg
d291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hlcmUg
YXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50cmll
cyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNUT1Jf
SU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJlIHN0
b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUgbWF4aW11
bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIg
dG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisjZGVmaW5l
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3Ro
KQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgo
KSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gt
TyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVY
IChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQg
d2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdl
ci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBC
QVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3
ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNl
cGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZF
Q1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBn
cm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRk
ZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdo
ZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3Ig
YWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlz
IHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBp
dCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUg
Ym9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVt
VmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8
fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK2lubGlu
ZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKKyAg
ICByZXN1bHQuc2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGgodmVjdG9y
TGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIg
YmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVy
biBpbmRleGluZ0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJh
eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFy
c2VBcnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBh
Y3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0
byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBt
X3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVz
ZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMg
aW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJh
eVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJh
dGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5n
OgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitz
dHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3Jh
Z2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGlu
c3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5Lgor
cHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVy
Zmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGlu
ZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0K
KyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJycGV0X2Nh
c3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFk
ZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8v
IFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5n
dGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgp
IHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAg
ICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIo
KS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJm
bHk6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29w
eUhlYWRlckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1f
c3BhcnNlTWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3Ro
ZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251
bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1f
aW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAg
ICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb247CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2Rl
KCk7CisgICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOwor
ICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0
b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVp
bnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxp
emF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247Cisj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYK
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgaW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mTGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9y
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAg
IHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAg
ICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiQXJyYXlT
dG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUHJvcGVydHlPZmZzZXQuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFz
cyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2
YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgor
ICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGVtcHR5U2luZ2xldG9uKCkgeyByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6OmVtcHR5U2luZ2xldG9uKCktPmJ1dHRlcmZseSgpOyB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJv
bUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+
KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVy
dHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyBy
ZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
TGVuZ3RoKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxp
emVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMg
QnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0ds
b2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc3RhdGljIEJ1dHRlcmZs
eSogY3JlYXRlRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVh
dGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkp
OworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIElu
ZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5
U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9
CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJl
dHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBp
bmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVy
Zm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKKyAgICAv
LyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3Vy
cmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0
aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9j
YXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhz
IHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZworICAgIC8vIGRpcmVjdGx5IGlu
dG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5
U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0
eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlS
aWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5
IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlS
aWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xv
YmFsRGF0YSYsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFj
aXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZs
eSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1i
ZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSwgJnRlbXApKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBm
cm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBwcm9wZXJ0eUNhcGFj
aXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgKnJlc3VsdC0+aW5kZXhpbmdI
ZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRh
LCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBj
b25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKHNsb3RWaXNpdG9yLCAwLCBwcm9wZXJ0
eUNhcGFjaXR5LCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRl
cmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9w
ZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJl
c3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBiYXNlKG9sZFBy
b3BlcnR5Q2FwYWNpdHkpLCB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNp
dHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVy
dHlTdG9yYWdlKGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVj
dHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1By
b3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dB
cnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKHN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVj
dHVyZSkpOworICAgIHZvaWQqIGJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAg
JmJhc2UsCisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3Bl
cnR5Q2FwYWNpdHksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBpbmRleGlu
Z0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xk
UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRp
YWxpemVkKGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KHJlc3VsdC0+YmFzZShwcm9w
ZXJ0eUNhcGFjaXR5KSwgYmFzZShwcm9wZXJ0eUNhcGFjaXR5KSwgdG90YWxTaXplKDAsIHByb3Bl
cnR5Q2FwYWNpdHksIHN0ZDo6bWluKG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiByZXNpemVB
cnJheShnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGluZGV4aW5nSGVhZGVyKCktPmluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7
CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNp
dHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkg
YmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdo
aWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVl
ZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisgICAgLy8gbW92aW5n
IGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91
Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBj
YWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8K
KyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3Vt
ZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAvLyB3ZSByZWx5IG9u
IHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFy
Z3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBj
b3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KKyAg
ICBtZW1tb3ZlKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2Fw
YWNpdHksCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHks
CisgICAgICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAg
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVt
YmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sK
KyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgor
ICAgIG1lbW1vdmUocHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVy
T2ZTbG90cywKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0
eSwKKyAgICAgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5
LCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAg
ICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51
bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2
ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Q
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVz
RnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQg
KCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rp
b25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVy
dHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVy
IHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5
TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNs
YXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gK
KyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgi
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBC
dXR0ZXJmbHk7CitjbGFzcyBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsK
K3B1YmxpYzoKKyAgICAvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3Ro
IHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisgICAgLy8g
dGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3Qg
bWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDA7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwg
bV9hdXhXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fbGVuZ3RoKTsgfQorICAgIAor
ICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhpbmdIZWFkZXIgaXMgYWxsIHpl
cm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9mIHRoaXMgY2xhc3MgYW5kIHNo
b3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVwZW5kCisgICAgLy8gb24gaXQu
CisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4V29yZCgwKQorICAgICAgICAs
IG1fbGVuZ3RoKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgoaW50MzJf
dCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgp
OworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3Qg
YXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50
MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMg
SW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAx
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3Jh
Z2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAg
IAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAg
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNh
bm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAg
ICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICB1aW50MzJf
dCBtX2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUg
YXJyYXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aEFuZFR5cGU7IC8vIFRoZSBsZW5ndGgg
b2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRzIHR5cGUuCit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2lu
Y2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3Jh
Z2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgp
LT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJ
S0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihh
cnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2RlZmluZSBJbmRleGluZ1R5cGVf
aAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKKwor
Ly8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KK3N0YXRp
YyBjb25zdCBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEhhc0Fy
cmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNr
aW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQorLy8gbWFza2Vk
IG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KK3N0YXRpYyBjb25zdCBIYWRB
cnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQg
aGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBMaXN0IG9mIGFjY2VwdGFibGUg
YXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0gMDsK
K3N0YXRpYyBjb25zdCBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7
CitzdGF0aWMgY29uc3QgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRp
YyBjb25zdCBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9y
YWdlOworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBBbGxB
cnJheVR5cGVzICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlw
ZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEFsbEFycmF5VHlwZXNBbmRI
aXN0b3J5ICA9IDMxOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5n
VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmNwcAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBA
IGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3Qp
OwogCkBAIC0xNDYsOCArMTQ2LDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5
TmFtZXMoSgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAg
dGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1l
cwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1w
bGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAx
MjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Owog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQ
cm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJl
ZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgot
Ly8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVu
dHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3
aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNp
Z25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJS
QVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0
aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBh
cmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhl
IEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVt
ZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAot
Ly8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3
aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3Bh
cnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dp
bmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8v
ICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwg
cHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxs
IGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhl
IHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0
aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdo
ZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVu
dHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVD
VE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBi
ZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlv
biBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5p
dGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6
ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBp
cyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlT
dG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRv
IGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElD
IGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4u
Ci0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZG
RkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3Vn
aCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQot
Ci0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2
ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBj
cmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkK
LSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8g
dGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVs
ZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBP
dXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFy
c2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0
aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IK
LS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwg
d2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVy
ID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNO
b25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkp
fTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRl
ciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZv
ciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRo
aXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZp
bmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQot
CiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9u
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTEx
Nyw0MTkgKzU0LDE1IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQot
aW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlw
ZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVO
OwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxW
ZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0
b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19j
YXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7
Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRp
ZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlG
aW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3Ig
bGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYg
KGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExl
bmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUg
PSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3Jh
Z2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0
aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAg
ICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAg
ICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9s
ZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rv
ckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVu
Z3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMg
ZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3Qu
Ci12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0
LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNp
Z25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0
aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFj
aXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAg
ICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1f
cmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5Owot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZh
bHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBo
YXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYm
ICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRv
cik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7
Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAg
IGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJy
YXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNz
b3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0
ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+
c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRo
cm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxE
YXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRl
ciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkm
IGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2Vw
YXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4K
LSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHks
IGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhl
IHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1v
dmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRU
aHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5v
dCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAg
IGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNs
b3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAg
IEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigp
KSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRl
cigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsK
LX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFz
ZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVu
dHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAg
aWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdl
dHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVy
LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1
cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVt
cHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9u
U3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1
cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12
b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
LXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAg
Z2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQg
SlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFs
dWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50
ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0
ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsK
LSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0
aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdp
bGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sg
d2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBu
byBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAt
PmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3Rv
cmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9y
YWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVt
Y3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdl
OwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZv
aWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50
cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAg
ICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52
YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5B
Y2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0g
ICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRl
ciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERl
c2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwot
ICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0
ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNj
cmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGRE
ZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNz
b3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAg
ICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIp
OwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihl
eGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVz
Y3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0
dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNj
cmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6
ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsK
LSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9k
ZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJv
cGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVz
c2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0
aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHBy
b3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUg
ZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVP
d25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0
byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmli
dXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJU
KG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
dGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5
IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFw
LT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAm
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0
aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0g
ICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2Us
IHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRl
bnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0
Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3Qg
ZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmlj
RGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4g
Y3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0
IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0Nv
bmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBi
eSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJz
ZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3Bl
cnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBE
ZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFu
IG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdo
b3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1d
IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0
aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0
cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0
byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAg
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAt
PmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAg
ZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMs
IGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49
IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0g
aW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1
cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0
dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBh
bmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMg
dGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRo
ZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3Vy
cmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3Iu
aXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkp
IHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJl
c2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmln
dXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAg
Ly8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHBy
ZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBh
cmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBv
ZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dl
bmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9u
IGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkp
IHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQg
SXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAg
ICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZp
Z3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1
cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20g
Zm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJ
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJv
cGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJv
cGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1
ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmln
dXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBv
ZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRl
ZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9w
ZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBk
YXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVl
cyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0Vu
dW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9m
IHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAg
ICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0
YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGgg
dHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50
LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwot
ICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVq
ZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZh
bHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAg
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2Ny
aXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZh
bHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVu
dC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAg
ICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vz
c29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1
cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3Qs
IGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERl
c2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBj
dXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1
bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVq
ZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1
ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkg
IT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2Yg
YW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhh
dCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2Yg
dGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVs
ZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJl
bnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9p
ZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFi
bGUpCiB7CiAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAg
IGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFw
KTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2LDcg
QEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1
cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRv
ciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93
RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwot
Ci0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhf
QVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhp
c09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90
Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSksIHNsb3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRp
b24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpAQCAtNjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCkBAIC02ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVk
IGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rv
ckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7
Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+Zmlu
ZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNP
YmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0g
ICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5l
d0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9p
ZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQg
SlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgot
ICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBk
YXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAg
IGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAg
ICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVl
U2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2Vl
IEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAg
aWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVl
LCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIg
Y2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0
LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJv
dyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJy
YXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJl
IGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rv
ci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAg
Ly8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNw
YXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJy
YXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBt
b2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNp
YmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5Lgot
ICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJs
ZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZl
Y3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFs
RGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9y
YWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRo
ZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQo
ZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAg
ICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFi
bGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxl
KCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwot
ICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBh
cmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRv
IGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBt
YXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9y
IGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5z
cGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJ
bkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5n
dGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFm
dGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAg
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFw
IGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2
YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2
YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQg
YmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVj
dG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBN
QVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAg
ICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEg
c3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBh
cnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5
IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVu
c2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nhcnku
Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNp
YmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUg
dmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9i
YWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0
b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8g
dGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2Fu
J3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNl
IG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmds
b2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJl
dHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwot
ICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0g
ICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3Jp
dGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxl
bmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9
Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3
ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRv
IHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJl
IHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFs
dWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsK
LSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVu
Z3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywg
dGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2Ug
YWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0g
ICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBt
YXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFw
KCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAo
IXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
IHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVl
OwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTI4LDM1ICsyMTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0Fy
cmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0
LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZh
bHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAt
LXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlm
IChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNv
bnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQqPihhKTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlz
Rm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0K
IAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQ
cm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAg
ICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQg
YSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFu
cyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmpl
Y3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwot
ICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5t
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAg
ICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAg
ICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVu
dW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
dC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAg
IH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2ly
ZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBp
bmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3Jh
Z2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5p
dExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBl
bHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChk
ZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0
aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGgg
PSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAg
aW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAg
ICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAg
ICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAx
KSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExl
bmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVh
c2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNl
ZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6
aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFu
IGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUg
YW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBD
YWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBt
b3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxl
bmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25l
ZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAg
IC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBh
IHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0g
ICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0
b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2Ug
PSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4o
bmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFn
ZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1f
dmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBw
cmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkg
bGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAx
LCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBD
YWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1j
YXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5n
dGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFn
ZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZl
ciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JM
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rv
ckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4Qmlh
czsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihy
ZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBt
X2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3Vy
cmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9y
YWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBh
bGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0
IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsK
LSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBw
YXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0
eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWdu
ZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3Vs
ZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+
IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIg
NCBrZXkgbWV0cmljczoKQEAgLTEwOTMsOCArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMg
dGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0
eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2Ug
dG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGgu
CiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25l
ZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNT
RVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAg
Ly8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBv
dmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVk
VmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1
aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBU
aGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2Vl
ZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50
Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3Jh
Z2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxj
dWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFu
Z2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2Fw
YWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xF
TiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8v
IFdlJ3JlIGVpdGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9y
YWdlLCBvciB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lk
KiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAg
ICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAo
YnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KLSAgICBpZiAoY3Vy
cmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
Y3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxs
b2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IGN1cnJlbnRDYXBhY2l0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwg
Jm5ld0FsbG9jQmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6
CiAgICAgLy8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAK
ICAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1c2UgYXMgcHJlLWNh
cGFjaXR5LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0
MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIC8v
IElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhl
IHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KICAgICAgICAgQVNTRVJUKG5ld0FsbG9j
QmFzZSAhPSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxl
bmd0aCAtIGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JM
ZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25l
ZCBkZXNpcmVkSW5kZXhCaWFzOwogCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rv
ckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBh
Y2l0eSAtIG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICAvLyBTdGVwIDM6CisgICAgLy8g
V2UncmUgZWl0aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3Jh
Z2UsIG9yIHdlJ3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KKworICAgIHZvaWQq
IG5ld0FsbG9jQmFzZSA9IDA7CisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAg
IC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChi
dXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgorICAgIGlmIChjdXJy
ZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3Rvcihj
dXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAvLyBGSVhN
RSBkbyB0aGluZ3MKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3Jh
Z2UtPm1faW5kZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgbmV3U3RvcmFnZUNh
cGFjaXR5ID0gY3VycmVudENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3
U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICB9IGVsc2UgeworICAg
ICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rv
ckxlbmd0aDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KEJ1dHRlcmZseTo6dG90YWxTaXplKGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHks
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVjdG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jh
c2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNp
dHkgPSBkZXNpcmVkQ2FwYWNpdHk7CisgICAgfQorCisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmZyb21CYXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChkZXNpcmVkVmVjdG9y
TGVuZ3RoKTsKKyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7
CiAKICAgICAvLyBTdGVwIDQ6CiAgICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8g
dGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBh
bGxvY2F0aW9uLgogCiAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4
aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQogICAg
IC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhp
cyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3Jh
Z2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdl
LCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRv
IGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1f
YWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUg
bV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jh
c2U7Ci0gICAgfQorICAgIG1lbW1vdmUobmV3U3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3Rv
cmFnZS0+bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rv
ckxlbmd0aCk7CisgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBv
dXRPZkxpbmVTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6
ZSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG91dE9mTGluZVNpemUgKyBzaXplb2YoSW5kZXhp
bmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKIAogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMTE2MiwxMyArMzI0LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVy
IHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFT
U0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJU
KGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAg
ICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFw
LT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAt
MTIyMCw3ICszODIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsK
KyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM5MSw1NiBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3Ro
V3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7
CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFi
bGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBp
ZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAgaWYgKHZh
bHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAgICAgICAg
ICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0g
MTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0
b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAg
IC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNs
ZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4K
LSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2Fs
bCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4
IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGlu
ZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIExl
dCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9
IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBDYWxsIHRoZSBbW0Rl
bGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUu
CisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkg
eworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJn
dW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMs
IGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAg
c2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2gg
JiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5j
ZXMuCkBAIC0xMjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRl
KiBleGVjKQogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAg
ICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5n
dGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZh
bHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1
c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5W
ZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAg
ICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
dmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJv
cGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0
b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRy
dWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4x
IHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3Ro
KCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIC8vIFB1c2hpbmcg
dG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhy
b3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09
IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMs
IGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBF
UzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQotCi0gICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCiBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4g
MCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSgpOwogICAgIAotICAgIHVu
c2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250
YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8g
dXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KQEAgLTEzMTgsMTgg
KzUwNiwxOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
LT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3Vu
dCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7
CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0b3JMZW5n
dGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxlbmd0aCAt
PSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBzdG9yYWdl
LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIGlmICht
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdl
LCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KKyAgICAgICAgaWYgKHZl
Y3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hp
ZnQoc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBtX2lu
ZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMzksNTkgKzUyNywyOSBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAK
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291
bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRh
aW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1
c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5n
dGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAg
ICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+
aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4
QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAg
Y2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAt
IGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUo
bmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9y
YWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2Up
OwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9p
bmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQo
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFn
ZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0
aChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNo
aWZ0Q291bnRTbG93Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9y
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0
b3JbaV0uY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VS
VChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNO
b25GaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAg
IGlmICh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEo
IlsldV06ICIsIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9y
YWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3Rv
cmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0g
ICAgICAgIGlmIChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlKSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsg
c2l6ZW9mKEpTVmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAg
dGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAg
ICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmpl
Y3QtPm1fc3BhcnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9y
KTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEs
IGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNW
YWx1ZSo+KGEpLT5hc051bWJlcigpOwpAQCAtMTQxMCwxMTAgKzU2OCwxMzUgQEAgdm9pZCBKU0Fy
cmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEFTU0VSVCghaW5TcGFyc2VN
b2RlKCkpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAg
dW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmco
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBz
aXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFs
c2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0
Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAgICAg
aWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYg
KCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxs
VmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51
bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21w
YXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdl
CisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNp
bmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20g
c3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFz
b3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQotCi0gICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChl
eGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3Ig
bnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBt
ZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJp
bGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBm
cm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFz
b3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERh
dGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZl
cnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3
ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhp
cyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBj
b21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBi
dWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9i
amVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJh
bmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNv
bXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFp
cj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMu
YmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0
VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0
cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxs
IHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3Ry
aW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5z
ZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOwotCi0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRl
bXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRo
bSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVy
Ci0gICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5zdG9yYWdlKCk7CisgICAgICAgIGlm
IChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8g
c3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBz
b3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1w
cm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJl
cXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhp
cyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0
b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndp
c2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24g
aW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4g
dmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVz
LmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAg
Ym9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ld
LmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51
ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAg
ICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7
IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9V
U3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxn
b3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSBy
YXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1F
UkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCks
IHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQ
YWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVu
Y3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3Jp
cHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBi
cm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCks
IHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQ
YWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rp
b24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2Ny
aXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwg
YnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVn
aW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAot
ICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBv
ZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3Jh
Z2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1f
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJz
dCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
LSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0
aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4K
KyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlm
IChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwor
ICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7
CkBAIC0xNTk2LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJh
eUNvbXBhcmUgCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNv
bXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0
YSkKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4g
dGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11
bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1
cCB0byBubyBnb29kCi0gICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFT
U0VSVChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
bV9zdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVD
b3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFs
dWVNYXAtPnNpemUoKSA6IDApOwotCi0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0
cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2V4ZWMgPSBleGVjOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1
bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFy
ZUNhbGxUeXBlID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2Fs
bERhdGEgPSAmY2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5v
ZGVDb3VudCk7Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhl
YywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAo
IXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwg
dGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0
IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAg
IHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7
Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVl
cywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMg
aW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVt
RGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAg
ICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAg
ICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1h
eGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFy
bHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQu
CisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFn
ZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JM
ZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6
ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JB
cnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRl
bXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAg
CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywg
anNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rp
b24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9k
aWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVp
bGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmlu
ZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAg
ICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMs
IGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGlu
dG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZp
bmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsK
KyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAg
ICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Cisg
ICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAg
ICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51
bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9
IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9y
TGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFs
bG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAg
ICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1Vz
ZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAg
ICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6
ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0
aCkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxs
b2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAg
ICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5l
d1VzZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
OworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAg
ICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
W251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAg
ICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5l
ZDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNp
emUoKSA+PSBudW1EZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUg
Y29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9s
bG93aW5nIG1pZ2h0IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVj
dGx5LgorICAgICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0
b3JhZ2UuCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUs
IDQ0Pjo6SXRlcmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUp
OworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7
CiAgICAgICAgIH0KLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHpl
cm9lZCBvdXQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
ICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVk
KTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBs
ZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5
aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFj
ayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRy
ZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAg
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAg
ICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1
bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkK
LSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5n
dGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVu
Z3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsK
LSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAo
OyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWdu
ZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpA
QCAtMTc0NSwxMDMgKzk2Myw3MSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGlu
ZyhKU0dsCiAgICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBt
aW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIG51
bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3Ig
KDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAg
ICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAg
ICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0
aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytu
dW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytd
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQot
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwot
Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7
Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJl
dHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9p
ZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFz
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdl
KTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJU
KCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAg
IGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAg
IHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdh
cyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1E
ZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRW
ZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91
Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCisgICAgICAgICAgICAgICAgLy8g
ZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisgICAgICAgICAgICAgICAgaWYgKChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdy
aXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JM
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5l
ZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVm
aW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9y
YWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFw
LT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0g
bV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9J
TkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAo
dHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jh
c2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCi0j
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNp
Zm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252
ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogCiAjZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZIDAKQEAgLTMw
LDEzMSArMzIsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRy
eSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRl
QmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0
dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5
KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAg
ICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBn
ZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2
NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7
Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAg
ICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwK
LSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkK
LSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAg
IGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdz
ICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1Jl
YWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJ
c1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVz
ZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVu
c2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFk
ZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJU
IHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAg
ICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFw
LgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0g
ICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQot
ICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNv
bnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlv
bi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5i
ZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAg
IEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAg
fTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2Yg
YW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nl
c3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2Uo
KSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8g
bm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0
IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRo
ZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8v
ICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0
cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJs
ZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNl
IGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2Vz
IGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJf
dCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXph
dGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsK
LSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBK
U0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
SlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAg
ICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlKDApCi0g
ICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhwbGljaXQgSlNBcnJh
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJy
YXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2Vs
bCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlz
IHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjUgKzU5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAv
LyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0g
ICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAg
ICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9k
IGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUg
YW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0
SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
Y2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0
byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNo
QXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29s
IHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0xOTksOTkgKzc3LDI5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3Vu
dCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwg
bV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1Zh
bHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChj
YW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQg
aSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2Ug
KnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAg
ICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4
IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFs
aXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0
IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAv
LyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVy
IG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNT
RVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5l
IHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55
IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJl
ciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0g
ICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVy
biBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0
aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3Jh
Z2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0ds
b2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7
CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICAgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKICAg
ICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAg
ICAgfQogCkBAIC0zMDEsNDAgKzEwOSw1MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdm9pZCBkZWFsbG9j
YXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKIAotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9v
bCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAg
ICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEm
KTsKLQotICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVu
Y3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNr
IH07Ci0gICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9
IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVu
Z3RoOyAvLyBUaGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1f
aW5kZXhCaWFzOyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBB
cnJheVN0b3JhZ2UuCi0gICAgICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwotCi0gICAgICAg
IC8vIEZJWE1FOiBNYXliZSBTcGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBp
dHMgb3duIEpTQ2VsbD8KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1
ZU1hcDsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0g
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQogICAgIH07CiAKICAgICBpbmxpbmUg
SlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBK
U0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2Jh
bERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYXJy
YXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICAgICAgZ2xv
YmFsRGF0YSwgMCwgMCwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCks
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXAp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
QnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1
ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNB
cnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1MywzMCArMTcxLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2Vs
bC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlz
SlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXND
ZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlv
biBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQg
c3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxv
dy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11
c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4K
LSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
KDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVz
ZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkg
d2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywg
c2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VT
aXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JM
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFz
IGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZs
b3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2Vy
IG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxl
LCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMg
Y29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihB
cnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0g
ICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1
Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0
IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2
b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogVVN0cmluZyBKU0NlbGw6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTI2NzIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQotCisgICAgICAgIAogI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0
dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBA
IC0xNjAsNiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIER1bW15IGltcGxl
bWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMg
dG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1
bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5
cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0
YXRpYyBVU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgICAgICBzdGF0aWMg
Ym9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUg
cHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3
LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9u
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOSw3ICszMjksNyBAQCB2
b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0gICAgQmFz
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURv
bnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhl
IGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKKy8vIGFzIGEgc2lt
cGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJv
bSBzaXplIDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1Rf
VkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXpl
ID0gMDsKKwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQogewog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKCk7CkBAIC04NiwyOSAr
OTEsNzEgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0K
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2Uo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBzaXplX3Qgc3Rv
cmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VT
aXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAg
ICBBU1NFUlQoYnV0dGVyZmx5ICE9IEJ1dHRlcmZseTo6ZW1wdHlTaW5nbGV0b24oKSk7CiAgICAg
QVNTRVJUKHN0b3JhZ2VTaXplKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNp
emVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2Ug
LSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5P
dGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFn
ZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0
eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsg
MTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIEluZGV4
aW5nSGVhZGVyJiBoZWFkZXIgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAgIAor
ICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IGhlYWRlci5wcmVDYXBhY2l0eShzdHJ1Y3R1
cmUpOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGhlYWRlci5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIHNpemVfdCBjYXBhY2l0eUlu
Qnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAodmlzaXRv
ci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSgKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykp
IHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZUR1
cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgLy8g
TWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1
cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPnByb3BlcnR5U3RvcmFnZSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAg
ICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGlu
ZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAg
IH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNp
emUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgbmV3U3Rv
cmFnZS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tKCpzdG9yYWdlLT5hcnJheVN0b3Jh
Z2UoKSk7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQg
PSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlLT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3I7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld1N0b3JhZ2Ut
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKykt
PnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG5ld1N0b3JhZ2UtPm1fc3BhcnNlTWFw
KQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9y
YWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayB0aGUgYXJy
YXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIHN0b3JhZ2UtPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgbWFwLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTEyMiw5ICsxNjksOSBAQCB2
b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxs
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9y
YWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0
b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9y
LCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3du
Tm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0
LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0Miw5ICsxODksOSBA
QCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlND
ZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlT
dG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYg
KHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNp
dG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktu
b3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0
LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9y
YWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5h
bE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0
b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsyMDgsNDggQEAgVVN0cmluZyBKU09i
amVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7
CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcgb3Vy
IGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwgZm9y
IGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28gb3Zl
cnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVy
biB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAg
ICAKKyAgICBpZiAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgICAgIGlmIChpdCAhPSBt
YXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xv
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwogfQogCiAvLyBFQ01BIDguNi4yLjIKQEAgLTE3NCw2
ICsyNTksMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpo
ZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgLy8gVHJ5IGluZGV4
ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwor
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0
dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KICAgICBKU1ZhbHVlIHByb3Rv
dHlwZTsKQEAgLTIzNSw5ICszMjcsMTQyIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAg
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICB0aGlzT2Jq
ZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBpZiAoVU5MSUtFTFko
aSA+PSBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNo
b3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAg
ICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5n
dGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAg
ICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB0aGlz
T2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworfQorCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlT
dG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIG1fdmVjdG9yTGVuZ3Ro
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7
CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAg
ICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBu
byBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMg
YXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQor
ICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9zdG9yYWdlLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgMCk7
CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9i
dXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5tX2luZGV4QmlhcyA9
IDA7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgCisgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7Cisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlF
eGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7
CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7
CisgICAgQVNTRVJUKG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7Cisg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBB
cnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
QVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVu
Z3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRW
ZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsK
KyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJl
c3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAg
IGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCk7CisgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFs
RGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworICAgICAgICByZXR1cm4gc3Rv
cmFnZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0zMDQsNiArNTI5LDEw
IEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXgKIGJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5zdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25z
Rm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1NjEsNDUgQEAgYm9vbCBKU09iamVjdDo6aGFz
T3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgCisgICAgaWYg
KGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheToKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAg
ICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXQt
PnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFs
dWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzI5LDUxIEBAIHZvaWQgSlNPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQg
bnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVk
IGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0
aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBp
bmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNo
LAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0
dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT50eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNh
c2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtl
eXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0p
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAg
ICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3Bl
cnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBv
YmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzgyNCw3IEBA
IHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVj
dDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlm
IChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFy
eU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGds
b2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg4MSwxMSBAQCBib29sIEpTT2JqZWN0
OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVS
X0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJ
TkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNs
b3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1
bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAg
ICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0
T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0
aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwg
b2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdl
dHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTExLDUyMiBAQCBTdHJ1Y3R1
cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklE
OwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQor
dm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAg
ICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNj
cmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVy
T2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9y
LnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRl
ck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0
ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vz
c29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAo
c2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVh
ZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0
aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCi0gICAgLy8g
d2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCisgICAgQVNTRVJUKGRl
c2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1
dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRv
cik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAg
IEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGlu
Z01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFy
IHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxs
IHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRo
ZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHBy
b3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUg
ZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVP
d25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0
byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmli
dXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NF
UlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVy
dHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
YXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9
ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJl
IHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4K
KyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxz
ZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4
dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAg
ICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1
bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5v
dCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVy
aWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhl
biBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmpl
Y3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtb
Q29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVk
IGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBh
YnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJv
cGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2Us
IERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUg
YW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8g
d2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxl
XV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElm
IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBh
dHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0
IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisg
ICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+
c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1h
cC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAg
ICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlw
dG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1f
bGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAg
Ly8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4g
Y3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUg
dmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVk
IHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRl
c2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmln
dXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBh
bmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KKyAgICAgICAg
aWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUo
KSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0
dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICB9CisKKyAgICAvLyA4
LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2
YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0
aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCisgICAgICAgICAg
ICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBt
ZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAg
Ly8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVy
dCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKKyAgICAgICAgICAgIC8v
IGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlz
dGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzCisgICAgICAgICAgICAvLyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bworICAgICAgICAgICAgLy8gdGhl
aXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhl
IHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0
byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3Rpbmcg
dmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBb
W0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0
IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisg
ICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0Rh
dGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3Ro
IHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1d
IGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJl
amVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVW
YWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNj
cmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2
YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJl
bnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKKyAgICAgICAg
ICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nl
c3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0
LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShE
ZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0g
Y3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4g
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJl
amVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigp
ICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9m
IGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRo
YXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9m
IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmll
bGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRv
ciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICB0
aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworfQor
CitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVz
dWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywg
ZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmpl
Y3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAg
QVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5
U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZl
IHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29k
IG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lk
KiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdT
aXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8v
IEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFy
c2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5
IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9k
ZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJs
ZSgpKTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEs
IG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5l
Y2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQg
aXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBn
cm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVu
Z3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVy
ZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBz
dG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRv
LCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUg
YSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFy
c2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3Rv
cmFnZTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAg
ICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRh
YmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsK
KyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2Ug
YXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0
byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2Ug
bWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBv
ciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVz
SW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVu
Z3RoKSkgeworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBh
ZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisg
ICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20g
dGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2
ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07
CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwor
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8g
aSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1
cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFy
cmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewor
ICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDAp
IHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkg
KyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93
LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5
IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJU
KGkgPj0gbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7
CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3BhcnNlTWFw
OworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkg
aGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJ
ZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGlj
dGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQo
aXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVj
ZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBp
cyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdy
b3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJl
YWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0
b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9j
YXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+
cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgfQorCisg
ICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8g
UHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAg
ICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBv
biBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3RoID0gaSAr
IDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8v
IFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdh
bnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3Bh
cnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJz
ZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5
ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmICht
YXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZh
bHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCks
IGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNy
ZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
dW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBp
bnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1h
cCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYg
KCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAg
ICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7Cisg
ICAgICAgICAgICBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwg
Z2V0TmV3VmVjdG9yTGVuZ3RoKDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdF
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdW
ZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0
aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJ
bml0TGVuZ3RoID0gbWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAgaWYgKGRlc2ly
ZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJ
bml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVh
c2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAg
IGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBv
cjoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5n
dGggKiAxLjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5h
bCBvdmVyZmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChk
ZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBB
U1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5
U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKworICAgIHJl
dHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30K
KworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChn
ZXRBcnJheUxlbmd0aCgpLCBkZXNpZ25lZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6Omlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3
TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBp
bnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFu
eSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2Fs
bGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9y
ZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5t
X2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNp
Z25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKKwor
ICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNl
cyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkgewor
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5n
cm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5
OworICAgICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0
IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5v
dCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWlu
KGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVu
Z3RoKTsKKyAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9v
bSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2Jh
bERhdGEsCisgICAgICAgIGluZGV4Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRl
eEJpYXMsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAo
IW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fYnV0dGVy
Zmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOwor
fQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAodHlwZSA9PSBT
b3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1h
cCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAodHlw
ZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICB2YWx1ZS5p
c1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxv
Y2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9y
YWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFw
LT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtl
bHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKworQnV0dGVyZmx5KiBK
U09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPiBv
bGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3Qg
cmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQorICAgIC8vIGNhcGFjaXR5LCBz
aW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNl
LgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKQEAgLTYzMCwxMCArMTQzNCw0NiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CiAgICAgSlNDZWxs
KiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNl
bGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3Qt
PmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1
ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1
ZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRl
c2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJv
b2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAg
LTcwNCwyNiArMTU0NCwyNiBAQCBwcml2YXRlOgogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxE
YXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRo
cm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2Un
cmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0
eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJl
cGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBo
b3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCiAgICAgLy8g
RG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNl
IHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3Bl
IHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3
ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3Vy
cmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgeworICAgIGlmICgh
bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHBy
ZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikK
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
QXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVu
c2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgICAgICBvbGREZXNjcmlwdG9y
LnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVj
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygp
LCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkp
CkBAIC03NDksOCArMTU4OSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhl
IGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5p
c0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNF
cXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJl
bnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhl
YywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMs
IHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjAyLDggQEAgYm9vbCBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFu
aXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBw
dXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7Cisg
ICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSBh
bmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQpAQCAtNzg0LDggKzE2MjQsOCBA
QCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlw
dG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENo
YW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJv
cGVydHkKQEAgLTgwMiw3ICsxNjQyLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQot
ICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0
ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjUyLDM3IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBp
ZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0
ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikK
K3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBw
cm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAg
ICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZh
dWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBw
YXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJl
amVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9s
ZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCAr
IDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExl
bkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1
cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmpl
Y3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhy
b3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25O
b25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNs
dWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUJhcnJpZXIuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJKU1N0
cmluZy5oIgpAQCAtNzksNiArNzgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFjY2Vz
c29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyL3NldHRlcgogICAgIH07
CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9u
ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChS
ZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0
SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKERvbnRFbnVtIDwgRmlyc3RJ
bnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09N
UElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBGdW5jdGlvbl9p
c19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChBY2Nl
c3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFjY2Vzc29yX2lzX2JlbG93X0ZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNGaW5hbE9iamVjdDsKIAogICAgIGNsYXNz
IEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05Niw2ICsxMDIsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7
CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAsOCArMTI4LDE3NSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoK
KyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAg
ICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gVGhpcyBtZXRo
b2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJs
ZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBwdXREaXJl
Y3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNl
dEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBK
U1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAg
aWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0
aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwor
ICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVz
SW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sg
d2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9w
ZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xl
bmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFz
IHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5n
dGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBw
cm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgbV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZWZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNl
TW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3Rp
dmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAg
IC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMy
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUg
cHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBK
U1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBO
b1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM3OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBj
b25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2Uu
Z2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJl
dHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkg
eyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDA2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVT
dG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAg
ICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlw
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyAr
NDQ4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1Jl
aWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9
CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBl
eGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFBy
b3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1
dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG5ld1Np
emUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkq
LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBh
Y2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAg
ICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lk
IGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAg
ICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ2NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGws
IG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVy
Zmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7
CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzQ5OSw2NCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2Jq
ZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2Vs
eSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldElu
aGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdl
KFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAg
ICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBz
aXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0
aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQorICAgICAgICAv
LyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25z
IG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3QgaXMgaW4gYSBtb2RlIHdo
ZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3Rv
cmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQorICAgICAgICAv
LyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZl
IHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUg
YXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAgICAgLy8gYWxyZWFkeS4K
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0
YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGNy
ZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFBy
b3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM2LDE3ICs1NjksNDUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAgICAgICAgdm9pZCBpc1N0cmluZygpOwog
ICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3Jh
Z2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgICAgIGJvb2wg
cHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgICAgICBib29s
IGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRp
b24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKIAogICAgICAgICBjb25z
dCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFs
RGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3Bh
cnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYg
b2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwg
dW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVk
IGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25l
ZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIGJv
b2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3Ro
KTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVu
Y3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNr
IH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHZvaWQgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lD
aGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShD
b25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOworI2VuZGlmCisg
ICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xv
dFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAg
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAg
ICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1f
cGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjMzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25G
aW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAg
IGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAg
OiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewog
ICAgICAgICB9CiAKQEAgLTQ5MSwxOCArNzUyLDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojpp
c0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlw
ZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0
T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBz
dG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRC
dXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFn
ZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCog
Y29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKQEAgLTU0MCw5ICs3OTUsOSBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUg
dmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5l
IEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0K
IApAQCAtNTkwLDE1ICs4NDUsMTYgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNP
YmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSkpIHsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBm
aWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgIGZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9u
KGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGdldERpcmVjdE9m
ZnNldChvZmZzZXQpLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5l
IGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBA
IC02ODQsNiArOTQwLDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFs
KAogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkg
PT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NF
UlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwog
CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50QXR0cmlidXRlczsKQEAgLTcxMiwxMSArOTY5LDExIEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAg
IG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRP
ZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwog
ICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24p
OwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0
cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZs
eSwgc3RydWN0dXJlKCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKQEAgLTczMCwx
MyArOTg3LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1
bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0g
b3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGlu
ZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAgICAg
c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAgICAg
ICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAv
LyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVl
cyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNs
b3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KQEAgLTgwMyw5ICsxMDYwLDkgQEAgaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3Jh
Z2UoCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgK
ICAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9y
YWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0
ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC04MzksMTEgKzEwOTYsMTEgQEAgaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNPYmpl
Y3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1
dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9m
TGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5
OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0g
ICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091
dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRD
YWxsYWJsZU9iamVjdCh2YWx1ZSkpOwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRh
LCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFs
RGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKQEAgLTk0MywxMyArMTIwMCwxMyBAQCBpbmxpbmUg
c2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5l
T2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zm
c2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlBy
b3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQp
KQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6
aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4g
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzEyMTQsNyBA
QCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9m
ZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNP
dXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2
aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
SlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkKICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQogICAgIAot
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNT
eW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAx
MjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
OwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiAg
ICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZz
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU9mZnNldC5oCShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAg
aW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZhbGlkYXRl
T2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwot
ICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGlu
ZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQg
LSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6ZV90IG9mZnNldElu
UmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUHJv
cGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKworI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2NzIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7
Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAx
MjY3MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VB
cnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93
bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFy
c2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNv
bnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFs
dWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
K307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVt
IEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisg
ICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0
OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
CisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19j
YXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5n
dGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNS
ZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsK
KyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNS
ZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3Qo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRv
ciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlz
IHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0
KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBt
YXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAg
IC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgor
ICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVk
Q2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFy
cmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
Ki8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZh
bHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJh
eSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21h
cC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsK
KyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNp
dHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBh
Y2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmlu
ZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJ
biB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUg
YXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRo
aW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0
Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1
ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dl
dHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNj
ZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhl
Yywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5l
IGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBz
YXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3Bh
cnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcg
cHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBp
cyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAg
ICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0
aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMg
PSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQ
cm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6Omdl
dCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRl
clNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1
ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3Qo
Z2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFy
c2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0
Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0
KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihy
ZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7
CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5
LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50
cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7
CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZh
bHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJh
dG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25k
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5l
IFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdl
QmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsK
LSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERh
dGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJv
cGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChz
dG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERh
dGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAg
IG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0
b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3Iq
KCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQo
KSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4g
IW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9y
YWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI2NzIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0
OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0
cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90
eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmd0eXBlKGluZGV4aW5nVHlwZSkKICAg
ICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVC
YXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xv
YmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpA
QCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsg
IlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6
IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBl
LCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAs
IG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0lu
Zm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRX
YXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHBy
ZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEs
IHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHBy
ZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5p
dGlhbGl6ZWRXYXRjaGluZykKQEAgLTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5zaXRpb24gdHJh
bnNpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5z
aXRpb24pOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb24pOwor
ICAgIAorICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSB7CisgICAgICAgIEFTU0VSVChl
eGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcyk7
CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFu
c2l0aW9uOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblBy
ZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGlu
ZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsK
KyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFs
RGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1
dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6
OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjY3MjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZv
LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOwor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0lu
Zm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24p
OwogCiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wg
aXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0K
ICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmpl
Y3QoKTsgfQogCisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
aW5nVHlwZTsgfQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVj
dCk7IH0KQEAgLTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdU
eXBlT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBA
IC0zNjMsNyArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwg
SW5kZXhpbmdUeXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAg
ICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00
MTYsNiArNDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJ
bmZvIG1fdHlwZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAg
ICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3
ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRl
clByb3BlcnRpZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRl
clByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVt
ZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJl
dmlvdXMgOiA3OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7
CiAgICAgICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAg
ICAgICAgdW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVk
IG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUp
OwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVh
cCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUlu
Zm8sIGNsYXNzSW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8s
IGluZGV4aW5nVHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpAQCAtNjAyLDkgKzYxMiwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIGlubGluZSBKU0NlbGw6OkpTQ2VsbChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICAgICAgOiBtX2NsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKQogICAgICAgICAsIG1f
c3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2J1dHRl
cmZseShidXR0ZXJmbHkpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJl
dmlzaW9uIDEyNjcyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xh
c3MgU3RydWN0dXJlOwogCit1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2
OyAvLyBVc2UgZm9yIHRyYW5zaXRpb25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3Bl
cnR5IGFkZGl0aW9ucy4KKworLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGlj
YXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2Yg
dGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAw
LgorZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdl
Cit9OworCit1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCit7CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRl
OworfQorCitJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBl
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5z
aXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
b2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFz
cyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBV
c2luZ1NpbmdsZVNsb3RGbGFnID0gMTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160894</attachid>
            <date>2012-08-27 21:40:54 -0700</date>
            <delta_ts>2012-08-28 11:06:26 -0700</delta_ts>
            <desc>it&apos;s starting to sort of compile</desc>
            <filename>butterflies_patch_21.diff</filename>
            <type>text/plain</type>
            <size>310997</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5NCBA
QAorMjAxMi0wOC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJh
eVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmFycmF5TW9kZUZyb21T
dHJ1Y3R1cmUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAo
SlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVRv
U3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVJc0pTQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6Omlz
SW5Cb3VuZHNBY2Nlc3MpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVTdXBwb3J0c0xlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
aGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9wbmFtZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNEZW5zZUVub3VnaEZvclZlY3Rv
cik6CisgICAgICAgIChKU0M6OmluZGV4aW5nSGVhZGVyRm9yQXJyYXkpOgorICAgICAgICAoSlND
OjpiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSk6CisgICAgICAgICogcnVudGltZS9BcnJheVN0
b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpBcnJheVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmJ1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlT
dG9yYWdlOjpjb3B5SGVhZGVyRnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5T
cGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCk6CisgICAgICAg
IChKU0M6OkFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6c2l6ZUZvcik6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVy
Zmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmVtcHR5U2luZ2xldG9u
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZkF1eFdvcmQp
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5OjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ1BheWxv
YWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OmJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJm
bHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAgICAgICAg
KiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5n
SGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBdXhX
b3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJh
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eSk6
CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2YXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpzZXRMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBv
cCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpzaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAgICAoSlNDOjpKU0FycmF5
Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAo
SlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
b21wYWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJy
YXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojppc0xlbmd0aFdy
aXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAg
IChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
cnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFs
aXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5n
Q29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAg
ICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNw
YXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVz
cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZp
bmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0aXZlVG9Q
YXRjaGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OmluZGV4UmVsYXRpdmVUb0Jhc2UpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgICogcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAq
IHJ1bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKFJlZ0V4cE9iamVjdCk6
CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheUVudHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFs
dWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZh
bHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAg
ICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpub3RGb3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1w
dHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OmVuZCk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
VmFsdWVNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5RW50cnk6OmdldCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
RW50cnk6OmdldE5vblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6SlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6dG9BdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEpTQzo6bmV3SW5kZXhpbmdUeXBlKToKKwogMjAxMi0wOC0yNyAgQmVuamFtaW4gUG91bGFp
biAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIEVDTUFTY3JpcHQgTnVtYmVy
IHRvIFN0cmluZyBjb252ZXJzaW9uIHRvIFdURjo6U3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5z
dGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGlj
IENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBQ
YXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsNiBAQAogCQlBNzY2QjQ0
RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCAqLzsgfTsKLQkJQTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzgxRTM1
ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2QUMg
LyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgfTsKIAkJ
QTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0
RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCAqLzsgfTsKQEAgLTEzNDEsNyArMTM0MCw2IEBACiAJCUE3NjdGRjlGMTRGNDUw
MjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTRE
OTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RvcmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgx
MTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjA0LDcgKzIyMDIsNiBAQAogCQkJCTdFMkM2
Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWluTWFyay5oICovLAogCQkJCTkzMzAzRkU4
MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVBMEU2
QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3MEM3
MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1MDA2
OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0MwMEUx
NkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzYwLDcgKzI3
NTcsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3
QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJCQlB
NzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0Nv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAg
LyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTYgKzM1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKKy8vIFRoaXMgaXMgYSBiaXRmaWVsZCB3aGVyZSBlYWNoIGJpdCByZXBy
ZXNlbnRzIGFuIEluZGV4aW5nVHlwZSB0aGF0IHdlIGhhdmUgc2Vlbi4KKy8vIFRoZXJlIGFyZSAx
NyBpbmRleGluZyB0eXBlcyAoMCB0byAxNiwgaW5jbHVzaXZlKSwgc28gMzIgYml0cyBpcyBtb3Jl
IHRoYW4gZW5vdWdoLgogdHlwZWRlZiB1bnNpZ25lZCBBcnJheU1vZGVzOwogCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgSXNOb3RBcnJheSA9IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSXNKU0Fy
cmF5ICA9IDI7CisjZGVmaW5lIGFzQXJyYXlNb2Rlcyh0eXBlKSBcCisgICAgKDEgPDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHR5cGUpKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVGcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCi0gICAgICAgIHJldHVybiBJc0pTQXJyYXk7
Ci0gICAgcmV0dXJuIElzTm90QXJyYXk7CisgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSk7CiB9CiAKIGNsYXNzIEFycmF5UHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6
CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91
dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTU2LDEwICs5NTUsMTAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5
OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2Fz
ZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDA0
LDggKzE0MDMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8v
IFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1h
eSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUg
c3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJy
YXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJh
eVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0
aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBp
cyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5
IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBA
QCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9BUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0U6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKQotICAgICAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2lu
Z2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKTsKKworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpCisgICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKQEAg
LTE3NCwxMCArMTgyLDE4IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBt
b2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgcmV0dXJuICJTdHJpbmciOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
ICAgIHJldHVybiAiSlNBcnJheSI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OgotICAgICAgICByZXR1cm4gIkpTQXJyYXlPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJl
dHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDEyIEBAIGVudW0gTW9kZSB7CiAgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVz
IHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3
ZSBzaG91bGQganVzdCBnaXZlIHVwLgogICAgIEdlbmVyaWMsCiAgICAgU3RyaW5nLAotICAgIEpT
QXJyYXksCi0gICAgSlNBcnJheU91dE9mQm91bmRzLAorICAgIEFycmF5U3RvcmFnZSwKKyAgICBB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2UsCisgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cywKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LAogICAgIEludDE2QXJyYXksCkBAIC02
MSw2ICs2NSwyOSBAQCBlbnVtIE1vZGUgewogfTsKIH0gLy8gbmFtZXNwYWNlIEFycmF5CiAKKy8v
IEhlbHBlcnMgZm9yICdjYXNlJyBzdGF0ZW1lbnRzLiBGb3IgZXhhbXBsZSwgc2F5aW5nICJjYXNl
IEFsbEFycmF5U3RvcmFnZU1vZGVzOiIKKy8vIGlzIHRoZSBzYW1lIGFzIGhhdmluZyBtdWx0aXBs
ZSBjYXNlIHN0YXRlbWVudHMgbGlzdGluZyBvZmYgYWxsIG9mIHRoZSBtb2RlcyB0aGF0CisvLyBo
YXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCisjZGVmaW5lIE5PTl9BUlJBWV9B
UlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgXAorICAgIEFycmF5U3RvcmFnZTogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgXAorICAgIGNhc2UgUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgICAgICAgIFwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBOb25BcnJheUFycmF5U3RvcmFnZU1vZGVzOiAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2VNb2RlcworI2RlZmluZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgIFwKKyAgICBBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKKyNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICBcCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAg
ICAgICAgIFwKKyAgICBjYXNlIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHMKKwogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFr
ZVNhZmUpOwogCiBBcnJheTo6TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFr
ZVNhZmUpOwpAQCAtNzQsOCArMTAxLDE3IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lU
SF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91
bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwy
NSArMTUwLDYgQEAgaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAg
IH0KIH0KIAotaW5saW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6
Ok1vZGUgbGVmdCwgQXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0g
ICAgICAgIGxlZnQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAg
ICAgICByaWdodCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0
SXNKU0FycmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAg
ICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xNDcsNyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJ
c1NwZWNpZmljKEFycmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3Ro
KEFycmF5OjpNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOwor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDcgKzE2NzQs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAg
ICBlbHNlCi0gICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlT
dG9yYWdlLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRC
dXR0ZXJmbHksIGJhc2UpOwogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFk
ZFRvR3JhcGgoCiAgICAgICAgICAgICBHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksCkBAIC0yMzA5LDcgKzIz
MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCkpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
QEAgLTIzNjAsMTMgKzIzNjAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVy
dHlTdG9yYWdlLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlT
dG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9w
SW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoK
KyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUGhhbnRvbVB1
dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1h
Y3JvKEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNO
b3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3Vs
dFN0b3JhZ2UpIFwKLSAgICBtYWNybyhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9y
YWdlKSBcCisgICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAg
IG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5
T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMyLDcgKzUz
Miw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4
aXN0aW5nIHZlY3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgp
KTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgSlNPYmplY3Q6OnB1dEJ5
SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
dHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NDksNyArNTQ5LDcgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBh
cnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZl
Y3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAg
ICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFy
cmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEz
OCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25T
dHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzMiwyMyArMjQzMiwxNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBz
b21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjUzOCw2
ICsyNTMyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBh
cnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxp
dmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtlbHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3
YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJtIGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAgICAgICAg
CkBAIC0yNTQ1LDggKzI1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkg
JiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAt
MjU3Myw4ICsyNTY5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkK
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgYmFzZS51c2Uo
KTsKQEAgLTI1ODcsOSArMjU4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3RO
ZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKIAogICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUu
bGluaygmbV9qaXQpOwpAQCAtMjU5OCw3ICsyNTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRo
ZSBhcnJheS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMp
IHsKKyAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0
aGlzLApAQCAtMjc2NywxNyArMjc2MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQ
UiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAg
ICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3Ro
KCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTI4MDMsMTgg
KzI3OTksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAg
IHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOzpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0
T2ZMZW5ndGgoKSkpOwogCiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMjggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhl
IGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAgICAgICAv
LyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5PTl9BUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIo
KSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAogICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxMjcs
MTEgKzMxMzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNj
cmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMy
NjAsMTMgKzMyNjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVu
ZwogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJh
eURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJl
ZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRS
ZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAg
ICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5z
dHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAKICAgICAvLyBU
ZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBl
KCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBt
X2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsK
IAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDAsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRy
KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09
IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFu
LCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9m
ZnNldE9mQnV0dGVyZmx5KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwpA
QCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lz
dGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgc2NyYXRjaCk7CiAgICAgICAg
IG5lZzMyKG9mZnNldCk7CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zm
c2V0KTsKQEAgLTE5Niw2ICsxOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUo
SW5zdHJ1Y3RpCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
IAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZkxl
bmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0Zvcihp
KSwgcmVnVDMpOwpAQCAtMjM5LDEwICsyNDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0
cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVy
bywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7
CkBAIC0yNTIsMTAgKzI1NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQXJyYXlTdG9yYWdlOzpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CiAgICAg
anVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQwMyw3ICs0MDUsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVt
cCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29t
cGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWRE
ZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAot
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJs
ZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9m
QnV0dGVyZmx5KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRM
YWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1Qw
LCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVz
dWx0KHRoaXMpOwpAQCAtNDcwLDcgKzQ3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
KSkpKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBj
b252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5
U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
Om9mZnNldE9mQnV0dGVyZmx5KCkpLCByZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2Vt
ZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CkBAIC01MDgsOCArNTEwLDggQEAgdm9pZCBK
SVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKLSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNl
LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0
KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZCdXR0ZXJm
bHkoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0KIAogLy8gQ29t
cGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92ZXJ3
cml0ZSBiYXNlLgpAQCAtNTIwLDggKzUyMiw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVz
dWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1
dHRlcmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQpCkBAIC01MzEsOCArNTMzLDggQEAgdm9pZCBKSVQ6OmNvbXBp
bGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGxvYWRQdHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNo
ZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAg
IGxvYWRQdHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY1NywxMSArNjU5LDExIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJv
ZmlsZShzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
KCkpOwogI2VuZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZElt
bVB0cigmSlNBcnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNr
cyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2Vz
MiA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVt
aXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIxICs5
NDEsMjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFi
bGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0
YWcsIHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0
LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0
Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdl
XSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0
YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIp
ICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkg
KiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRW
YXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXls
b2FkKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlz
SW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRT
dG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0
OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmpl
Y3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBv
YmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwg
OF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAor
ICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBz
aXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhd
LCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0
eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNs
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTc5NCwyMCArNzk0LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwg
b2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHBy
b3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAg
ICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0
T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAK
IG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwg
b2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291
dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9m
ZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5l
OgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9i
amVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAr
IHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBw
cm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFs
KHNpemUsIHNsb3cpCkBAIC0xMTI2LDggKzExMjYsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNH
bG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6
Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6
Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3Ro
W3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Qw
XSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0Mgog
ICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIxMSw4ICsxMjExLDggQEAgX2xsaW50
X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0
MAogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAg
YnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAg
ICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cK
LSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0
OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBi
dHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQog
Lm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAg
LTEyMjMsOSArMTIyMyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVt
cHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQot
ICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIs
IHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3Jl
aSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRb
dDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwx
MSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50
IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29u
c3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlw
ZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEz
CkBAIC0zMTgsNyArMzIzLDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFz
c0luZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgog
ICAgICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1
cmUsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmpl
Y3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgsNyBA
QCBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8g
d2l0aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlv
bikKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3Bl
cnR5U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9w
ZXJ0eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdp
c3RlciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQg
dGhlIG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBv
aW50ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisj
ZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLwor
Ly8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2Yg
dGhyZWUgbG9jYXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1h
cC4KKy8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJh
eSBlbnRyaWVzLgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVy
cywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4g
dW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFY
X0FSUkFZX0lOREVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5
IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdl
cikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBh
IG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIg
aSwKKy8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhl
IHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9s
bG93aW5nCisvLyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Is
CisvLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2Ug
YWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNF
X0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUg
d2lsbCBlaXRoZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGlu
IHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRh
dGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNl
ZCB3aGVyZSBhdCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRo
ZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdF
X1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdh
eXMgYmUgc3RvcmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRo
ZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFs
dWUpIC8gMiB0byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4K
KyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGlt
dW1MZW5ndGgpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2Vk
IGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2gg
aW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmlu
ZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBp
cyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBh
biBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhl
IHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVs
ZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3
aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5l
IEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXpl
IHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Cisv
LyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGlj
eSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4K
Ky8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3
ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBs
b25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBh
IG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisK
K2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30K
KworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVz
dWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0
aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRleGlu
Z0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4p
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3Rv
cmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVm
aW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5j
bHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRl
ICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFs
dWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWlu
ZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBh
Y2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3Jh
Z2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBu
b3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQg
CisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0
dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRT
dG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3Rv
cmFnZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6
CisgICAgQXJyYXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENh
biBvbmx5IGJlIGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAK
KyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBz
dGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikg
eyByZXR1cm4gaW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+
KHRoaXMpOyB9CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28g
ZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGgu
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29y
ZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVh
ZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgp
IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0
b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChs
ZW5ndGgpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsg
cmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkxl
bmd0aCgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tKGNv
bnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisgICAgeworICAgICAgICBtX3NwYXJzZU1hcCA9IG90
aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFz
OworICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3Rv
cjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9u
SW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlm
CisgICAgfQorICAgIAorICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3NwYXJzZU1hcCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAg
ICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBt
X2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFs
aWdubWVudCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4Owor
ICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVu
Z3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5
X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisj
aW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNp
dG9yOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7
IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQo
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAg
ICAgcmV0dXJuIChwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBi
YXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSAr
IDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZz
ZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0
T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0K
KyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlRHVy
aW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVEdXJpbmdDb2xs
ZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAg
IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVy
Ojpmcm9tKHRoaXMpOyB9CisgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVy
KCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9w
ZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+
cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0
b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2Uq
IGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkg
eyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7
IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3Rv
cmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFz
ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFs
bG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBu
b3QgY2hhbmdlIGFueQorICAgIC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRo
ZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1l
dGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0
ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0g
dGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5n
CisgICAgLy8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0
dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSog
Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBC
dXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1
bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBC
dXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZs
eSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRl
ICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJKU0ds
b2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgdG90YWxTaXplKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAqcmVz
dWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlKGdsb2JhbERhdGEsIDAsIHByb3BlcnR5Q2FwYWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDAp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rp
b24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSks
CisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAqcmVzdWx0LT5p
bmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBJ
bmRleGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5
ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVV
bmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVy
dHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweSgKKyAg
ICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisg
ICAgICAgIGJhc2UocHJlQ2FwYWNpdHksIG9sZFByb3BlcnR5Q2FwYWNpdHkpLAorICAgICAgICB0
b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAgICAg
ICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAgICAg
ICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
eworICAgIEFTU0VSVF9VTlVTRUQoc3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2Fw
YWNpdHkoc3RydWN0dXJlKSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlD
YXBhY2l0eSk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uo
CisgICAgICAgICAgICAmdGhlQmFzZSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0
eUNhcGFjaXR5LCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAs
IHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4g
Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVf
dCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
eworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAg
Z2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+YmFzZShu
ZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksCisgICAgICAgIGJhc2Uob2xkUHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLAorICAgICAgICB0b3RhbFNpemUoCisgICAgICAgICAg
ICAwLCBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICAgICAgc3RkOjptaW4ob2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXpl
QXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgcmV0dXJuIHJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAgICAgICBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5z
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAg
QVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lz
ZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisg
ICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUg
ZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQg
b2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5n
IGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAv
LyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlz
IGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBj
b21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50
cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBj
YXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1t
b3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0
eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHks
CisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJP
ZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAg
bWVtbW92ZSgKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsg
bnVtYmVyT2ZTbG90cywKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5LAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAg
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVt
YmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYg
KzcyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blBy
b3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNG
dW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAo
KkdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzOworCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlv
blB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0
eU5hbWVzOwogCkBAIC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIg
eyBcCiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlO
YW1lcywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAor
I2RlZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1
dHRlcmZseTsKK2NsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFN0cnVjdHVyZTsK
K3N0cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoK
KyAgICAvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJe
MzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMg
bm8gcmlzayBvZiBvdmVyZmxvdy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUxl
bmd0aCA9IDB4MTAwMDAwMDA7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4
V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9hdXhXb3Jk
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fbGVuZ3RoKTsgfQorICAgIAorICAgIC8vIFRo
ZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBw
YXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3Qg
YmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5k
ZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3Ro
KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoKHVpbnQzMl90IGxlbmd0
aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAg
ICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBhdXhXb3Jk
KCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQzMl90IGF1
eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGlu
Z0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJbmRleGluZ0hlYWRlciogZnJvbShjb25zdCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNvbnN0IEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4o
YXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRl
ciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KHByb3BlcnR5U3Rv
cmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2Uo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdl
Pih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENv
bnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdl
KiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJm
bHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5v
dCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNl
ZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0
eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3Ry
dWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CisgICAgCisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBv
ZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9s
ZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQg
aXRzIHR5cGUuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5n
SGVhZGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
c19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJ
bmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hl
YWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VM
WSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4Qmlh
czsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2RlZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3Bh
Y2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9y
IHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgSGFzQXJyYXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBm
bGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3Vh
bGx5CisvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8g
TWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0
LgorCisvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZTsKK3N0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJh
eTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0g
SXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlw
ZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9
IDE1OworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3Rv
cnkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9
IDMxOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIGlubGluZSBi
b29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQWN0aXZh
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogCkBAIC0x
NDYsOCArMTQ2LDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAgdGhlIEpTVmFy
aWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwotICAgIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRp
b24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRy
aWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0R5
bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogCiAgICAgICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI2
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBu
eXBvcC5jb20pCiAgKgpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNU
T1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVz
IG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlv
bnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEg
c3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0v
LwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50
aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRl
Z2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgK
LS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUg
MHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNv
bnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0
IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVu
dGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUg
KGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0
b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4g
IEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZh
c2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhl
IHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxl
c3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGll
cyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
PD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgot
Ly8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBh
cnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxk
IGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxl
YXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291
bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVY
IDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQK
LS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9y
YWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxh
dGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVt
IHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQg
aW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBp
biBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5l
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlz
IGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFu
IGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUg
dmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxl
bWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdp
dGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUg
QkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUg
d2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8v
IGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5
IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgot
Ly8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdl
IGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxv
bmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEg
bWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQog
Y29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9i
amVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8g
V2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMg
Z3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUg
dmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUg
aXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3Zl
Lgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZh
bHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwg
bGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMg
Ym9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkgKzU0
LDE1IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZv
aWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsKLX0K
LQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAg
ICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAgIHVu
c2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5n
dGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQot
ICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5
U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0
b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92
ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0
b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVh
dGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBs
YXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFT
RV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdl
U2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwot
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFn
ZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3Jh
Z2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBp
bml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsK
LSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0j
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
dHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24g
Y2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpT
QXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9j
YXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1
bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQot
ewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRl
QmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5h
ZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0g
ICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpo
ZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRD
YXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFy
cmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0
IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNh
c2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAg
IC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUg
LSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAg
ICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAg
IGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRy
eS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0g
ICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7
Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRD
YWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5
VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmlu
ZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJ
biB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUg
YXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRo
aW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0
Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNp
YmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3Qp
IGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2
YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAg
ICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAg
IGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5s
aW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCks
IGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VM
WSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwot
ICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENh
bGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RU
YWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChl
eGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgp
KTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6
Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5k
KCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJy
YXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBt
X3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0
YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6
ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0g
ICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9u
YXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1h
cChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0K
LSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+
c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlz
IGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdy
aXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRv
IHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlz
LCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAg
fQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0g
ICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3Rh
dGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0
b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxs
b2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1f
aW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5
SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9y
JiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3Io
KSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJ
bk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsK
LSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQot
ICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNV
bmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlm
IChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2Ny
aXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNB
Y2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3Iu
Z2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBp
ZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNj
cmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9y
LnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0
ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAg
IGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAg
ICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9i
YWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVz
ID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikg
JiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsK
LX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3du
TnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NF
UlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0g
ICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8g
YSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNh
bGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRl
ZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1
cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVp
ciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0
eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmlu
ZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0
b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJE
aWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0K
LSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4K
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhp
cywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUg
b2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4g
SWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVq
ZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJs
ZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRv
cihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFu
IG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2Ug
W1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJs
ZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJ
ZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUg
YXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNl
dCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3Qg
YmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nl
c3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0
XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0
ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUg
b2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9m
IHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVm
YXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1h
cC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5N
YXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAx
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwg
aWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUs
IGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZh
bHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJl
c3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFs
dWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAg
ICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgp
IHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAg
ICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2Mg
aXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYm
IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0
dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBS
ZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5k
IHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJv
b2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51
bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVu
dW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNj
cmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVp
cmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAg
ICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVz
Y3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChj
dXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3Io
KSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1d
IGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29u
ZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFE
ZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFt
ZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8g
YW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhl
IGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0g
YW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJv
cGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFs
dWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1l
ZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3Bl
cnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUg
Y29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVd
XQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9w
ZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBl
bHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0
b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhl
bgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3Vy
YWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5h
LmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNl
IGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3Jp
dGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0
aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2Mu
W1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFs
dWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEg
cmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5i
LiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNv
IGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQ
cmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEu
IEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3Jp
cHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29u
ZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBb
W1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRd
XSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNl
dHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0
aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltb
R2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVu
dC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVz
ZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBw
dXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAg
IC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5
OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAg
ICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNM
ZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRl
ckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBt
YXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9vbCBK
U0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXkt
PmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9u
KTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17
Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5E
RVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSks
IHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRv
ciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkg
ewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNs
b3QpOworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQog
CiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpA
QCAtNjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBA
IC02ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1
dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9
IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0FycmF5
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVu
Z3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49
IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1
LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElL
RUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNh
bGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBB
U1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
Ci0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwot
ICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAg
ICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSAr
IDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNl
IGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3Iu
Ci0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFBy
b2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAg
ICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0g
ICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVh
c2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3Qp
Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxp
ZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAg
IEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJz
dCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1h
cC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBu
b3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFu
ZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7
Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2lu
Y2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rv
ci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAt
PnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkg
KyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAv
LyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3
YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNw
YXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFy
c2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJh
eSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAo
bWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1W
YWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNy
ZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFs
dWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0
aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNv
bmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xv
dCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xv
dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1
ICsyMTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09i
amVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkg
ewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAg
ICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
c3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihh
KTsKQEAgLTk2NCwxMjcgKzIyNiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQo
Y29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBK
U0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5h
bWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBp
bmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJl
bnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZl
cmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZh
bHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5y
ZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAg
ICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3Qp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCks
IHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRM
ZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVu
Z3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkK
LSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICgh
bV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVu
Z3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2Fs
bHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVu
Z3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRo
aXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3Jl
YXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNp
cmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBk
ZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3Ro
LCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgp
Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFs
bHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVl
cyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhh
dmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmlj
aWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAg
ICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0
b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3Qg
Y2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2Mg
bWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZv
aWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXpl
KHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFn
ZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAg
ICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVu
Z3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0
eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUg
bmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4K
LSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJ
bmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5
KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhl
IHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJl
dF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlh
cyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250
ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9y
YWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9u
LCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Fs
bG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0
aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nh
c2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJ
ZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAg
IEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5
ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVy
dHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhh
bmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0
cmljczoKQEAgLTEwOTMsOCArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJl
bnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAv
LyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0
aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRW
ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sg
dGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1z
YWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAt
IHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5Ojp1
bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVu
Z3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rv
ckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9m
IG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0
b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkg
PSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5k
ZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBv
ZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBt
aW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWly
ZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3JlIGVp
dGhlciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3
ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdBbGxv
Y0Jhc2UgPSAwOwotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJZiB0
aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0
b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENhcGFj
aXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENh
cGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0g
c3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJl
bnRDYXBhY2l0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9j
QmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAgLy8g
V29yayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAvLyBE
ZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5LCBh
bmQgaG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdlJ3Jl
IG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2Fw
YWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBz
dG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxl
bmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGggPSBy
ZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNpcmVk
SW5kZXhCaWFzOwogCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCAr
IHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1f
dmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5
U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxs
b2NCYXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUgZWl0
aGVyIGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdl
J3JlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0FsbG9j
QmFzZSA9IDA7CisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElmIHRo
ZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRv
byBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2FwYWNp
dHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2Fw
YWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0aGlu
Z3MKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1faW5k
ZXhCaWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0g
Y3VycmVudENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNh
cGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXNp
cmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsK
KyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZs
eTo6dG90YWxTaXplKGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihkZXNpcmVkVmVjdG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNp
cmVkQ2FwYWNpdHk7CisgICAgfQorCisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21C
YXNlKG5ld0FsbG9jQmFzZSwgZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3RoKTsK
KyAgICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAgICAv
LyBTdGVwIDQ6CiAgICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3
IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9u
LgogCiAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1
ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRvIHRo
ZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3Zl
IGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVj
dG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdl
LCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFs
bG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
KSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jh
c2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0gICAg
fQorICAgIG1lbW1vdmUobmV3U3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92
ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7
CisgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVT
aXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqIG91dE9mTGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
ICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTE2MiwxMyArMzI0LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAK
ICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBt
b2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xl
bmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWls
IGlmIHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJ
c1JlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3ICsz
ODIsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBzdG9y
YWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNldExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xl
bmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUo
KSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAg
IGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXgg
PCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVl
U2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkg
ewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVT
bG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAg
ICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhd
OworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAg
ICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1Zh
bHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tE
ZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVl
LgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4i
KTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVj
LCBpbmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAg
IGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7
CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJs
ZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0
cnVlKTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3Ro
KGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRl
eCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0x
Mjc1LDM5ICs0NDksNTMgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQog
dm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBGYXN0
IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251
bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3Ro
OwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGlu
IHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAo
bGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVz
aGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1
dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxl
bmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAg
ICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5k
LgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkg
bGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVl
LCB0cnVlLCBzdG9yYWdlKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJy
YXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFu
Z2UgZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZG
RkZ1KSkgewotICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0
b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40
LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQot
Ci0gICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAg
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSgpOwogICAgIAotICAgIHVuc2lnbmVkIG9s
ZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xl
cyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBn
ZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KQEAgLTEzMTgsMTggKzUwNiwxOCBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7
Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3Ro
KG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAg
ICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYg
KHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNp
Z25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsK
KyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0
b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
Pik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdl
U2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxB
cnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0
aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBtX2luZGV4QmlhcyAr
PSBjb3VudDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMzksNTkgKzUyNywyOSBAQCBib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3Vy
ZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVz
IG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdl
bmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVu
Z3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VN
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBj
b3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3
QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0
b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAg
ICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMg
Pj0gY291bnQpIHsKKyAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgLT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRT
bG93Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xl
YXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1
cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5X
aXRob3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlz
T2JqZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIs
IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3Rv
cmFnZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0
LT5tX3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92
ZWN0b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlm
IChiYXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0g
ICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxB
cnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpT
VmFsdWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVj
dC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3Bh
cnNlVmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQog
c3RhdGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEp
LT5hc051bWJlcigpOwpAQCAtMTQxMCwxMTAgKzU2OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0
TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwog
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6
ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051
bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGlu
ZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdl
LT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJl
TnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisg
ICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3
aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAg
IC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJl
J3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcg
dGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3Jh
Z2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFy
ZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAg
aWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21w
YXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBj
b21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQu
IFdlCi0gICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2lu
Y2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBw
aW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3Jh
Z2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFy
ZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0g
ICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2
YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBv
bmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNv
bnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29u
LCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJl
c2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2
ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBv
dGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVu
Y3Rpb24gaW5jb25zaXN0ZW50LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVz
KGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkg
ewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2
YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKysp
IHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tp
XS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5n
IG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwg
cmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2
YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVj
dG9yKCZ2YWx1ZXMpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBi
ZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgLy8g
dGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNv
bXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBj
YW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2Vk
IG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQg
b3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEg
bGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0
cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBt
ZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdp
bmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0
ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkp
IHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+
cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NF
UlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0g
dmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQ
cmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2Fs
bCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEg
dG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAg
ICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5s
aW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVz
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1p
Z2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAg
ICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkK
LSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVz
LmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJl
QnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMg
bGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRv
ZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBw
ZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlr
ZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBk
b2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMg
cGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFu
Z2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGlu
Y3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwg
dmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3Ro
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVu
Z3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhl
IGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3Ro
IHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAg
aWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCks
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdl
LT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAK
KyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk2
LDE0OCArNzc5LDE4MyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUg
CiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5j
dGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAg
ICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBh
cmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRl
cHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBn
b29kCi0gICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVChtX3N0
b3JhZ2UtPm1fbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9yYWdl
LT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVz
ZWRWZWN0b3JMZW5ndGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAtPnNp
emUoKSA6IDApOwotCi0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBE
ZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X2V4ZWMgPSBleGVjOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0g
Y29tcGFyZUZ1bmN0aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBl
ID0gY2FsbFR5cGU7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAm
Y2FsbERhdGE7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7
Ci0KLSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0
PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rv
ciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5k
ZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVk
IG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAv
LyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRp
bmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUg
dHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVm
aW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0u
dmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkg
ewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAg
ICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsr
bnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJl
ZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8g
bm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAg
IEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3Ro
KCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAo
c3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7
CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpT
RnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZp
ZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAg
ICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhl
IHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwor
ICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1E
ZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVu
ZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICAr
K251bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQg
KyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6
ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7
Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFu
IGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAg
IGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JM
ZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAg
ICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4g
YXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0
b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxv
Y2F0ZVNwYXJzZU1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmlu
ZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0
cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBu
dW1EZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1p
Z2h0IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAg
ICAgICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisg
ICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRl
cmF0b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAg
IH0KLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAv
LyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAv
LyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVh
cigpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5l
d1VzZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VS
VCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAg
IC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2
ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQg
dW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQg
PSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgo
KSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsr
aSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkK
LSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWlu
dDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwot
ICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNp
Z25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7
IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4o
bGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVj
dG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZl
Y3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBj
YWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJh
eTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0NSwx
MDMgKzk2Myw3MSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAg
ICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFn
ZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQg
PSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVtRGVm
aW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVl
IHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2
IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
IGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZp
bmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisg
ICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVk
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2Vk
VmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9y
TGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQg
aXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxs
IHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93
biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0
YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsg
KytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBj
aGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1E
ZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5
OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBp
ZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJz
ZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBl
ICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlz
VW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsg
bnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5n
dGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCisgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IGlzIHRocm93biBieSBjYWxsZXIuCisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmll
cihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsK
KyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29u
c2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAg
ICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xl
bmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsK
LSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
c3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBz
dG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JM
ZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhl
IG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE0MCArMjEsMzAgQEAKICNpZm5kZWYg
SlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9u
cy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogCi0jZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZIDAKLQogbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBKU0FycmF5OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAotICAgIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmll
cjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7
Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAg
ICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVz
Y3JpcHRvciYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25z
dDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBT
cGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBT
cGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdz
IHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwK
LSAgICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVi
bGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRl
ZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9y
dGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRP
bmx5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0
aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0Fy
cmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29s
IHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7
Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChp
KTsgfQotICAgICAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAo
Y2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJh
dG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWdu
ZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRv
IG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5v
dEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnMo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8g
T25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIE1hcCBtX21hcDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAg
ICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1
Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBv
YmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVj
dCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5
U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9y
YWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJl
IHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBx
dWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9p
bnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1f
aW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhl
IGFycmF5Ci0gICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZv
aWQqIG1fYWxsb2NCYXNlOyAvLyBQb2ludGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBt
YWxsb2MoKS4gIEtlZXBpbmcgdGhpcyBwb2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0
aXZlcyBmcm9tIHRoZSBsZWFrIGRldGVjdG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
Ci0gICAgICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9z
ZXMuCi0gICAgICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVp
bnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0
cl90IG1fcGFkZGluZzsKLSNlbmRpZgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92
ZWN0b3JbMV07Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAg
c3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3IpOyB9Ci0gICAgfTsKLQogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYWxrZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7
CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAgICAgICAgLCBtX2luZGV4Qmlh
cygwKQotICAgICAgICAgICAgLCBtX3N0b3JhZ2UoMCkKLSAgICAgICAgICAgICwgbV9zcGFyc2VW
YWx1ZU1hcCgwKQorICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgICAg
ICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAw
KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheSogdHJ5RmluaXNoQ3JlYXRpb25V
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwotICAg
IAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0K
LSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7Ci0KICAgICAgICAgc3RhdGlj
IEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoID0gMCk7CiAKICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1
c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKQEAgLTE2
NywyNSArNTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBw
dXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0
aGUgSlNPYmplY3Q6OnB1dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3Rv
dHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUg
bm90IGNhbGxlZC4KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdp
dGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBz
ZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9
IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleChwcm9wZXJ0eU5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
LT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBn
ZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBi
dXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KICAgICAgICAgYm9vbCBz
ZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxz
ZSk7CiAKQEAgLTE5OSw5OSArNzUsMjkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIGJvb2wgdW5z
aGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKIAotICAgICAgICBib29sIGNh
bkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpTVmFsdWUgZ2V0SW5kZXgodW5zaWduZWQg
aSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAg
ICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0
b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICgh
eCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
ICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0
SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdl
OwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0
IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCi0gICAgICAg
ICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwotICAgICAg
ICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0
byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkg
dG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KLSAgICAg
ICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVu
Z3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZUluaXRpYWxp
emF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGlu
ayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0
aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQot
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlh
bGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KLSAgICAgICAgICAgIEFTU0VSVChtX3N0
b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpblNwYXJzZU1v
ZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1v
ZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwg
TWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhl
Y1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RvcmFnZU9mZnNldCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5
LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAg
ICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJv
dGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBzaXplX3Qg
c3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0
aFdyaXRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOwogICAgICAgICAgICAgcmV0dXJuICFtYXAg
fHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CiAKQEAgLTMwMSw0MCArMTA3
LDUwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAg
ICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNl
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIGVudW0gQ29u
c2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29u
c2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVj
ayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5n
dGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1i
ZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAg
QXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJz
ZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgICAgIHN0YXRp
YyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9p
bmRleEJpYXMpOyB9CiAgICAgfTsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
QnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCBiYXNlSW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9
IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2Vu
ZGlmCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
ICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAg
cmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4
KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIAorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIDApOworICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhp
bmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJy
YXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
ICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUp
OwpAQCAtMzUzLDMwICsxNjksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBp
c0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6c19pbmZvOyB9CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyBy
ZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pTQXJyYXkodi5hc0NlbGwoKSk7IH0KIAotLy8gVGhlIGRl
ZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhl
IGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UK
LS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAo
d2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9m
KEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1h
Y3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0v
LyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5
NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBN
QVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQot
ICAgIGlubGluZSBzaXplX3QgSlNBcnJheTo6c3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVu
Z3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKLSAgICAKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIC8vIC0gYXMgYXNzZXJ0ZWQgYWJvdmUgLSB0aGUg
Zm9sbG93aW5nIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4KLSAgICAgICAgc2l6ZV90IHNp
emUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkgKyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotICAg
ICAgICAvLyBBc3NlcnRpb24gdG8gZGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMg
Y2FsY3VsYXRpb24gKHNob3VsZCBub3QgYmUgcG9zc2libGUsIHByb3ZpZGVkIHRoYXQKLSAgICAg
ICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0g
ICAgICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0g
dmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0g
ICAgfQotCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAg
IHsKICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0
dXJlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAg
ICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVj
dHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRl
LWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9k
VGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
ICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVTdHJpbmcgY2xhc3NOYW1l
KGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEpTRnVuY3Rpb246
OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwog
fQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICgh
dGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKSkgewpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Ly8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3
YXMgZ3Jvd24uICBXZSB1c2UgdGhpcworLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0
aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFs
dWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFi
b3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENh
bGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5ICs5MSw3MSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwg
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1
dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0
b3JhZ2UpOworICAgIEFTU0VSVChidXR0ZXJmbHkpOworICAgIEFTU0VSVChidXR0ZXJmbHkgIT0g
QnV0dGVyZmx5OjplbXB0eVNpbmdsZXRvbigpKTsKICAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwog
ICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9
IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3Bl
cnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBp
ZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdl
LCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZT
dG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3
U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50
VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0
b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgSW5kZXhpbmdIZWFkZXImIGhlYWRlciA9ICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNh
cGFjaXR5ID0gaGVhZGVyLnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gaGVhZGVyLmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSk7CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90
YWxTaXplKAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5k
UGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9y
LCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9w
ZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50
U291cmNlID0gc3RvcmFnZS0+cHJvcGVydHlTdG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVl
KTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwog
ICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFs
dWUpOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFn
ZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsK
KyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJp
YXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+
Y29weUhlYWRlckZyb20oKnN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9IG5ld1N0b3JhZ2UtPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3Vy
cmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAo
Y3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsK
KyAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmll
cih2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gbmV3U3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgbWFw
LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7
CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UtPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
IH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE2OSw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09i
amVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlm
IChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Is
IGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93
bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE4OSw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhp
c09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlm
IChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Is
IGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93
bkZpbmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+
c3RydWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7CiAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7
CkBAIC0xNjEsMTAgKzIwOCw0OCBAQCBVU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3Qg
SlNPYmplCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAotYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgLy8gTkIuIFRoZSBmYWN0
IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxp
ZXMgdGhhdCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdl
dE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCisgICAgLy8gZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIAorICAgIGlmIChpIDw9IE1BWF9B
UlJBWV9JTkRFWCkgeworICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7Cisg
ICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xv
dCk7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI1OSwxMyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5z
aWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
aSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQog
CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhl
IHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzMyNywx
NDIgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpT
T2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShpID49IE1BWF9BUlJBWV9JTkRFWCkp
IHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2Fz
ZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAg
ICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5Lgor
ICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwor
ICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xv
dCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAg
CisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2
YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2Jq
ZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYg
KCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7
CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1h
cC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3
YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2Fu
IHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVk
IHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0
aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX3N0b3JhZ2UtPnJlc2l6ZUFy
cmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCAwKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZs
eSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZs
eTsKKyAgICBuZXdCdXR0ZXJmbHktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ1R5cGUgb2xk
VHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NFUlQob2xkVHlwZSA9
PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3
QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+bGVuZ3Ro
KCkpOworICAgIEFTU0VSVCghcmVzdWx0LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmVzdWx0LT5z
ZXRMZW5ndGgobGVuZ3RoKTsKKyAgICByZXN1bHQtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOworICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAgPSAwOworICAgIHJlc3VsdC0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICByZXN1bHQt
Pm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgcmVzdWx0LT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFs
bG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0
dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
MCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNl
IE5vbkFycmF5OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5z
ZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVybiBzdG9yYWdlOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQog
CiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKQEAgLTMwNCw2ICs1MjksMTAgQEAgYm9vbCBKU09iamVjdDo6aGFz
UHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7
CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAg
ICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0z
MzIsMTAgKzU2MSw0NSBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUq
CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
Citib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkK
KyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAg
IHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsK
KyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3Rv
cmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90
Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBE
b250RGVsZXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
QEAgLTQ2NSw2ICs3MjksNTEgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdAogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmly
c3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBG
SVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2
ZXJ5IGludGVnZXIKKyAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBh
cnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0
IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFy
cmF5LgorICAgIHN3aXRjaCAob2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnR5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0
b3JbaV0pCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBrZXlzOworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFw
LT5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAg
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJz
dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQo
a2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFt
ZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0
LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdl
dFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CkBAIC01MTUsOCArODI0LDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXpl
KEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAg
ICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAg
ICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0
ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpw
cmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0K
QEAgLTU3MywxMSArODgxLDExIEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2Jh
bERhdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxs
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewotICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRl
cihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVy
RnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRl
cigpKSB7CiAgICAgICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBv
ZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0g
ZWxzZQpAQCAtNjAzLDI2ICs5MTEsNTIyIEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUlu
aGVyaXRvcklEKEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFn
ZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRl
eGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5N
YXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBv
bGREZXNjcmlwdG9yKQogewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYg
KGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJ
bk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09i
amVjdCogZ2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
KQorICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAg
ICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAg
ICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgSlNP
YmplY3QqIHNldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQo
KSkKKyAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisgICAg
ICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAg
ICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisKKyAgICAgICAg
R2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOworICAg
ICAgICBpZiAoZ2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5n
bG9iYWxEYXRhKCksIGdldHRlcik7CisgICAgICAgIGlmIChzZXR0ZXIpCisgICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKKworICAgICAg
ICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Cisg
ICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3Qg
cmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlk
ZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBp
biBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZG
RkZGRkYpOworCisgICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8v
IEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFy
IGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3Vt
ZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8g
ZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0
cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3Ry
dWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVz
ZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2Rl
JykuCisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0
aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VF
eGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4g
TGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsK
KyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4
dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQg
aXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAv
LyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVu
CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxl
KCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBk
ZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAg
ICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3Ig
SXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBw
cm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwg
W1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1
dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVl
IG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBv
ZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRl
ZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vz
c29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVy
dHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1d
LCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFy
ZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJp
YnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkg
Y3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUu
CisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZh
dWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwg
ZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5t
X2xlbmd0aCkKKyAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBl
dmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYg
ZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUg
b2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9u
ZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBh
bGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVu
dHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwg
ZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAv
LyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0
cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVz
Y3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVj
dCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhl
IFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVh
biBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJh
YmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVy
YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0
b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQu
CisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAv
LyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJl
bnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7
CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1
cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQ
IG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29u
dmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtb
RW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkn
cyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAg
ICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBv
YmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAg
ICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRl
ZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAg
ICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0
cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJy
ZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkg
eworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkg
YW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAg
ICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFj
dXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwg
aWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEw
LmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhl
bgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1d
IGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBj
dXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVu
dC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJv
cGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2Ug
aXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJy
ZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYg
Y3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNj
ZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBh
cmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5b
W1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQ
cmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJl
bnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0
dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4g
Rm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhl
IGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAg
b2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVz
Y3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAx
My4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZp
bmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVj
dC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAq
IEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgU3BhcnNlQXJyYXlW
YWx1ZU1hcDsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAgPSByZXN1bHQ7CisgICAg
Z2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZUFycmF5RGF0YSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKCkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclpl
cm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBkZWxldGUgc3Rv
cmFnZS0+bV9zcGFyc2VNYXA7CisgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworfQorCit2
b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAg
QVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3Rv
cmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3
UHJvcGVydHlTdG9yYWdlID0gMDsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcDsKIAotICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUg
dG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJl
bmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0
b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVv
ZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAg
Q1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0
b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7CisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3
aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VM
WSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdl
IHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3Bh
cmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwogICAgIAotICAgIG1lbWNw
eShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0g
b2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUp
OworICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChp
ICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBi
ZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAg
ICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEp
KSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0
IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisg
ICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3Rv
ciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhl
IHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlT
dG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlTdG9yYWdlOworICAgIC8vIFVwZGF0ZSBt
X2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hpYml0IGdyb3dp
bmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAgIGlmIChtYXAt
Pmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIGlm
IChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRM
ZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEg
bWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8v
IFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBz
ZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMu
CisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7CisgICAgICAgIG1hcC0+
cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVu
Z3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9y
YWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJy
YXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3Rv
ciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5v
blNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAv
LyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkK
KyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNT
RVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTog
eworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxk
VGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlT
dG9yYWdlKGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoaSArIDEpKTsKKyAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7
CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAvLyBGaXJzdCwgaGFu
ZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAg
ICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0
ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVh
dGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CisgICAg
CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkg
KyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJl
IHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAg
ICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkp
KSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQg
aGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAg
ICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2
ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRk
IHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGgg
aWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwor
ICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBh
cnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJ
c1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2lu
ZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAg
ICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUg
aXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZh
aWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisK
KyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRh
dGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Cisg
ICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAg
ICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRl
bGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3Rvcltp
dC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0
aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQg
YmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVj
dG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAg
IGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAg
ICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBp
ID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hv
dWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwg
aSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0FMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBj
dXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNp
cmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWduZWQg
aW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBtaW4oY3VycmVu
dExlbmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5n
dGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7CisgICAgZWxzZSBp
ZiAoIW1fdmVjdG9yTGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJl
ZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0
aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5l
d0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyAgIGluY3Jl
YXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOworICAgICAgICAv
LyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgICAgICBp
bmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAo
ZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGgg
Pj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0gbWluKGluY3JlYXNlZExl
bmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisgICAgcmV0dXJuIG1pbihpbmNyZWFzZWRMZW5n
dGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkK
K3sKKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKGdldEFycmF5TGVuZ3RoKCksIGRlc2ln
bmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50
IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2
YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBm
b3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlm
IChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChu
ZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9
IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhl
cmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5z
ZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkp
OworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgICAgIG5ld0J1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2Fw
YWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0
aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBtaW4oaW5kZXhCaWFzID4+IDEsIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOworICAgIC8vIENhbGN1bGF0
ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5
LgorICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5l
d0luZGV4QmlhczsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRl
cmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgaW5kZXhC
aWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAgIG5ld0luZGV4QmlhcywgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworCisgICAg
QVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQor
ICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51
bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsr
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlw
ZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NF
UlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Cisg
ICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAg
IGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAgICBmb3Ig
KFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3Ry
dWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5l
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQn
cyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBm
b3IgdGhlIHByb3BlcnR5CisgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxy
ZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBv
bGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsx
NDM0LDQ2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9
PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNl
dCksIGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0
ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAg
ICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNzA0LDI2ICsxNTQ0LDI2IEBAIHBy
aXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAg
Ly8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHku
CiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92
ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGlj
dWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFs
bG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVz
IHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhp
cyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAK
ICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBu
b3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewog
ICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAo
IW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkg
ewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9s
ZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7
CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAg
IH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSkKQEAgLTc0OSw4ICsxNTg5LDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJp
YyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlz
dGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkg
ewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0g
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NzYyLDggKzE2MDIsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
CiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAg
ICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4
aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTYyNCw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRy
aWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERl
c2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1
bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2NDIs
NyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9
IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
R2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBA
IC04MTIsMTIgKzE2NTIsMzcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNF
cXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cisg
ICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7
CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4g
YXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRl
ZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZh
bHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBm
YWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4g
U2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4g
Q2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4
LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFy
Z3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgorICAgICAgICAvLyBm
LiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFBy
b3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBl
eGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5
cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgog
I2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNp
bmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCkBAIC03OSw2ICs3OCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8g
cHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJU
KE5vbmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Cisg
ICAgQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250
RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VS
VChEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8
IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAg
ICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlND
ZWxsIHsKQEAgLTk2LDYgKzEwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgog
ICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZv
aWQgZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKQEAgLTEyMCw4ICsxMjgsMTc2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wg
YWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJh
eUxlbmd0aCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0
b3JMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0
aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNz
b3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVp
Y2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7
CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5k
ZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJl
IGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAg
ICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3Ig
dG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90
IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGll
cyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3
TGVuZ3RoLCBuZXdMZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9m
IHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9k
ZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVs
eSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8v
ICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyMyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJv
dG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1Zh
bHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1By
ZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM4MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25z
dCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlT
dG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0
KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVy
biBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJu
IG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDA3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9y
YWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgp
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDQ5
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZp
ZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAg
ICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVj
KTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9m
TGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRl
cmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRh
JiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVy
ZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
Kik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0K
ICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlv
bmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NjgsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1
dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFU
QSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUwMCw2NCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkg
d2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQg
dHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBK
U09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAg
ICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9p
bmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRP
dXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3Rv
cmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgUHJv
cGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhp
cyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBh
cnJheQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNh
dGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0
b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2Uu
IFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMg
dGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29u
dmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAg
ICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
cnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAg
IEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZp
bmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM2LDE3ICs1NzAsNDUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAgICAgICAgdm9p
ZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERh
dGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPFB1dE1vZGU+
CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsK
IAogICAgICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogbG9jYXRpb24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsK
IAogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVy
aXRvcklEKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZM
aW5lU3RvcmFnZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3Io
RXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3Bl
cnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICB2b2lkIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2Uq
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9y
TGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0
aCk7CisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbmV3TGVuZ3RoKTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsg
Tm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRD
b25zaXN0ZW5jeUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAg
IHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9y
bWFsQ29uc2lzdGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hl
Y2spOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdl
dE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0
dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjM0LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAg
ZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAw
KQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzE4LDYgQEAgaW5saW5lIHNp
emVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9v
bCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCAr
NzQ4LDEyIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICBy
ZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwog
fQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYg
KCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3Rv
cmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs3OTEsOSBAQCBp
bmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2Jq
ZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2Jq
ZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAg
ICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NDEsMTcgQEAg
aW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBp
ZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVj
dHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVy
U2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0
aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChv
ZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclBy
b3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRp
b24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBl
c3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5MzcsNyBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAg
ICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNz
b3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAt
NzEyLDExICs5NjYsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFs
KAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93
T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVy
ZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAg
ICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICs5ODQsMTMgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsK
ICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAg
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAo
Y3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAg
ICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJy
ZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50
Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFs
aWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBu
ZXdTdG9yYWdlLCBzdHJ1Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwg
bmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFs
RGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7
IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hh
YmxlLAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRl
LgpAQCAtODAzLDkgKzEwNTcsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJl
QW5kUmVhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdl
IG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRD
YXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRP
ZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAg
c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0K
IAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdl
SWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSkKQEAgLTgzOSwxMSArMTA5MywxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0KEpTR2xvYmFsCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFBy
b3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5w
dXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRh
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0g
ICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUo
KSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJl
KCkpOwogICAgIHB1dERpcmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0K
IApAQCAtOTM1LDYgKzExODksMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6
d2l0aENhbAogICAgIHJldHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVy
Zmx5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
K30KKwogLy8gVGhpcyBpcyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2Fu
dCB0byBlbWl0IGEgbG9hZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlu
bGluZSBvZmZzZXRzOiBhIHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRl
ci4KQEAgLTk0MywxMyArMTIwMiwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9Q
YXRjaGVkU3RvCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAg
IHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAt
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
ICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
ICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50
IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChp
c091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFT
U0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
OwogfQpAQCAtOTU3LDcgKzEyMTYsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2Uo
UHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsg
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQog
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkK
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0
LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgCiAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2UoUAogewogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0
T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQog
CiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlT
dG9yYWdlX2gKKworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0
eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9y
YWdlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgYm9v
bCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIFJlZ0V4
cE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFs
dWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIlByb3Bl
cnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93
bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFy
c2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNv
bnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFs
dWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
K307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1
aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVt
IEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisg
ICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0
OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
CisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19j
YXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5n
dGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNS
ZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsK
KyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNS
ZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3Qo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRv
ciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlz
IHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0
aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0
KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBt
YXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAg
IC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgor
ICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVk
Q2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFy
cmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisg
Ki8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5l
IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZh
bHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJh
eSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21h
cC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsK
KyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNp
dHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBh
Y2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3Vs
dCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0g
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmlu
ZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJ
biB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUg
YXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRo
aW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0
Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1
ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dl
dHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNj
ZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhl
Yywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5l
IGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFy
cmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBz
YXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3Bh
cnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcg
cHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBp
cyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAg
ICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0
aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMg
PSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQ
cm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6Omdl
dCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRl
clNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1
ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZp
bmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3Qo
Z2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFy
c2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0
Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0
KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihy
ZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7
CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5
LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50
cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7
CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZh
bHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJh
dG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25k
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5l
IFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdl
QmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsK
LSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERh
dGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJv
cGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChz
dG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERh
dGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAg
IG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0
b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3Iq
KCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsg
fQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsg
cmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQo
KSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4g
IW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9y
YWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0
OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0
cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90
eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmd0eXBlKGluZGV4aW5nVHlwZSkKICAg
ICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVC
YXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xv
YmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpA
QCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsg
IlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6
IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBl
LCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAs
IG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0lu
Zm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRX
YXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHBy
ZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEs
IHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHBy
ZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5p
dGlhbGl6ZWRXYXRjaGluZykKQEAgLTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5zaXRpb24gdHJh
bnNpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5z
aXRpb24pOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb24pOwor
ICAgIAorICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSB7CisgICAgICAgIEFTU0VSVChl
eGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcyk7
CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFu
c2l0aW9uOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblBy
ZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGlu
ZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsK
KyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFs
RGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1
dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6
OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZv
LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOwor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0lu
Zm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24p
OwogCiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wg
aXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0K
ICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmpl
Y3QoKTsgfQogCisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
aW5nVHlwZTsgfQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVj
dCk7IH0KQEAgLTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdU
eXBlT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBA
IC0zNjMsNyArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwg
SW5kZXhpbmdUeXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAg
ICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00
MTYsNiArNDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJ
bmZvIG1fdHlwZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAg
ICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3
ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRl
clByb3BlcnRpZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRl
clByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVt
ZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJl
dmlvdXMgOiA3OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7
CiAgICAgICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAg
ICAgICAgdW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVk
IG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUp
OwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVh
cCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUlu
Zm8sIGNsYXNzSW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8s
IGluZGV4aW5nVHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRl
ICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hG
dW5jdGlvbnMuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlND
ZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0
IGhhdmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCisKKy8vIFN1cHBvcnQgZm9yIGF0
dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBwcm9w
ZXJ0aWVzLgorLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24g
b2YgdGhlIGtleSBzaG91bGQgYmUgMC4KK2VudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9uIHsKKyAg
ICBBbGxvY2F0ZUFycmF5U3RvcmFnZQorfTsKKworaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRl
cyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gdHJhbnNp
dGlvbiArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7Cit9CisKK2lubGluZSBJbmRleGluZ1R5cGUg
bmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFs
bG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3Rv
cmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0g
MTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161014</attachid>
            <date>2012-08-28 11:06:26 -0700</date>
            <delta_ts>2012-08-28 14:23:29 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_23.diff</filename>
            <type>text/plain</type>
            <size>324896</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2ODQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyMiBA
QAorMjAxMi0wOC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJyYXlNb2RlRnJvbVN0cnVj
dHVyZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1v
ZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJp
bmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbkJv
dW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpieVZhbElzUHVyZSk6CisgICAgICAgICogZGZnL0RGR05v
ZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNr
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29t
cGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
Ojppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpTQzo6aW5kZXhpbmdIZWFkZXJG
b3JBcnJheSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpBcnJheVBy
b3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1Rv
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01h
cCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5
cGUuaDoKKyAgICAgICAgKEFycmF5UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9BcnJheVN0b3JhZ2Uu
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmJ1dHRlcmZseSk6
CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdl
Ojpjb3B5SGVhZGVyRnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VN
b2RlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
c2l6ZUZvcik6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9m
QXV4V29yZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxlY3Rpb24pOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQ
cm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNpemVBcnJheSk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6c2hpZnQpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChNZXRob2RUYWJsZSk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDogQWRkZWQu
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlND
OjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6
SW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6bGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6
OkluZGV4aW5nSGVhZGVyOjphdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnNldEF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNh
cGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlv
bi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9u
Ojp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlm
dENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnVuc2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZp
bGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUFycmF5
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpj
cmVhdGVBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZp
bmFsaXplQXJyYXlEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNl
SW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAg
ICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhR
dWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y29tcGxldGVJbml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
blNwYXJzZUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRk
cmVzcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0lu
ZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05v
bkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpvZmZzZXRJbkJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0aXZlVG9QYXRj
aGVkU3RvcmFnZSk6CisgICAgICAgIChKU0M6OmluZGV4UmVsYXRpdmVUb0Jhc2UpOgorICAgICAg
ICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaDoKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAqIHJ1
bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKFJlZ0V4cE9iamVjdCk6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheUVudHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVN
YXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVl
TWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojpub3RGb3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1wdHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
OmVuZCk6CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChK
U0M6OlNwYXJzZUFycmF5RW50cnk6OmdldCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50
cnk6OmdldE5vblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmg6IFJl
bW92ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuaDoKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OnRvQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisKIDIwMTIt
MDgtMjcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjY4MzYuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5z
dGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGlj
IENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYg
ZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBQ
YXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1NjQsNiBAQAogCQlBNzY2QjQ0
RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCAqLzsgfTsKLQkJQTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzgxRTM1
ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2QUMg
LyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgfTsKIAkJ
QTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0
RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCAqLzsgfTsKQEAgLTEzNDEsNyArMTM0MCw2IEBACiAJCUE3NjdGRjlGMTRGNDUw
MjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTRE
OTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RvcmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgx
MTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjA0LDcgKzIyMDIsNiBAQAogCQkJCTdFMkM2
Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWluTWFyay5oICovLAogCQkJCTkzMzAzRkU4
MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVBMEU2
QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3MEM3
MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1MDA2
OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0MwMEUx
NkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzYwLDcgKzI3
NTcsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3
QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJCQlB
NzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0Nv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAg
LyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMTYgKzM1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKKy8vIFRoaXMgaXMgYSBiaXRmaWVsZCB3aGVyZSBlYWNoIGJpdCByZXBy
ZXNlbnRzIGFuIEluZGV4aW5nVHlwZSB0aGF0IHdlIGhhdmUgc2Vlbi4KKy8vIFRoZXJlIGFyZSAx
NyBpbmRleGluZyB0eXBlcyAoMCB0byAxNiwgaW5jbHVzaXZlKSwgc28gMzIgYml0cyBpcyBtb3Jl
IHRoYW4gZW5vdWdoLgogdHlwZWRlZiB1bnNpZ25lZCBBcnJheU1vZGVzOwogCi1zdGF0aWMgY29u
c3QgdW5zaWduZWQgSXNOb3RBcnJheSA9IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSXNKU0Fy
cmF5ICA9IDI7CisjZGVmaW5lIGFzQXJyYXlNb2Rlcyh0eXBlKSBcCisgICAgKDEgPDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHR5cGUpKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVGcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCi0gICAgICAgIHJldHVybiBJc0pTQXJyYXk7
Ci0gICAgcmV0dXJuIElzTm90QXJyYXk7CisgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSk7CiB9CiAKIGNsYXNzIEFycmF5UHJv
ZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsNyBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6
CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91
dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTU2LDEwICs5NTUsMTAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5
OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2Fz
ZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2Rl
KGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDA0
LDggKzE0MDMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8v
IFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1h
eSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUg
c3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJy
YXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJh
eVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0
aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBp
cyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5
IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBA
QCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9BUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0U6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKQotICAgICAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2lu
Z2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKTsKKworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpCisgICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKQEAg
LTE3NCwxMCArMTgyLDE4IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBt
b2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgcmV0dXJuICJTdHJpbmciOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
ICAgIHJldHVybiAiSlNBcnJheSI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OgotICAgICAgICByZXR1cm4gIkpTQXJyYXlPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJl
dHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDEyIEBAIGVudW0gTW9kZSB7CiAgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVz
IHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3
ZSBzaG91bGQganVzdCBnaXZlIHVwLgogICAgIEdlbmVyaWMsCiAgICAgU3RyaW5nLAotICAgIEpT
QXJyYXksCi0gICAgSlNBcnJheU91dE9mQm91bmRzLAorICAgIEFycmF5U3RvcmFnZSwKKyAgICBB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2UsCisgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cywKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LAogICAgIEludDE2QXJyYXksCkBAIC02
MSw2ICs2NSwyOSBAQCBlbnVtIE1vZGUgewogfTsKIH0gLy8gbmFtZXNwYWNlIEFycmF5CiAKKy8v
IEhlbHBlcnMgZm9yICdjYXNlJyBzdGF0ZW1lbnRzLiBGb3IgZXhhbXBsZSwgc2F5aW5nICJjYXNl
IEFsbEFycmF5U3RvcmFnZU1vZGVzOiIKKy8vIGlzIHRoZSBzYW1lIGFzIGhhdmluZyBtdWx0aXBs
ZSBjYXNlIHN0YXRlbWVudHMgbGlzdGluZyBvZmYgYWxsIG9mIHRoZSBtb2RlcyB0aGF0CisvLyBo
YXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCisjZGVmaW5lIE5PTl9BUlJBWV9B
UlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgXAorICAgIEFycmF5U3RvcmFnZTogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgXAorICAgIGNhc2UgUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
TU9ERVMgICAgICAgICAgICAgIFwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBOb25BcnJheUFycmF5U3RvcmFnZU1vZGVzOiAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2VNb2RlcworI2RlZmluZSBJTl9CT1VORFNf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgIFwKKyAgICBBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgUG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKKyNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICBcCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAg
ICAgICAgIFwKKyAgICBjYXNlIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHMKKwogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFr
ZVNhZmUpOwogCiBBcnJheTo6TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFr
ZVNhZmUpOwpAQCAtNzQsOCArMTAxLDE3IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJh
eTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lU
SF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91
bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwy
NSArMTUwLDYgQEAgaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAg
IH0KIH0KIAotaW5saW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6
Ok1vZGUgbGVmdCwgQXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0g
ICAgICAgIGxlZnQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAg
ICAgICByaWdodCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0
SXNKU0FycmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAg
ICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xNDcsNyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJ
c1NwZWNpZmljKEFycmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3Ro
KEFycmF5OjpNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOwor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDcgKzE2NzQs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAg
ICBlbHNlCi0gICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlT
dG9yYWdlLCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRC
dXR0ZXJmbHksIGJhc2UpOwogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFk
ZFRvR3JhcGgoCiAgICAgICAgICAgICBHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksCkBAIC0yMzA5LDcgKzIz
MDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCkpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
QEAgLTIzNjAsMTMgKzIzNjAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVy
dHlTdG9yYWdlLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlT
dG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9w
SW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoK
KyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUGhhbnRvbVB1
dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1h
Y3JvKEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNO
b3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3Vs
dFN0b3JhZ2UpIFwKLSAgICBtYWNybyhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9y
YWdlKSBcCisgICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAg
IG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5
T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMyLDcgKzUz
Miw3IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CkBAIC01NDAsNyArNTQwLDcgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4
aXN0aW5nIHZlY3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgp
KTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgSlNPYmplY3Q6OnB1dEJ5
SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
dHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NDksNyArNTQ5LDcgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBh
cnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CkBAIC01NTcsNyArNTU3LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZl
Y3Rvci4KICAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAg
ICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFy
cmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEz
OCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25T
dHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
IFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzMiwyMyArMjQzMiwxNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBz
b21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjUzOCw2
ICsyNTMyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBh
cnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxp
dmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtlbHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3
YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJtIGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAgICAgICAg
CkBAIC0yNTQ1LDggKzI1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkg
JiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAt
MjU3Myw4ICsyNTY5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkK
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgYmFzZS51c2Uo
KTsKQEAgLTI1ODcsOSArMjU4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgd3Jp
dGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3RO
ZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIo
MSksIHByb3BlcnR5UmVnKTsKIAogICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUu
bGluaygmbV9qaXQpOwpAQCAtMjU5OCw3ICsyNTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRo
ZSBhcnJheS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMp
IHsKKyAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0
aGlzLApAQCAtMjc2NywxNyArMjc2MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQ
UiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAg
ICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3Ro
KCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTI4MDMsMTgg
KzI3OTksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAg
IHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOzpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0
T2ZMZW5ndGgoKSkpOwogCiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMjggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhl
IGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAgICAgICAv
LyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5PTl9BUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIo
KSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7Cisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAogICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxMjcs
MTEgKzMxMzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNj
cmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMy
NjAsMTMgKzMyNjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVu
ZwogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJh
eURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJl
ZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRS
ZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAg
ICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5z
dHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAKICAgICAvLyBU
ZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBl
KCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBt
X2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsK
IAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDAsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRy
KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09
IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFu
LCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9m
ZnNldE9mQnV0dGVyZmx5KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAg
ICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwpA
QCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lz
dGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgc2NyYXRjaCk7CiAgICAgICAg
IG5lZzMyKG9mZnNldCk7CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zm
c2V0KTsKQEAgLTE5Niw2ICsxOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUo
SW5zdHJ1Y3RpCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsK
IAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZkxl
bmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0Zvcihp
KSwgcmVnVDMpOwpAQCAtMjM5LDEwICsyNDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0
cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhh
c0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVy
bywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7
CkBAIC0yNTIsMTAgKzI1NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVt
VmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3Rv
cmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQXJyYXlTdG9yYWdlOzpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CiAgICAg
anVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQwMyw3ICs0MDUsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVt
cCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29t
cGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWRE
ZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAot
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJs
ZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9m
QnV0dGVyZmx5KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRM
YWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1Qw
LCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVz
dWx0KHRoaXMpOwpAQCAtNDcwLDcgKzQ3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
KSkpKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBj
b252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5
U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
Om9mZnNldE9mQnV0dGVyZmx5KCkpLCByZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2Vt
ZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CkBAIC01MDgsOCArNTEwLDggQEAgdm9pZCBK
SVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKLSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNl
LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0
KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZCdXR0ZXJm
bHkoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0KIAogLy8gQ29t
cGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92ZXJ3
cml0ZSBiYXNlLgpAQCAtNTIwLDggKzUyMiw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVz
dWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1
dHRlcmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQpCkBAIC01MzEsOCArNTMzLDggQEAgdm9pZCBKSVQ6OmNvbXBp
bGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGxvYWRQdHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNo
ZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAg
IGxvYWRQdHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY1NywxMSArNjU5LDExIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJP
RklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJv
ZmlsZShzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
KCkpOwogI2VuZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZElt
bVB0cigmSlNBcnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNr
cyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2Vz
MiA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVt
aXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIxICs5
NDEsMjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFi
bGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0
YWcsIHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0
LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0
Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdl
XSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0
YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIp
ICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkg
KiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRW
YXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXls
b2FkKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlz
SW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRT
dG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0
OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmpl
Y3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBv
YmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwg
OF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAor
ICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBz
aXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhd
LCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0
eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNs
b3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTc5NCwyMCArNzk0LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwg
b2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHBy
b3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAg
ICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0
T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAK
IG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwg
b2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291
dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9m
ZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5l
OgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9i
amVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAr
IHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBw
cm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFs
KHNpemUsIHNsb3cpCkBAIC0xMTI2LDggKzExMjYsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoK
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNH
bG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6
Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6
Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3Ro
W3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Qw
XSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVh
ZGVyOjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywg
OF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0Mgog
ICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIxMSw4ICsxMjExLDggQEAgX2xsaW50
X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0
MAogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAg
YnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAg
ICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cK
LSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0
OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBi
dHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQog
Lm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAg
LTEyMjMsOSArMTIyMyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVt
cHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQot
ICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIs
IHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3Jl
aSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRb
dDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwx
MSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50
IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29u
c3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlw
ZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEz
CkBAIC0zMTgsNyArMzIzLDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFz
c0luZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgog
ICAgICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1
cmUsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmpl
Y3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgsNyBA
QCBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8g
d2l0aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlv
bikKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3Bl
cnR5U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9w
ZXJ0eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdp
c3RlciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQg
dGhlIG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBv
aW50ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisj
ZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLwor
Ly8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2Yg
dGhyZWUgbG9jYXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1h
cC4KKy8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJh
eSBlbnRyaWVzLgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVy
cywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4g
dW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFY
X0FSUkFZX0lOREVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5
IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdl
cikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBh
IG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIg
aSwKKy8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhl
IHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9s
bG93aW5nCisvLyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Is
CisvLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2Ug
YWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNF
X0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUg
d2lsbCBlaXRoZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGlu
IHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRh
dGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNl
ZCB3aGVyZSBhdCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRo
ZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdF
X1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdh
eXMgYmUgc3RvcmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRo
ZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFs
dWUpIC8gMiB0byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4K
KyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGlt
dW1MZW5ndGgpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2Vk
IGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2gg
aW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmlu
ZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBp
cyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBh
biBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhl
IHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVs
ZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3
aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5l
IEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXpl
IHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Cisv
LyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGlj
eSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4K
Ky8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3
ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBs
b25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBh
IG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisK
K2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30K
KworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVz
dWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0
aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRleGlu
Z0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4p
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsMTcg
QEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8gPQogQGVuZAogKi8KIAor
QXJyYXlQcm90b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgMCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90
b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcHJvdG90eXBl
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9
CisKIC8vIEVDTUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0Fy
cmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCitBcnJheVByb3RvdHlw
ZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNBcnJheShnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTI5
Miw4ICszMDAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKICAgICAgICAgSlNW
YWx1ZSBlbGVtZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXgoaykpCi0gICAg
ICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7CisgICAgICAgIGlmICh0aGlz
T2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBlbGVtZW50ID0gdGhpc09i
ai0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbGVtZW50
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQxMywxMCArNDIxLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3Ro
OyBrKyspIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAg
ICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgo
ayk7CisgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5
KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvVVN0cmluZ0lubGluZShl
eGVjKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC03ODgsOSArNzk2LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAz
KTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyAr
K2spIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCB2KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwpAQCAtODQ2LDExICs4NTQsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhp
c09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRo
aXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5k
ZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0
SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlz
T2JqKTsKIApAQCAtOTA5LDExICs5MTcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9y
ICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhh
cHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+
Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJh
eS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgy
LCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxs
KCk7CkBAIC05NjUsMTEgKzk3MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAg
ICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsg
ayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7Cisg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNr
bHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihr
KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBA
IC0xMDE3LDExICsxMDI1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAg
ICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwg
bGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlz
KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4
KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldElu
ZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpz
TnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09i
aik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAt
MTA3NSw4ICsxMDgzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4
ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRl
eCgwKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4KDApOworICAgIGVsc2UgaWYgKGFy
cmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoMCkpeworICAgICAgICBydiA9IGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoMCk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTA5Nyw4ICsxMTA1LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCBydik7CiAgICAgICAgICAgICBKU1ZhbHVlIHY7Ci0gICAgICAgICAgICBp
ZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleChpKSkpCi0gICAgICAgICAgICAgICAgdiA9IGFy
cmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShpKSkpCisgICAgICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNr
bHkoaSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0
aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xv
dyBwYXRoCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIHYpOwpAQCAtMTE1
Miw4ICsxMTYwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBl
eGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXgobGVuZ3RoIC0gMSkpewotICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAx
KTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGxlbmd0
aCAtIDEpKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEp
OwogICAgICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKQEAgLTExNzQsOSArMTE4Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIHVuc2lnbmVkIGlkeCA9IGxlbmd0aCAt
IGkgLSAxOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBydik7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChpZHgpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpZHgpKSkKICAgICAgICAgICAgICAg
ICBicmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0
ZSBmYWxsYmFjayB0byBzbG93IHBhdGgKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMSwgYXJyYXktPmdldEluZGV4KGlkeCkpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGlkeCkpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgyLCBqc051bWJlcihpZHgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMywgYXJyYXkpOwogICAgICAgICAgICAgcnYgPSBjYWNoZWRDYWxs
LmNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNB
cnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRl
ZiBKU0FycmF5IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUqIHByb3Rv
dHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+
aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgICAgICAg
ICAgcmV0dXJuIHByb3RvdHlwZTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgQXJyYXlQcm90
b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwpAQCAtNDcsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAg
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdl
X2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gKKworI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMu
aCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwg
ZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdz
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rv
ci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUg
Z2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0
YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3Jh
Z2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4g
IFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8g
ICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3Qg
QXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOwor
cHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRp
YWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGlj
OgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsg
fQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5n
SGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0
dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0
ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5k
IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigp
LT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5k
ZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lk
IHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0
TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9m
ZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRl
ckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNl
TWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9p
bmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVl
c0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlh
bGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247
CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7Cisg
ICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVu
c2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Cisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJf
dCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9u
SW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
TGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIAorICAgIHN0YXRp
YyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
dXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFk
ZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3Rv
cmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3Mg
U2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBCdXR0ZXJmbHkgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRl
cmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRp
YyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAg
IEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikp
OworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNl
KHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNh
cGFjaXR5ICsgMSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5n
SGVhZGVyKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0
dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1
eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVy
biBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5n
dGgoKTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGVEdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZUR1
cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhp
bmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQor
ICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGluZ1Bh
eWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFycmF5
U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3Rv
cmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisgICAg
eworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2
b2lkKiBiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBUaGUgYnV0dGVy
Zmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYg
YnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0
IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCisg
ICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVu
Y2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisgICAgLy8gbW9kZXMgb2YgYnV0dGVy
ZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5
IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4K
KyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5
Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNo
LgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5KiBz
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAgICB0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwgJnRl
bXApKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
ICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJl
dHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgcHJvcGVydHlDYXBhY2l0eSwgSW5kZXhpbmdIZWFk
ZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlRHVyaW5n
Q29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFs
U2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpKSwKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgICpy
ZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZUR1cmluZ0NvbGxl
Y3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIHJldHVybiBjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIDAsIHByb3BlcnR5Q2Fw
YWNpdHksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5
OjpiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5
Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVt
Y3B5KAorICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBh
Y2l0eSwKKyAgICAgICAgYmFzZShwcmVDYXBhY2l0eSwgb2xkUHJvcGVydHlDYXBhY2l0eSksCisg
ICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
CisgICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVj
dHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
CisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRl
U3RvcmFnZSgKKyAgICAgICAgICAgICZ0aGVCYXNlLAorICAgICAgICAgICAgdG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAg
ICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGhl
QmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAg
IHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCkt
PmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVB
cnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAor
ICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweSgKKyAgICAgICAgcmVzdWx0
LT5iYXNlKG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwKKyAgICAgICAgYmFzZShv
bGRQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksCisgICAgICAgIHRvdGFsU2l6ZSgKKyAg
ICAgICAgICAgIDAsIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgICAgICBzdGQ6Om1pbihvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5
OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEs
IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykK
K3sKKyAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJs
eSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4g
d2hpY2gKKyAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBu
ZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3Zp
bmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhy
b3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9m
IGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0
bworICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJn
dW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkg
b24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIg
YXJndW1lbnRzIChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5k
IGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgor
ICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNp
dHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsK
KyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAt
IG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMp
Cit7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92
ZS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHkgKyBudW1iZXJPZlNsb3RzLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNh
cGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdl
KCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgq
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0T3duUHJvcGVy
dHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAgICAgICAgdHlwZWRl
ZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
ICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlOYW1l
c0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sj
I21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpoYXNJbnN0
YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hl
YWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUgIlByb3BlcnR5U3Rv
cmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQnV0dGVyZmx5OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgU3Ry
dWN0dXJlOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgewor
cHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGgg
dG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0
aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhpbXVtTGVuZ3RoID0gMHgxMDAwMDAwMDsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBt
X2F1eFdvcmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9sZW5ndGgpOyB9CisgICAgCisg
ICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVy
bydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hv
dWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4K
KyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwg
bV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgodWludDMy
X3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVtTGVuZ3Ro
KTsKKyAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90
IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1eFdvcmQodWlu
dDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAgCisgICAgc3RhdGlj
IEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0g
MTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBmcm9tKGNv
bnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgSW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFycmF5U3RvcmFnZSogYXJyYXlT
dG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4
aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4ocHJv
cGVydHlTdG9yYWdlKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5
U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0
eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBcnJh
eVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUKKyAg
ICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6ZV90IHBy
ZUNhcGFjaXR5KFN0cnVjdHVyZSopOworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICAKKyAgICB1aW50MzJfdCBtX2F1eFdvcmQ7IC8vIFRoZSBt
ZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZS4KKyAgICB1aW50
MzJfdCBtX2xlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9y
YWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
SW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKworI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6ZV90IElu
ZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBp
ZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCktPm1f
aW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZ
KCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEluZGV4aW5nVHlwZV9oCisjZGVmaW5lIEluZGV4aW5nVHlwZV9oCisK
K25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOworCisvLyBG
bGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBBZGRp
dGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2Ug
YXJlIHVzdWFsbHkKKy8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0
bHkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFnZSAgICAgICAgICA9
IDE2OyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5IHN0b3JhZ2UgaW4g
dGhlIHBhc3QuCisKKy8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KK3N0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9y
YWdlOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheSAgICAgICAgICAgICAgICAgICAg
PSBJc0FycmF5Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisvLyBNYXNrIG9mIGFsbCBwb3Nz
aWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAgICAg
ICAgICAgID0gMTU7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0
aGUgaGlzdG9yeS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhp
c3RvcnkgID0gMzE7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNv
bnN0IENsYXNzSW5mbyBKU0FjdGl2YXRpb246OnNfaW5mbyA9IHsKIAogSlNBY3RpdmF0aW9uOjpK
U0FjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlKQogICAgIDogQmFzZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkuYWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKSwgY2FsbEZyYW1l
LT5yZWdpc3RlcnMoKSkKLSAgICAsIG1fcmVnaXN0ZXJBcnJheShjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgdGhpcywgMCkKKyAgICAsIG1fcmVnaXN0ZXJBcnJheSgwKQogICAgICwgbV9udW1DYXB0
dXJlZEFyZ3MobWF4KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBmdW5jdGlvbkV4ZWN1dGFi
bGUtPnBhcmFtZXRlckNvdW50KCkpKQogICAgICwgbV9udW1DYXB0dXJlZFZhcnMoZnVuY3Rpb25F
eGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1faXNUb3JuT2ZmKGZh
bHNlKQpAQCAtNjcsMTIgKzY3LDEyIEBAIHZvaWQgSlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCoKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwog
CiAgICAgLy8gTm8gbmVlZCB0byBtYXJrIG91ciByZWdpc3RlcnMgaWYgdGhleSdyZSBzdGlsbCBp
biB0aGUgUmVnaXN0ZXJGaWxlLgotICAgIFByb3BlcnR5U3RvcmFnZSByZWdpc3RlckFycmF5ID0g
dGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5LmdldCgpOworICAgIFByb3BlcnR5U3RvcmFnZSBy
ZWdpc3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5OwogICAgIGlmICghcmVn
aXN0ZXJBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJl
Z2lzdGVyQXJyYXlTaXplSW5CeXRlcygpLCByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZWdp
c3RlckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemUoKSk7Ci0gICAgdGhpc09i
amVjdC0+bV9yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFycmF5LCBTdG9yYWdlQmFycmllcjo6
VW5jaGVja2VkKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFy
cmF5OwogICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHRoaXNP
YmplY3QtPnJlZ2lzdGVyT2Zmc2V0KCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIGFyZ3VtZW50cyBv
YmplY3QsIHNpbmNlIGl0IHBvaW50cyBhdCBvdXIgYnVmZmVyLgpAQCAtMTMxLDcgKzEzMSw3IEBA
IGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3Qp
OwogCkBAIC0xNDYsOCArMTQ2LDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5
TmFtZXMoSgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAg
dGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1l
cwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1w
bGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Owog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CkBAIC05NSw3ICs5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgcmVn
aXN0ZXJBcnJheVNpemUoKTsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRl
cygpOwogCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBl
bmRlbnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3Bp
ZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0
ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0
IG9mIHRoZSByZWdpc3RlciBmaWxlLgogICAgICAgICBpbnQgbV9udW1DYXB0dXJlZEFyZ3M7CiAg
ICAgICAgIGludCBtX251bUNhcHR1cmVkVmFycyA6IDMwOwogICAgICAgICBib29sIG1faXNUb3Ju
T2ZmIDogMTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZm9y
IChpbnQgaSA9IGZyb207IGkgPCB0bzsgKytpKQogICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CiAKLSAgICAgICAgbV9y
ZWdpc3RlckFycmF5LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdpc3RlckFycmF5KTsKKyAgICAg
ICAgbV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICAgICAgbV9yZWdpc3RlcnMg
PSByZWdpc3RlcnM7CiAgICAgICAgIG1faXNUb3JuT2ZmID0gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBv
cC5jb20pCiAgKgpAQCAtNDUsNzEgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1Io
SlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9m
IEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6
Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3Rv
cmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwot
Ly8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZp
ZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2Vy
LCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8v
IChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhG
RkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNp
ZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHBy
b3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlm
ZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkg
PD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3Jl
ZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFu
IGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hp
b246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZh
bHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3Mg
dGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBn
byBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0g
aSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8g
ICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJh
eSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJl
IHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0
Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQg
YmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwg
aSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8v
ICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdl
U2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBs
aW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlv
biBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZh
bHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4g
bWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBN
YWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9J
TkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEg
Yml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGlu
dGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFs
dWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVu
dHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGgg
YSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFT
RV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2Un
bGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlz
IGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZv
ciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8g
Rm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFs
d2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcg
YXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFw
Lgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29u
c3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVj
dDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Ug
a2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jv
d24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFs
dWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMg
Y2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgot
c3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVl
cykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVu
Z3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCiBzdGF0aWMgYm9v
bCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFy
KiBtZXNzYWdlKQogewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKQEAgLTExNyw0MTkgKzU0LDE1
IEBAIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQg
SlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsKLX0KLQot
I2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICB1
bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAgIHVuc2ln
bmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgp
OwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAg
ICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3Rv
cmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3Jh
Z2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0
b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlv
blVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBsYXJn
ZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6
ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNp
emUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0
aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAg
ICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25J
bmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1
ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2Fu
IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJy
YXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5
KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRl
U3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewot
ICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFy
cmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQo
aSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAg
aWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFw
KGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBh
Y2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5
LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFs
d2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2Ug
dGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8v
IGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBz
byByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNF
eHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAg
IGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlm
IChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5C
YXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAg
SlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0g
ICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRh
OwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwot
ICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFs
dWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCBy
ZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVz
dWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAm
IGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0
aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJy
YXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5n
IHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0
ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxl
LiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNv
bnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1
ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpT
T2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlm
ICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5l
IHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0
dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSgh
cmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAg
SlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAg
IGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxE
YXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVj
LCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsK
LX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0
KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7
Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6
OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3Nw
YXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5o
ZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVh
bGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAg
bV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5
TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNl
VmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChn
bG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAg
ICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0
U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9y
YWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJl
IGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRl
LAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNl
dCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBp
KS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3Jh
Z2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NC
YXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5k
ZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6
cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5N
YXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBv
bGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkg
ewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1h
cC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAg
ICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0
dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChk
ZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0
b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0
dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAo
ZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlw
dG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNl
dHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJT
ZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBp
ZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxE
YXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0g
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+
UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0K
LQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVt
ZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQo
aW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAg
ICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSBy
ZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5
IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1
bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJl
bnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBj
dXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBj
b3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAn
U3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3Iu
dmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAg
ICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3du
UHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywg
aW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2Yg
dGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYg
Y3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0
LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRy
dWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
LSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4i
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihE
ZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93
biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tW
YWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1d
IGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0
aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0
cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0
byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUg
YW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3Nv
ciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0s
IFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2
YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2Yg
YW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRo
ZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVs
dCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+
Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAs
IGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+
bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYg
ZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlm
IGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVl
IG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3Bv
bmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUg
YWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBl
bnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8
IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAg
Ly8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMg
dHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJp
YnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWpl
Y3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRo
ZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xl
YW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVy
YWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1l
cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24s
ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlw
dG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVk
LgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
Ly8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3Jp
cHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJy
ZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkg
ewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNj
cmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQg
UCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4g
YWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNv
bnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5k
IFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVy
dHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVz
LgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQ
IG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5
LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29u
dmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQot
ICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0
eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNl
IGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3Io
Y3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgot
ICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3Vy
cmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJs
ZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmku
IFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFu
ZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAg
ICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUg
W1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tW
YWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVh
ZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBl
bHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFu
eSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVz
ZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVs
c2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRv
cihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1Nl
dF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwg
Y3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRl
cigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUg
W1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0
XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5n
ZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1
cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50
LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5
IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXRE
ZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8v
IDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5Ojpz
ZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAg
QVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5n
dGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRp
Y3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAt
PnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMywzNSArMTY2LDcgQEAgYm9vbCBKU0Fy
cmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICByZXR1cm4gYXJyYXktPmRl
ZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
LX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0g
ICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNs
b3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlzT2Jq
ZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewot
ICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3Qp
OworICAgIHJldHVybiBvYmplY3QtPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBi
b29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAt
NjcyLDEwICsxNzcsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
LSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02
ODcsMjYgKzE4OCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkg
ewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAg
ICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZh
bHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0FycmF5Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5
KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7
Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
ICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxl
bmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3Qt
PmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhh
bmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQp
LCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZ
KGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNo
b3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhp
c09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJy
YXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NF
UlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVY
KTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhh
bmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0g
ICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4
dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3Jl
YXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAg
IAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0g
aSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBi
ZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAg
ICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEp
KSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0
IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0g
ICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8g
aG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1
ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAg
ICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hp
Yml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAg
IGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAg
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9y
YWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5
IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNv
LgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNl
TW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRp
b24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkg
fHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAh
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAg
ICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VW
ZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0lu
QXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZl
Y3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0g
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFT
U0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwg
aGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4K
LSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3Qg
ZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBj
cmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0g
ICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxs
IGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAg
ICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsg
MSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2Ug
aXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4K
LSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVj
dG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0
aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7
Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1
dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFBy
b2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAg
ICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24g
b2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAx
OwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBX
ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50
IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJz
ZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2Us
IG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1
ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFz
ZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVz
SW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUg
dmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAv
LyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkK
LSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29s
IEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1ICsy
MTksNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewot
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAg
IGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
LmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
CiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsK
QEAgLTk2NCwxMjcgKzIyNiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29u
c3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVB
cnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNy
ZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQg
YXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVu
dCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9y
TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNl
cnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAg
ICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNp
emVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3Ro
KHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5n
dGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3Ro
LCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92
ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3Ro
LCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkg
ZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3Ro
ICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVu
Z3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMg
Zm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNl
ZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVk
TGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNp
cmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBG
SVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkg
aW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBm
cm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUg
dG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVu
dGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBB
U1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JM
ZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2Fz
ZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFr
ZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQq
IG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZl
Y3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkp
OwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAg
QVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4g
QXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAg
IHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3
IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAg
ICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRl
eEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwg
Jm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1
bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1f
dmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5l
d1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0
b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9j
YXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7
Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50
cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdl
U2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1
cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9j
QmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUg
bmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBu
b3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFT
U0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBl
bnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlT
aXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRs
ZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmlj
czoKQEAgLTEwOTMsOCArMjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQg
c2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAg
KiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUg
dmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBt
aW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0
b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhh
dCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZl
IGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVz
ZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDI3ICsyNjMsMTIgQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3Ro
ID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxl
bmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1f
dmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JM
ZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBt
X3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhC
aWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBk
ZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4o
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRW
ZWN0b3JMZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3JlIGVpdGhl
ciBnb2luZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3ZSdy
ZSBnb2luZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCi0KLSAgICB2b2lkKiBuZXdBbGxvY0Jh
c2UgPSAwOwotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKLSAgICAvLyBJZiB0aGUg
Y3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28g
bGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KLSAgICBpZiAoY3VycmVudENhcGFjaXR5
ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFj
aXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3Rv
cmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRD
YXBhY2l0eTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFz
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IGRlc2lyZWRDYXBhY2l0eTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDM6CiAgICAgLy8gV29y
ayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0aGluZ3MgdG8uCiAKICAgICAvLyBEZXRl
cm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1c2UgYXMgcHJlLWNhcGFjaXR5LCBhbmQg
aG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KQEAgLTExMzYsMjQgKzI4Miw0MCBAQCBib29sIEpT
QXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgICAgIC8vIElmIHdlJ3JlIG1v
dmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNp
dHkgaXMgYmVpbmcgcmVkdWNlZC4KICAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9y
YWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0
aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlc2lyZWRWZWN0b3JMZW5ndGggPSByZXF1
aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBkZXNpcmVkSW5k
ZXhCaWFzOwogCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBv
c3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVj
dG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3Rv
cmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NC
YXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICAvLyBTdGVwIDM6CisgICAgLy8gV2UncmUgZWl0aGVy
IGdvaW5nIHRvIGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3Jl
IGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvbi4KKworICAgIHZvaWQqIG5ld0FsbG9jQmFz
ZSA9IDA7CisgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OworICAgIC8vIElmIHRoZSBj
dXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBs
YXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgorICAgIGlmIChjdXJyZW50Q2FwYWNpdHkg
PiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNp
dHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAvLyBGSVhNRSBkbyB0aGluZ3MK
KyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1faW5kZXhC
aWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3Vy
cmVudENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFj
aXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXNpcmVk
SW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKKyAg
ICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6
dG90YWxTaXplKGRlc2lyZWRJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHksIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihkZXNpcmVkVmVjdG9yTGVuZ3RoKSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVk
Q2FwYWNpdHk7CisgICAgfQorCisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNl
KG5ld0FsbG9jQmFzZSwgZGVzaXJlZEluZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgIG5ld1N0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChkZXNpcmVkVmVjdG9yTGVuZ3RoKTsKKyAg
ICBuZXdTdG9yYWdlLT5tX2luZGV4QmlhcyA9IGRlc2lyZWRJbmRleEJpYXM7CiAKICAgICAvLyBT
dGVwIDQ6CiAgICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxv
Y2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgog
CiAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZl
ciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQogICAgIC8vIHRvIHRoZSBy
aWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNh
bm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9y
ICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBz
dG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9j
YXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7
Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2Uu
Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0gICAgfQor
ICAgIG1lbW1vdmUobmV3U3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0
b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Cisg
ICAgbWVtbW92ZShtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvdXRPZkxpbmVTaXpl
LCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb3V0T2ZMaW5lU2l6ZSwgc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG91dE9mTGluZVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE2
MiwxMyArMzI0LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywK
IHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Cisg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAg
ICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2Rl
LCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0
aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3Jp
dGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWlsIGlm
IHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1Jl
YWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTIyMCw3ICszODIs
NyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsKKyAgICBzdG9yYWdl
LT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM5MSw1NiBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0
aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAK
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlm
ICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBt
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewot
ICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVTbG90
LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAg
aWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOwor
ICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2
YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAgIEFT
U0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
fQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxl
dGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgot
ICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBp
bmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlm
ICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBD
YWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5n
dGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVl
KTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4
ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBh
cmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc1
LDM5ICs0NDksNTMgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogdm9p
ZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBGYXN0IGNh
c2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZh
bHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwot
ICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZl
Y3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAobGVu
Z3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGlu
ZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0
aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0
aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAg
ICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgor
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVu
Z3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFu
ZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0
cnVlLCBzdG9yYWdlKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkg
b2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2Ug
ZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1
KSkgewotICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3Jh
Z2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQu
NyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0g
ICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0
YXRlKiwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZSgpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBv
ciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5l
cmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KQEAgLTEzMTgsMTggKzUwNiwxOCBAQCBi
b29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0g
ICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9s
ZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAg
ICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZl
Y3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25l
ZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAg
ICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0
aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7
Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6
ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJh
eVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkg
eworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBtX2luZGV4QmlhcyArPSBj
b3VudDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMzksNTkgKzUyNywyOSBAQCBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVu
c2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFy
cmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9y
IGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVy
aWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3Ro
ICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2Rl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3Vu
dCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFz
ZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3Jh
Z2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBt
X3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0g
Y291bnQpIHsKKyAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPnVuc2hpZnQoc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJp
YXMgLT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93
Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVG
bGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRo
b3V0U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVj
dDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRo
aXNPYmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFn
ZS0+bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5t
X3ZlY3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0
b3ItPnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChi
YXNlU3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAg
ICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJh
eVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFs
dWUpICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJU
KHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNl
VmFsdWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3Rh
dGljIGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5h
c051bWJlcigpOwpAQCAtMTQxMCwxMTAgKzU2OCwxMzUgQEAgdm9pZCBKU0FycmF5Ojpzb3J0TnVt
ZXJpYyhFeGVjU3RhdGUqIGV4ZQogewogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwogCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJl
cigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5t
X3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVt
YmVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAg
ICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGlj
aCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8v
IGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mg
bm8gdXNlciB2aXNpYmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhl
IG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2Ut
Pm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51
bWJlcnNGb3JRU29ydCk7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYg
KCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJl
RnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21w
YXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdl
Ci0gICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2Ug
dGhlcmUncyBubyB1c2VyIHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5n
IHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2Ut
Pm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51
bWJlcnNGb3JRU29ydCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNo
ZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBB
U1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
aWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNj
cmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNl
IHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNp
ZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0
aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lk
ZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBj
dXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhl
cndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rp
b24gaW5jb25zaXN0ZW50LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewot
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsK
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5m
aXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9u
IHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFp
c2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9y
KCZ2YWx1ZXMpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBT
aW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0
byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgLy8gdGhh
biBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBh
Y3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5zdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5t
X3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4g
YmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9u
IHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3Zl
ciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFy
Z2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1
cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRo
b2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcg
cmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50
LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsK
KyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVz
aFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQo
IXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFs
dWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0
b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9T
dHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAg
ICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5l
KGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0
IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAg
ICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAg
ICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVn
aW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0
cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJl
Z2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlT
dHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
KQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVv
ZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlr
ZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMg
bm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJm
b3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5
IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2Vz
IG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVy
Zm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVz
LnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JR
U29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2Vk
IHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3Jl
YXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFs
dWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3Ro
ID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBj
aGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRv
IGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYg
KHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7
CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5s
ZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAg
ICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsg
aSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk2LDE0
OCArNzc5LDE4MyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiB2
b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlv
biwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBB
U1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRo
IGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29k
Ci0gICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVChtX3N0b3Jh
Z2UtPm1fbGVuZ3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5t
X2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRW
ZWN0b3JMZW5ndGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAtPnNpemUo
KSA6IDApOwotCi0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFW
TFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0
aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4
ZWMgPSBleGVjOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29t
cGFyZUZ1bmN0aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0g
Y2FsbFR5cGU7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2Fs
bERhdGE7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7Ci0K
LSAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpT
RnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIg
dXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51
bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcg
dW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJl
ZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRd
LmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFs
dWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9u
IG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBk
ZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8g
Z29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFT
U0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3Rv
cmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUs
IDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVu
Y3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMg
dGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAg
ICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRy
ZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAg
ICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRl
cmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVu
ZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUu
CisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZp
bmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZp
bmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
W251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmlu
ZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVm
aW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAg
ICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICArK251
bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBu
dW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgp
OwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFy
cmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlm
ICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRW
ZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAg
ICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7
CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAg
ICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgeworICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJy
YXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAg
IGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JM
ZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1E
ZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAg
ICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVm
aW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0
ZVNwYXJzZU1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0cmVl
Lmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1E
ZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0
IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAgICAg
ICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAg
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0
b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0K
LQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAvLyBQ
dXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAvLyBF
bnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8v
IEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhl
IGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0
b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3Rv
cmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46
Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5k
ZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVz
IGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9z
dG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3ko
U29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4
ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBt
aW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0g
MDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAg
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAg
ICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5
VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMy
X3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAg
IFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25l
ZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkg
PCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2
ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVu
Z3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9y
RW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3Rv
cltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxs
RnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFt
ZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6
Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTc0NSwxMDMg
Kzk2Myw3MSBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsCiAgICAg
QVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+
bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAw
OwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3IgKDsgbnVtRGVmaW5l
ZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYg
PSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8
IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
ICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAg
ICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVk
ID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVj
dG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRW
ZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMg
cG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRo
ZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBi
eSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
bmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytp
KQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVj
a0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZp
bmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAo
dHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZh
bHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5k
ZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRl
ZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVt
VW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGgg
Kz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBp
dCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBh
bGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCisgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlz
IHRocm93biBieSBjYWxsZXIuCisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9
Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0
aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAg
ICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Bh
cnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9y
YWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5n
dGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5v
blNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9i
amVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEs
MTQwICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNp
bmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50
cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBh
dHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJh
eSopIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUg
Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgfTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50
NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFw
OwotCi0gICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAg
ICAgICAgIFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIs
Ci0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRv
ciBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAg
ICBib29sIHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIFNwYXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1f
ZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNS
ZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3Ro
SXNSZWFkT25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25s
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4o
bV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhl
c2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBh
ZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VS
VCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAg
ICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAg
ICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAg
ICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0K
LSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5j
b250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRp
b24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAg
ICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAg
IH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9m
IGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJy
YXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNj
ZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdl
KCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRv
IG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhh
dCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBU
aGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAv
LyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBz
dHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAi
bGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFz
ZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9l
cyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRy
X3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6
YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247
Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9y
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0K
LSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3Mg
SlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0
IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0g
ICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQot
ICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJy
YXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Fy
cmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0Nl
bGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlD
cmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5
cyB3aG9zZSBzaXplIGFuZApAQCAtMTY3LDI1ICs1NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
Ly8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgot
ICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAg
ICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhv
ZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxl
IGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVj
dEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIGdldEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sg
dG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRj
aEFycmF5LgogICAgICAgICBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKIApAQCAtMTk5LDk5ICs3NSwyOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8
IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNW
YWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
Y2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
ICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3Jh
Z2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAg
ICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRl
eCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNl
dCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAg
Ly8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJl
ciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGlu
ZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVu
eSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1i
ZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1f
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1
cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBm
aWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5n
dGgpOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9y
YWdlT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0FycmF5LCBtX3N0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNH
bG9iYWxEYXRhJik7Ci0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgp
OwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAg
ICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAg
ICAgIH0KIApAQCAtMzAxLDQwICsxMDcsNTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZvaWQgZGVhbGxv
Y2F0ZVNwYXJzZU1hcCgpOwogCi0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9y
TGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVj
dG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJv
b2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwog
ICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRh
Jik7Ci0KLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3Rl
bmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVj
ayB9OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUg
PSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBtX3ZlY3Rvckxl
bmd0aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1bnNpZ25lZCBt
X2luZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2NrcyBiZWZvcmUg
QXJyYXlTdG9yYWdlLgotICAgICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsKLQotICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUgcHV0IGludG8g
aXRzIG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFs
dWVNYXA7Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KICAgICB9OwogCisgICAgaW5saW5l
IEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAs
IGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNl
TWFwID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisjaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IDA7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGJ1dHRlcmZseTsKKyAgICB9CisKICAgICBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAg
YXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEs
IGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUg
SlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQog
ICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVk
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBp
ZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5
Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwor
ICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNB
cnJheShKU1ZhbHVlKTsKQEAgLTM1MywzMCArMTc1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
aW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJ
bmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShK
U1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9
CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVw
ZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAt
IHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0
IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXpl
b2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAo
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0g
MHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZG
RkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMg
aGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBp
bnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFy
Oi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAw
MFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVk
IGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAg
ICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93
IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRl
ZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5
IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2Up
IC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3Qm
IHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2Vs
bDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogVVN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNjAsNiAr
MTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9u
cyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGlu
IHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShj
b25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAg
ICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVF
X1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBVU3Ry
aW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJ
bnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBl
UHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3LDcgQEAgYm9v
bCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0
KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEpTRnVu
Y3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAg
ICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsx
NDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVw
IHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4g
IFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0
byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBw
ZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0
aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmpl
Y3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwt
PnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzkxLDcxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRD
bGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVj
dDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0
b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpT
T2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Cisg
ICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSAhPSBCdXR0ZXJmbHk6
OmVtcHR5U2luZ2xldG9uKCkpOwogICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CiAgICAgCi0gICAg
c2l6ZV90IGNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAg
QVNTRVJUKGNhcGFjaXR5KTsKLSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdl
IGJhc2VPZlN0b3JhZ2UgPSBzdG9yYWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9y
LmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5
SW5CeXRlcykpIHsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBh
Y2l0eUluQnl0ZXMpKTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCYXNlT2ZTdG9yYWdlICsgY2FwYWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlID0gY3VycmVudFRhcmdldCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJy
ZW50U291cmNlID0gc3RvcmFnZSAtIDE7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlz
LT5zdHJ1Y3R1cmUoKTsKKyAgICBJbmRleGluZ0hlYWRlciYgaGVhZGVyID0gKmJ1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKTsKKyAgICAKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSBo
ZWFkZXIucHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMgPSBoZWFkZXIuaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJl
KTsKKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisg
ICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndp
c2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVEdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBz
dG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBz
dG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1j
dXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAg
ICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdl
QmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVy
RnJvbSgqc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNl
ID0gc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgZm9yIChz
aXplX3QgY291bnQgPSBuZXdTdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291
cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOworICAgICAgICAg
ICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBuZXdTdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE1h
cmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2Ut
PnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yLCBzdG9yYWdlLT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KQorICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCkBAIC0xMjIsOSArMTY5LDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZM
aW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZs
eSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxP
YmplY3QoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247CkBAIC0xNDIsOSArMTg5LDkgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0
T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZs
eSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmpl
Y3QoKSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwx
MCArMjA4LDQ4IEBAIFVTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamUKICAg
ICByZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdy
ZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0
IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVy
dHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYgKGkgPD0gTUFYX0FSUkFZX0lOREVY
KSB7CisgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKIH0KIAog
Ly8gRUNNQSA4LjYuMi4yCkBAIC0xNzQsNiArMjU5LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVh
cDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2Jq
ZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwg
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBD
aGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBl
IGNoYWluCiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzI3LDE0MiBAQCB2b2lk
IEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQo
dGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2
YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7
CisgICAgCisgICAgaWYgKFVOTElLRUxZKGkgPj0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5
OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRh
dGUgbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIGlm
IChpID49IGxlbmd0aCkgeworICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAKKyAgICAgICAg
dmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPmNoZWNr
Q29uc2lzdGVuY3koKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICBpZiAoIW1hcCkKKyAg
ICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKworICAgIGlm
IChtYXAtPnNwYXJzZU1vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFwLT5zZXRTcGFy
c2VNb2RlKCk7CisKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pmxlbmd0aCgpLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBu
ZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisg
ICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRo
ZW0uCisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0
ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fc3RvcmFnZS0+cmVzaXplQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIDAsIDApOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAg
ICBDUkFTSCgpOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5l
d0J1dHRlcmZseS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9y
TGVuZ3RoKDApOworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworfQorCit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0
ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVChvbGRUeXBlID09IE5vbkFycmF5
IHx8IG9sZFR5cGUgPT0gQXJyYXkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkp
CisgICAgICAgIENSQVNIKCk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChs
ZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAg
cmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFs
aXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJh
eVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZF
Q1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1v
ZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQpAQCAtMzA0LDYgKzUyOSwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlm
ICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTYx
LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1
cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5
OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKHZh
bHVlU2xvdCkgeworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAg
ICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtYXAt
PnJlbW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtNDY1LDYg
KzcyOSw1MSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAKIHZv
aWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CisgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBmaXJzdC4gVGhhdCBh
cHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgorICAgIC8vIEZJWE1FOiBGaWxs
aW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdl
cgorICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2Ug
bmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKKyAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5
IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCisgICAg
c3dpdGNoIChvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGtleXM7CisgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
IHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAg
ICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6c29ydChrZXlzLmJlZ2lu
KCksIGtleXMuZW5kKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwor
dm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQorewogICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhleGVjLCBv
YmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBvYmplY3QtPnN0YXRpY0Z1
bmN0aW9uc1JlaWZpZWQoKSk7CiAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KQEAgLTUxNSw4ICs4MjQsNyBAQCB2b2lkIEpTT2JqZWN0OjpmcmVlemUoSlNHbG9iYWxE
YXRhJiBnbG9iCiAKIHZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoaXNKU0FycmF5KHRoaXMpKQotICAgICAgICBhc0Fy
cmF5KHRoaXMpLT5lbnRlckRpY3Rpb25hcnlNb2RlKGdsb2JhbERhdGEpOworICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICBpZiAoaXNFeHRlbnNpYmxlKCkp
CiAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRl
bnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOwogfQpAQCAtNTczLDEx
ICs4ODEsMTEgQEAgYm9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0KEpTR2xvYmFsRGF0YQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIGxvY2F0aW9uKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGxvY2F0aW9u
LT5nZXQoKSktPmdldHRlcigpKSB7CisgICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9
IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdE9mZnNldChvZmZzZXQpKS0+Z2V0dGVyKCkpIHsKICAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzbG90
LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldEZvckxv
Y2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNs
b3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7CiAgICAgfSBlbHNlCkBAIC02
MDMsMjYgKzkxMSw1MjIgQEAgU3RydWN0dXJlKiBKU09iamVjdDo6Y3JlYXRlSW5oZXJpdG9ySUQo
SgogICAgIHJldHVybiBpbmhlcml0b3JJRDsKIH0KIAotUHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0
Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3ZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0
b3IpCiB7Ci0gICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICBpZiAoZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkK
KyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGRl
c2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRy
aWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcikgJiB+QWNjZXNzb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCogc2V0
dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAg
ICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgc2V0
dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0
ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChn
ZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0
cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0
cmFuc2l0aW9uLgorICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7
CisgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOworfQorCisvLyBEZWZpbmVkIGluIEVTNS4xIDgu
MTIuOQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7CisK
KyAgICBpZiAoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKKyAgICAgICAgLy8gRmFzdCBjYXNl
OiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYg
YXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQorICAg
ICAgICAvLyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3Npbmcg
YXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKKyAgICAg
ICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQg
YSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KKyAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRocm93RXhjZXB0
aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKwor
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXA7CisgICAgQVNTRVJUKG1hcCk7CisKKyAgICAvLyAxLiBMZXQgY3VycmVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOworICAgIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAg
ICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8uCisgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmlu
ZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgorICAgIC8vIDQuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KKyAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAg
ICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNj
cmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Cisg
ICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxl
XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMK
KyAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXds
eQorICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1
ZS4KKyAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVy
dHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQ
IG9mCisgICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVy
YWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJl
ZCBieQorICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxk
IG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHBy
b3BlcnR5CisgICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAg
Ly8gNC5jLiBSZXR1cm4gdHJ1ZS4KKworICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVs
dHM7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBSZWFkT25seTsKKyAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKKwor
ICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9y
LCBkZWZhdWx0cyk7CisgICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQor
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgYWJzZW50LgorICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk
IGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAo
OS4xMikuCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7CisgICAgZW50cnlJbk1hcC0+
Z2V0KGN1cnJlbnQpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9y
LmVxdWFsVG8oZXhlYywgY3VycmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
Ny4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVu
CisgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgIC8vIDcuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUg
W1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJh
YmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9u
IG9mIGVhY2ggb3RoZXIuCisgICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50
KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7CisgICAgfQorCisgICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBp
cyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAo
IWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CisgICAgICAgIC8vIDkuIEVsc2Us
IGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
aGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgorICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
ICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gZnJvbSBhCisgICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHBy
b3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJv
cGVydHkncworICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxl
XV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0
ZXMgdG8KKyAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAg
Ly8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZy
b20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgorICAgICAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5
J3MgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KKyAgICAgICAgICAgIC8vIGF0
dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRh
RGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAg
ICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCisgICAgICAgICAgICAvLyAxMC5h
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVu
CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3Jp
dGFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndy
aXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAg
ICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2Yg
RGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tW
YWx1ZV1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
ICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRh
YmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNl
dHRlclByZXNlbnQoKSk7CisgICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRy
dWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Us
IHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBp
cyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAm
JiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAg
ICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1d
KSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDEyLiBGb3IgZWFjaCBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9u
ZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4
ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOworICAgIC8vIDEzLiBSZXR1cm4g
dHJ1ZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVjdDo6ZmluYWxpemVBcnJh
eURhdGEoSlNDZWxsKiBjZWxsKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3Rl
bmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICB0aGlzT2JqZWN0LT5kZWFsbG9j
YXRlU3BhcnNlSW5kZXhNYXAoKTsKK30KKworU3BhcnNlQXJyYXlWYWx1ZU1hcCogSlNPYmplY3Q6
OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwor
ICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCA9IHJlc3VsdDsKKyAgICBnbG9iYWxEYXRh
LmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplQXJyYXlEYXRhKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIEpTT2JqZWN0OjpkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKQor
eworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAg
IGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGRlbGV0ZSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcDsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7Cit9CisKK3ZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5k
ZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8
PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9v
dXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0
b3JhZ2UgPSAwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwOwogCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFrZSBH
Q0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlwZS1w
dW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsKLSAg
ICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBDUkFTSCgpOwot
ICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVt
cCkgKyBuZXdTaXplICsgMTsKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRv
bid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7
CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhh
dmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisg
ICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3Bl
cnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0g
MSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgICAg
IC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKwor
ICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEg
dmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElL
RUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAg
ICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2Vs
eSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAg
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQg
dGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisg
ICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwot
ICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7CisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlm
IG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAg
ICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJy
YXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNS
ZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRo
cm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5n
dGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVj
ayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBj
b250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0
b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNp
Z25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1h
cC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZv
clZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0
aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywg
dGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0
ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAg
IC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVs
ZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0
LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRo
ZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBN
QVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5z
dXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2Jh
bERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoaSAr
IDEsIGdldE5ld1ZlY3Rvckxlbmd0aChpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4
ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8g
aSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1
cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBBU1NF
UlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gbV9zdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMg
d2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtF
TFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3
ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNw
YXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisg
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2
ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtF
TFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5
IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAg
c3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBo
b2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVl
LgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nh
cnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkg
Pj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxl
bmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHko
KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgo
bGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0g
Y2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdp
bGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEg
dmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAg
dW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
KyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gbWFwLT5w
dXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKworICAgIC8vIFJl
cmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZh
bHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkg
YWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBt
YXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3Rv
cjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAg
ICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJv
cGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAg
QVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJh
eTogeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywg
Y3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBj
cmVhdGVBcnJheVN0b3JhZ2UoaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCBpICsgMSkpOwor
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnRShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRMZW5n
dGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRM
ZW5ndGg7CisgICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihjdXJyZW50TGVuZ3RoLCAx
MDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAg
ICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghbV92ZWN0
b3JMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBs
YXN0QXJyYXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1
aXZhbGVudCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICog
MyArIDEpIC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9y
bSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExl
bmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVu
Z3RoICYgMSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVk
TGVuZ3RoKTsKKworICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJT
VF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmpl
Y3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHJl
dHVybiBnZXROZXdWZWN0b3JMZW5ndGgoZ2V0QXJyYXlMZW5ndGgoKSwgZGVzaWduZWRMZW5ndGgp
OworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJl
Y2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAor
ICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBi
ZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWdu
ZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+
IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVj
dG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBw
cmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlm
IChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAg
IGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRv
bWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVu
c2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9h
cmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCisgICAgdW5z
aWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFz
OworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJl
c2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBpbmRleEJpYXMsIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9y
TGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3
VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
KyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4
QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
Cit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVj
a1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VP
clplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3Rv
cmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFT
U0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3Ro
KCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2sp
CisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNo
IGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJ
blZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRD
b25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1
ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQo
bnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3Bh
cnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZp
cnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNT
RVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNp
c3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRl
YWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQor
eworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFu
dCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJv
cGVydHkKKyAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0
ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkt
Pmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5l
d1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0MzQsNDYgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmli
dXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0
ID09IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC03MDQsMjYgKzE1NDQsMjYgQEAgcHJpdmF0ZToKICAg
ICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRo
cm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBUcmFjayBv
biB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBD
dXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRp
ZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hl
biBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNv
bmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVs
ZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAg
ICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAgIC8vIElm
IHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAgICAgIC8v
IHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2JqZWN0LT5p
c0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAg
ICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRv
cjsKICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAg
aWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE1ODksOCBAQCBib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0
b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3Bl
cnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CiAgICAgICAg
IGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRp
bmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NjIsOCArMTYw
Miw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3Jp
cHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAg
ICAvLyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJv
cGVydHkKQEAgLTc4NCw4ICsxNjI0LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVh
bChkZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJy
ZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9m
IGFuIGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY0Miw3IEBAIGJvb2wg
SlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2JqZWN0LT5n
ZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUg
YWNjZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJTZXR0
ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgxMiwxMiAr
MTY1MiwzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAg
ICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRv
ci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2Ny
aXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBtZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVu
c2lnbmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3Vy
cmVudCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAgICBwdXRE
aXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0
dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRl
eCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBp
bmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJu
YWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJn
dW1lbnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAg
ICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVu
RGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBk
ZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24g
QSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBU
aGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0
cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhl
YywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisg
ICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNs
b3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNCwxNyArMjQsMjEgQEAKICNkZWZpbmUgSlNPYmplY3RfaAogCiAjaW5jbHVkZSAiQXJn
TGlzdC5oIgorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJBcnJheVN0
b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIK
ICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgorI2luY2x1ZGUg
IlByb3BlcnR5U3RvcmFnZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogI2luY2x1
ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4MywxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkg
aXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBG
aXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElM
RV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19i
ZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RGVs
ZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19GaXJzdElu
dGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUp
OworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwg
QWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBK
U0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAg
LTk2LDYgKzEwNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZmluYWxp
emVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTEy
MCw4ICsxMzMsMTc2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNj
ZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgo
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2lt
aWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90
eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBu
b3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0
aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNl
dCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0g
dHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9w
ZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNp
Z25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvcltp
XS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAg
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxp
emluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQo
aSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8v
IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGlu
aXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBp
bml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAg
ICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0
aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBu
ZXdMZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRp
ZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xv
YmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNo
ZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBw
cm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyOCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0
YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJv
cGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2Up
IGNvbnN0OwpAQCAtMjAzLDggKzM4NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVy
biBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91
dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAg
ICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRl
cmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVy
Zmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9
CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9i
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDEyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNl
dEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBs
b2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDU0LDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJl
dHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZv
aWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAg
ICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFn
ZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jv
d091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVy
Zmx5KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFu
ZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xk
Q2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAg
ICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAg
dm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVj
dHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NzMsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9m
ZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNP
YmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCog
YnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0
ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUwNSw2NCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0Zp
bmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91
IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJ
REtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVT
dG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUp
OworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9y
YWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ug
a25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQorICAg
ICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBh
Y3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3QgaXMgaW4gYSBt
b2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFy
cmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhl
IG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQorICAg
ICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3Vs
ZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRv
IGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAgICAgLy8gYWxy
ZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMzM2LDE3ICs1NzUsNDUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNPYmplY3QoKTsKICAgICAgICAgdm9pZCBpc1N0cmlu
ZygpOwogICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJh
eVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgICAg
IGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgICAg
ICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0
ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
bG9jYXRpb24pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKIAogICAgICAg
ICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpT
R2xvYmFsRGF0YSYpOwotCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFn
ZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRl
KiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3Jp
cHRvciYgb2xkKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0
YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24p
OworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpT
R2xvYmFsRGF0YSYpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworICAgICAgICB2b2lkIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1
bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAg
ICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3
TGVuZ3RoKTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29u
c2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5j
eUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHZvaWQgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lz
dGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spOworI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3Bl
cnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5Owor
ICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZv
aWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjM5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
SlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisg
ICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAg
ICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzIzLDYgQEAgaW5saW5lIHNpemVfdCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5h
bE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVj
dDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzUzLDEyIEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNT
RVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdl
KSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7
CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs3OTYsOSBAQCBpbmxpbmUgSlNP
YmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVl
LmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0
dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NDYsMTcgQEAgaW5saW5lIEpT
T2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5o
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkp
Ci0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOwor
ICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2
YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xv
dChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3du
UHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBt
YXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5
IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NDIsNyBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQo
dmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAg
ICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6
OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFy
eSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5
NzEsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAg
ICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0g
b3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1f
YnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUo
KS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAg
bmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxp
bmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHko
Z2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRh
dGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICs5ODksMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXpl
X3QgY3VycmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENh
cGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5l
d1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNp
dHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHks
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdl
LCBzdHJ1Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRp
b25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAg
ICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAz
LDkgKzEwNjIsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3Jh
Z2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwg
bmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAg
LTgzOSwxMSArMTA5OCwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xv
YmFsCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3Rv
cmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jv
d091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9m
TGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAg
c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAg
IHB1dERpcmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1
LDYgKzExOTQsMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAog
ICAgIHJldHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8g
VGhpcyBpcyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0
IGEgbG9hZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZz
ZXRzOiBhIHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0
MywxMyArMTIwNywxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVy
Zmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAt
OTU3LDcgKzEyMjEsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlP
CiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVy
biBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBAIC02NSw3ICs2
NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkKICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7
CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgCiAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFt
aWNDaGVja3MpIGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAog
ewogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zm
c2V0KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQg
LSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUg
c2l6ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gK
KworI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNv
bnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDExICsxMTQsMTEgQEAgYm9vbCBSZWdFeHBP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJl
Z0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAor
I2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIlByb3BlcnR5RGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1
Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAg
IHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVu
dHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBK
U09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAg
IHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0Tm9u
U3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKK307CisKK2Ns
YXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwg
U3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsK
KyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExl
bmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIE1hcDo6
aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCisgICAgICAg
ICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdz
PihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRP
bmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsK
KyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAg
bV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7
CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBv
ZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
QWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVyYXRvciBmaW5kKHVu
c2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBUaGlzIHNob3VsZCBB
U1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCku
CisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQorICAg
IHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9CisKKyAgICAvLyBU
aGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCisgICAg
aXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgY29udGFp
bnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQorICAgIC8vIE9ubHkg
YWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIE1hcCBt
X21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVN
YXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lm
bmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVN
YXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpB
ZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWdu
ZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0
eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAg
SGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3Jl
cG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwg
d2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5j
b21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMg
bm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhh
dmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYg
IWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsK
KyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAg
aWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJh
eSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3Nv
ciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRl
cigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5z
ZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxl
KCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVy
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkm
IGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2Vw
YXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4K
KyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHks
IGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhl
IHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1v
dmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRU
aHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5v
dCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAg
IGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNs
b3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAg
IEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigp
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRl
cigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFz
ZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVu
dHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAg
IGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5n
ZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRl
ci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0
dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5l
bXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5v
blNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0
dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9
IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VC
YXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Rv
cmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VC
YXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7
Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9y
YWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3Bl
cnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9y
YWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBV
bmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFn
ZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBu
ZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3Rv
cmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1
cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1f
c3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVy
biBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4gIW1fc3RvcmFn
ZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2
b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEs
IGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0
eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmd0eXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpT
R2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwg
dGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYg
KzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVj
dHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChD
cmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90
eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5m
bykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykK
QEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50
eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHBy
ZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5t
X2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRX
YXRjaGluZykKQEAgLTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZl
bnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnRyeVRyYW5zaXRpb24gdHJhbnNpdGlvbikK
K3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb24pOwor
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb24pOworICAgIAorICAg
IGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1Ry
YW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0gYXR0cmlidXRlcyk7CisgICAgICAg
IEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0g
YXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlw
ZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAgICAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29w
eShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6
ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVy
dHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAgICAgICAgdHJh
bnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICB9Cisg
ICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1dHVyZSB3ZSBt
YXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVk
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNU
eXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRl
eGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVU
cmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogCiAgICAg
ICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wgaXNGcm96ZW4o
SlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0KICAgICAgICAg
Ym9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQog
CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZTsg
fQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsg
bV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KQEAg
LTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBAIC0zNjMsNyAr
MzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdU
eXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00MTYsNiArNDI1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhT
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJbmZvIG1fdHlw
ZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICAgICAgCiAg
ICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3ICs0NTcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3BlcnRp
ZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiA3
OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7CiAgICAgICAg
IHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAgICAgICAgdW5z
aWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZGlkVHJh
bnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgICAg
ICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNz
SW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5n
VHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5n
LmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xh
c3MgU3RydWN0dXJlOwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJp
YnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8g
ZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCisKKy8vIFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMg
dXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBwcm9wZXJ0aWVzLgor
Ly8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24gb2YgdGhlIGtl
eSBzaG91bGQgYmUgMC4KK2VudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0
ZUFycmF5U3RvcmFnZQorfTsKKworaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gdHJhbnNpdGlvbiArIEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGU7Cit9CisKK2lubGluZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhp
bmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNp
dGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQXJy
YXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewog
ICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161059</attachid>
            <date>2012-08-28 14:23:29 -0700</date>
            <delta_ts>2012-08-28 17:49:05 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_24.diff</filename>
            <type>text/plain</type>
            <size>362940</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2OTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1NyBA
QAorMjAxMi0wOC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJv
ZmlsZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6YXJyYXlNb2RlRnJvbVN0cnVj
dHVyZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1v
ZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJp
bmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbkJv
dW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAg
ICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlW
YWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHV0
QnlWYWwpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUmVw
YXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1
Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6
REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0UmVw
bGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdl
dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlk
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QWxs
b2NhdGVKU0FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVj
dE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpT
Qzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJheSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hl
YWRlckZvckFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNK
b2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTb3J0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUmVkdWNlUmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
aDoKKyAgICAgICAgKEFycmF5UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9BcnJheVN0b3JhZ2UuaDog
QWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmJ1dHRlcmZseSk6Cisg
ICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlND
OjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3Jh
Z2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpj
b3B5SGVhZGVyRnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5TcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5k
ZXhCaWFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNpemVGb3IpOgorICAgICAgICAqIHJ1
bnRpbWUvQnV0dGVyZmx5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEJ1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21C
YXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKToK
KyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZkF1eFdvcmQpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpp
bmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleGluZ1BheWxvYWQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4
T2ZQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAg
ICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbik6CisgICAgICAgIChKU0M6OkJ1
dHRlcmZseTo6YmFzZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
Ojp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpzaGlmdCk6CisgICAgICAgICog
cnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKE1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChJbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mQXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpv
ZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hl
YWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpsZW5ndGgpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OmF1eFdvcmQpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXV4V29y
ZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmJ1dHRlcmZseSk6CisgICAg
ICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkpOgor
ICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQWN0aXZhdGlvbik6Cisg
ICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dGVhck9mZik6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNldExl
bmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291
bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnQpOgorICAgICAgICAoSlND
OjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvbXBhY3RGb3JT
b3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6SlNBcnJheSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmlzTGVuZ3RoV3JpdGFibGUpOgor
ICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0SW5kZXhlZERl
c2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbkdldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppbml0
aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJbml0aWFsaXph
dGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5nTW9kZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JM
b2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9y
YWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAg
ICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5CdXR0ZXJm
bHkpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVs
YXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAg
ICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zm
c2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4
cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVnRXhw
TWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBP
YmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VB
cnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJz
ZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdlQmFy
cmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorCiAyMDEyLTA4LTI4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNv
bT4KIAogICAgICAgICBQdXRCeUlkIHVzZXMgRGF0YUxhYmVsMzIsIG5vdCBEYXRhTGFiZWxDb21w
YWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgog
CiAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBKU1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwog
CiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlND
YWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2Jq
ZWN0KTsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcg
KzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2
NCw3ICs1NjQsNiBAQAogCQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3
NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVy
ZmFjZUpJVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkY1NEEyMTNCMjhBQUIw
MEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLzsgfTsKLQkJQTc4MUUzNTkxNDE5NzBDNzAw
MDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJp
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzg0QTI2MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8q
IEFTVEJ1aWxkZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3
QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMw
MERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKQEAgLTEzNDEsNyArMTM0
MCw2IEBACiAJCUE3NjdGRjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAv
KiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lu
dGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4
QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpJVFdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgxMTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVB
MTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNU
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhE
MDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjA0
LDcgKzIyMDIsNiBAQAogCQkJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBTY29wZUNoYWlu
TWFyay5oICovLAogCQkJCTkzMzAzRkU4MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3Mu
Y3BwICovLAogCQkJCTkzMzAzRkVBMEU2QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAq
LywKLQkJCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywK
IAkJCQlBNzMwQjYxMTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3Bw
ICovLAogCQkJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlv
bi5oICovLAogCQkJCUJDMThDM0MwMEUxNkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAgKi8sCkBAIC0yNzYwLDcgKzI3NTcsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4
NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFn
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAv
KiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2
RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJh
eVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTYgKzM1LDE2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKKy8vIFRoaXMgaXMgYSBiaXRm
aWVsZCB3aGVyZSBlYWNoIGJpdCByZXByZXNlbnRzIGFuIEluZGV4aW5nVHlwZSB0aGF0IHdlIGhh
dmUgc2Vlbi4KKy8vIFRoZXJlIGFyZSAxNyBpbmRleGluZyB0eXBlcyAoMCB0byAxNiwgaW5jbHVz
aXZlKSwgc28gMzIgYml0cyBpcyBtb3JlIHRoYW4gZW5vdWdoLgogdHlwZWRlZiB1bnNpZ25lZCBB
cnJheU1vZGVzOwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgSXNOb3RBcnJheSA9IDE7Ci1zdGF0
aWMgY29uc3QgdW5zaWduZWQgSXNKU0FycmF5ICA9IDI7CisjZGVmaW5lIGFzQXJyYXlNb2Rlcyh0
eXBlKSBcCisgICAgKDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpKQogCiBpbmxpbmUg
QXJyYXlNb2RlcyBhcnJheU1vZGVGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewotICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCi0g
ICAgICAgIHJldHVybiBJc0pTQXJyYXk7Ci0gICAgcmV0dXJuIElzTm90QXJyYXk7CisgICAgcmV0
dXJuIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSk7CiB9CiAKIGNsYXNzIEFycmF5UHJvZmlsZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5NCw4ICs4OTQsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2
YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2Uu
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpA
QCAtOTU2LDEwICs5NTUsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMzg2LDcgKzEzODUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0
KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBt
X2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xNDA0LDggKzE0MDMsNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJp
bmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIg
YW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAg
ICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2Ug
ZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFy
cmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVz
KSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBj
YXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBh
c0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAg
ICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2lu
ZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2Vm
dWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1
c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hl
Y2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBy
ZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoK
KyAgICBjYXNlIE5PTl9BUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0U6CiAgICAgICAgIHJldHVybiB2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAg
JiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygp
ID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdl
KTsKKworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFOgorICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAg
ICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIGlzQXJn
dW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKQEAgLTE3NCwxMCArMTgyLDE4IEBAIGNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJG
b3JjZUV4aXQiOwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuICJTdHJp
bmciOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheSI7
Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkpT
QXJyYXlPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gIkFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJh
eVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKICAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEyIEBAIGVu
dW0gTW9kZSB7CiAgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVh
IGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVw
LgogICAgIEdlbmVyaWMsCiAgICAgU3RyaW5nLAotICAgIEpTQXJyYXksCi0gICAgSlNBcnJheU91
dE9mQm91bmRzLAorICAgIEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cywKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHMsCisgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UsCisgICAgUG9z
c2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKICAgICBBcmd1bWVudHMsCiAg
ICAgSW50OEFycmF5LAogICAgIEludDE2QXJyYXksCkBAIC02MSw2ICs2NSwyOSBAQCBlbnVtIE1v
ZGUgewogfTsKIH0gLy8gbmFtZXNwYWNlIEFycmF5CiAKKy8vIEhlbHBlcnMgZm9yICdjYXNlJyBz
dGF0ZW1lbnRzLiBGb3IgZXhhbXBsZSwgc2F5aW5nICJjYXNlIEFsbEFycmF5U3RvcmFnZU1vZGVz
OiIKKy8vIGlzIHRoZSBzYW1lIGFzIGhhdmluZyBtdWx0aXBsZSBjYXNlIHN0YXRlbWVudHMgbGlz
dGluZyBvZmYgYWxsIG9mIHRoZSBtb2RlcyB0aGF0CisvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0
b3JhZ2UiIGluIHRoZW0uCisjZGVmaW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCisjZGVmaW5lIEFMTF9BUlJB
WV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJS
QVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNh
c2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlT
dG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKKyNkZWZpbmUgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCisK
IEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGVzLCBib29sIG1ha2VTYWZl
KTsKIAogQXJyYXk6Ok1vZGUgZnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqLCBib29sIG1ha2VTYWZl
KTsKQEAgLTc0LDggKzEwMSwxNyBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1v
ZGUpOwogaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7
CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNJbkJvdW5kc0Fj
Y2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
KyAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsMjUgKzE1
MCw2IEBAIGlubGluZSBBcnJheTo6TW9kZSBtb2RlRm9yUHV0KEFycmF5OjpNb2QKICAgICB9CiB9
CiAKLWlubGluZSBib29sIG1vZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VMb2FkKEFycmF5OjpNb2Rl
IGxlZnQsIEFycmF5OjpNb2RlIHJpZ2h0KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBib29sIGxlZnRJc0pTQXJyYXkgPQotICAgICAg
ICBsZWZ0ID09IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8IGxlZnQgPT0gQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczsKLSAgICAKLSAgICBib29sIHJpZ2h0SXNKU0FycmF5ID0KLSAgICAgICAg
cmlnaHQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgcmlnaHQgPT0gQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczsKLSAgICAKLSAgICBpZiAobGVmdElzSlNBcnJheSAmJiByaWdodElzSlNB
cnJheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3
aXRjaCAobW9kZSkgewpAQCAtMTQ3LDcgKzE2NCwxNSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNTcGVj
aWZpYyhBcnJheTo6TW9kZSBtCiAKIGlubGluZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJh
eTo6TW9kZSBtb2RlKQogewotICAgIHJldHVybiBtb2RlSXNTcGVjaWZpYyhtb2RlKTsKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw3ICsxNjc0
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAg
ICAgZWxzZQotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5
U3RvcmFnZSwgYmFzZSk7CisgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKICAgICBzZXQoZGVzdGluYXRpb25PcGVyYW5kLAogICAgICAgICBh
ZGRUb0dyYXBoKAogICAgICAgICAgICAgR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLApAQCAtMjMwOSw3ICsy
MzA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgo
R2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7
CkBAIC0yMzYwLDEzICsyMzYwLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRh
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3Bl
cnR5U3RvcmFnZSwgYmFzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFk
ZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5
U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBP
cEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDcgKzU4
Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdl
dFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE2MCw3ICsxMTYw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAg
Y2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDczLDcg
KzQ3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2Vz
Tm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0UHJvcGVydHlTdG9y
YWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKEdldEJ1dHRlcmZseSwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2Up
IFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNCwxNCArMjI0LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChF
eGVjU3RhdGUqIGUKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CiAgICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICBpZiAoYXJyYXktPmNhblNl
dEluZGV4KGluZGV4KSkgewotICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEs
IGluZGV4LCB2YWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAob2Jq
ZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBvYmplY3QtPnNl
dEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhl
YywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChv
YmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzM5LDExICszMzksMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBn
ZXRCeVZhbChFeAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVj
KTsKICAgICAKLSAgICAvLyBGSVhNRTogdGhlIEpJVCB1c2VkIHRvIGhhbmRsZSB0aGVzZSBpbiBj
b21waWxlZCBjb2RlIQotICAgIGlmIChpc0pTQXJyYXkoYmFzZSkgJiYgYXNBcnJheShiYXNlKS0+
Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzQXJy
YXkoYmFzZSktPmdldEluZGV4KGluZGV4KSk7CisgICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgICAgICBpZiAo
b2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShvYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgIH0KIAot
ICAgIC8vIEZJWE1FOiB0aGUgSklUc3R1YiB1c2VkIHRvIHJlbGluayB0aGlzIHRvIGFuIG9wdGlt
aXplZCBmb3JtIQogICAgIGlmIChpc0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJhc2UpLT5j
YW5HZXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNTdHJp
bmcoYmFzZSktPmdldEluZGV4KGV4ZWMsIGluZGV4KSk7CiAKQEAgLTUzMiwxNSArNTMzLDE1IEBA
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25Q
dXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29k
ZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJp
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
Z2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rp
bmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwot
ICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5T
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoYXJy
YXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NDksMTUgKzU1MCwxNSBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5n
bG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRh
LCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3Iu
Ci0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpT
QXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1
aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI5NCwyMCArMTI5NSwyOSBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZy
ZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5ICsgMSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAg
ICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAw
LCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxK
U1ZhbHVlKj4ocmVzdWx0KSArIDEpICsgbmV3U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVj
LT5nbG9iYWxEYXRhKCksIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7Cit9CisKK2NoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQor
eworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBu
ZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwog
fQogCiBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwg
aW50MzJfdCBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsOCArMTA1LDEwIEBAIHR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwor
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVf
dCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysr
IGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwpAQCAtMTM4LDggKzE0MCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJy
YXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2go
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChF
eGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKQEAgLTE4NSw2ICsxODcsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRl
cmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1
c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9u
LCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMg
b3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTks
MTIgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3Rv
T2JqZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdEdQUik7CisgICAgICAg
IHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BS
KTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
R1BSKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjUzLDEwICsyNTMsMTAgQEAgc3RhdGljIGJvb2wg
dHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICAgICAgCi0gICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdp
dGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNl
bHNlCkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdAogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02ODEsMTcgKzY4MSwxNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwog
ICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgog
ICAgIApAQCAtODMwLDcgKzgzMCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUg
PiBvbGRTaXplKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25l
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsK
ICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04NDQsNyArODQ0LDcgQEAgc3RhdGljIHZvaWQg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIHNj
cmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBAIC04NTQsOCArODU0LDggQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYg
KCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODYzLDkgKzg2Myw5IEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0
Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYK
ICAgICAgICAgICAgIApAQCAtMTAyMCw2ICsxMDIwLDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2Ug
bmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4
aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNl
Q2VsbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAg
ICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhD
b21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
MCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9
IG1faml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwg
dmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKIAog
ICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAg
ICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQ
dHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9q
aXQubGFiZWwoKTsKQEAgLTI0MzIsMjMgKzI0MzIsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczogewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxy
ZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5LAotICAg
ICAgICAgICAgLy8gYXQgdGhpcyBwb2ludC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKQEAgLTI1MzgsNiArMjUzMiw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGFscmVhZHlIYW5kbGVk
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhlIGJh
c2UgbWF5IG5vdCBiZSBuZWNlc3NhcnkgZm9yIHNvbWUgYXJyYXkgYWNjZXNzIG1vZGVzLiBCdXQg
d2UgaGF2ZSB0bworICAgICAgICAvLyBrZWVwIGl0IGFsaXZlIHRvIHRoaXMgcG9pbnQsIHNvIGl0
J3MgbGlrZWx5IHRvIGJlIGluIGEgcmVnaXN0ZXIgYW55d2F5LiBMaWtlbHkKKyAgICAgICAgLy8g
bm8gaGFybSBpbiBsb2NraW5nIGl0IGhlcmUuCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CiAgICAgICAgIApAQCAtMjU0NSw4ICsyNTQyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgewotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAog
ICAgICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMs
IGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KQEAgLTI1NzMsOCArMjU2OSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChh
cnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAg
IGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCiAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJh
eUJvdW5kcyk7CiAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNTg3LDkgKzI1ODMsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0
IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CiAKICAg
ICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKQEAgLTI1OTgs
NyArMjU5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAotICAgICAgICAgICAgaWYgKGFycmF5
TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAgICAgICBpZiAoIWlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKQEAgLTI3NjcsMTcgKzI3NjMs
MTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBS
ZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZm
ZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGgg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0
LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yODAzLDE4ICsyNzk5LDE4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxl
bmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgo
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwogICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3Ro
R1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5
U3RvcmFnZTs6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKIAogICAgICAg
ICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCkBAIC0zNDAyLDE0ICszMzk4LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGls
ZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2UgR2V0QnV0dGVyZmx5
OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc1Miw3ICszNzQ4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2VuZGlmCiAgICAgICAgIG1faml0Lm5lZzMy
KHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzb2x2
ZUluZm9HUFIsIHJlc29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5k
ZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoaW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihK
U1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOSArMzE1LDI4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2lu
Zm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNh
dGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKLSAg
ICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisgICAgY2FzZSBO
T05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdw
cigpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RF
UzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9h
ZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2g4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CkBAIC0zMTI3LDExICsz
MTM2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmlu
Z0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoZGVzY3JpcHRv
cik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CkBAIC0zMjYwLDEz
ICszMjY0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNj
cmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBy
ZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsK
ICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAg
ICAgICAKQEAgLTMzNjIsNiArMzM2NSwyMCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UmVnRXhwRXhlYyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCByZXN1bHQu
Z3ByKCksIGJhc2VHUFIpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTMzODMsMTMgKzM0MDAsMzEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQ
UikpOwogICAgICAgICAKLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
KTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgc3Rv
cmFnZVJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7
CisgICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Cisg
ICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOworICAg
IEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAgaWYg
KGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91
c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVz
dWx0LmdwcigpLCBiYXNlR1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAg
CisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTdG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKQEAg
LTM0MDIsOSArMzQzNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRl
UHIKICAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAgICAgICAgIAot
ICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZp
b3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAg
IHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKLSAgICBB
U1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICBDb3BpZWRB
bGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuc3Rv
cmFnZUFsbG9jYXRvcigpOwogICAgICAgICAKICAgICBtX2ppdC5sb2FkUHRyKCZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjIpOwpAQCAtMzQxNSwxMyArMzQ0
NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9q
aXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2Ny
YXRjaEdQUjIpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
c2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIy
ID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0gc2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90
IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9m
ZnNldCArPSBzaXplb2Yodm9pZCopKSB7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBz
aXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNp
emVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgfQotICAgIG1faml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNo
R1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSk7CiAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxl
SW5kZXgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU2LDYgKzExNTYsMTYg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVj
dCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHNpemUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1
LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBX
cml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJl
VHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lz
dGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKKyAgICAgICAg
dm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBwdHJkaWZmX3Qgb2Zmc2V0RnJv
bUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJl
c3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVK
U0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVy
SUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3Jh
Z2VQdHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHIKICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIEFkZHJlc3MocmVzdWx0LCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3Qn
cyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDAp
LCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkp
OworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0
ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTQzNCw3ICs0MzQsNyBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFz
aWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNj
cmF0Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShz
aXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgcHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBS
ZWdpc3RlcklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZt
X2dsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCkBAIC00NDMsNyArNDQzLDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwogICAgIHN0b3JlUHRy
KHJlc3VsdCwgJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICBuZWdQdHIocmVz
dWx0KTsKICAgICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZhbGxvY2F0b3ItPm1fY3VycmVudFBh
eWxvYWRFbmQpLCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoc2l6ZSksIHJlc3Vs
dCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0gb2Zmc2V0RnJvbUJhc2UpLCByZXN1
bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQg
dmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBS
ZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKQEAgLTQ1Mywy
NyArNDUzLDIyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnMKIAog
ICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0
IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJh
eSBpbml0aWFsaXphdGlvbi4KLSAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0
b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0
aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAg
ICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRBbGxvY2F0ZUJh
c2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3RvcmFnZVB0cik7
CiAKICAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBBcnJheVN0b3Jh
Z2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBB
cnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5n
dGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgc3RvcmUzMihJbW0z
Mihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOworICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlT
dG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFs
bG9jYXRlZCBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVz
cyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihz
dG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGluZGV4IGJpYXMu
Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNldCgpKSk7Ci0K
LSAgICAvLyBJbml0aWFsaXplIHRoZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3BhcnNlVmFsdWVN
YXBPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KKyAg
ICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIs
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNl
bmRpZgogICAgIH0KLQotICAgIC8vIFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xvdHMuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsrKSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotI2VuZGlmCi0gICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY1
LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3RpCiAg
ICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAKICAgICAvLyBUZXN0IGJhc2Un
cyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVn
VDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0
cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
ICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmlu
YWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQs
IFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0
Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mQnV0
dGVyZmx5KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwpAQCAtMTc0LDcg
KzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAg
ICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogI2VuZGlm
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9m
ZnNldCk7CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKQEAg
LTE5Niw2ICsxOTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rp
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKIAogICAgIC8v
IFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aEFuZFR5
cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MiwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3Is
IG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0ZvcihpKSwgcmVnVDMp
OwpAQCAtMjM5LDEwICsyNDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwg
Y3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0
cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0yNTIs
MTAgKzI1NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAg
ICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOzpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQwMyw3ICs0MDUsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1
cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3Ry
dWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAotICAgIENvbnZl
cnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVn
VDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252
ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mQnV0dGVyZmx5
KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxv
YWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QwLCBwYXRjaEdl
dEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVzdWx0KHRoaXMp
OwpAQCAtNDcwLDcgKzQ3Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVj
dGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKIAot
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJs
ZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9m
QnV0dGVyZmx5KCkpLCByZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwg
PSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBh
dGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVF
TkNFKHNlcXVlbmNlUHV0QnlJZCk7CkBAIC01MDgsOCArNTEwLDggQEAgdm9pZCBKSVQ6OmNvbXBp
bGVQdXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkpLCBiYXNlKTsKLSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZCdXR0ZXJmbHkoKSksIGJh
c2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAq
IG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0KIAogLy8gQ29tcGlsZSBhIGxv
YWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBiYXNl
LgpAQCAtNTIwLDggKzUyMiw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJl
Z2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0KTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZkJ1dHRlcmZseSgpKSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShj
YWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNldCBj
YWNoZWRPZmZzZXQpCkBAIC01MzEsOCArNTMzLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJl
Y3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQ
dHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAgIGxvYWRQdHIo
YmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY1NywxMSArNjU5LDExIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAg
ICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmlsZShzdHVi
SW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2Vu
ZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNB
cnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2th
eSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJl
Z1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIxICs5NDEsMjEgQEAg
X2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRL
bm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxv
YWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVT
dG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAgbG9h
ZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmpl
Y3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAg
ICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6
ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwg
dGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAx
KSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlP
ZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9m
ZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAg
IGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0g
ICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwg
b2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RB
bmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKICAg
ICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGlu
ZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9y
YWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3Rv
cmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRT
dG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwot
ICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4
W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRp
IFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5k
ZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAg
ICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAt
IHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwg
OF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc5NCwyMCAr
Nzk0LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5k
U3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zm
c2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHBy
b3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3Rv
cmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtv
YmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3Rv
cmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxv
YWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5k
U3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVTdG9y
YWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0
b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAg
ICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFzSW50
LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFk
ZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9p
bmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJ
bmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEp
ICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNs
b3cpCkBAIC0xMTI2LDggKzExMjYsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRh
Ojpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJ
bmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFn
ZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9w
R2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAg
ICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xl
bmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAg
ICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHog
dDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIxMSw4ICsxMjExLDggQEAgX2xsaW50X29wX3B1dF9i
eV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0MAogICAgIGxv
YWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAgYnBuZXEgU3Ry
dWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWFlcSB0
MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBsb2Fk
cCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6IEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEyMjMsOSAr
MTIyMyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAg
IGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0
MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAg
ICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhX
b3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAg
c3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBdCiAgICAg
am1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBlbHNl
CiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFz
b25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJy
YXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlwZSBjb25zdGFu
dHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEzCkBAIC0zMTgs
NyArMzIzLDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFzc0luZAogICAg
ICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgogICAgICAgICBz
dG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUsIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fb3V0
T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9idXR0
ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgsNyBAQCBtYWNybyB3
aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0aE91dE9m
TGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKLSAgICBs
b2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3BlcnR5U3RvcmFn
ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0eVN0b3Jh
Z2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdpc3RlciBub3cg
cG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhlIG9iamVj
dCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50ZXIgaXMg
bm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFy
cmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLworLy8gUHJvcGVy
dGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9j
YXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vICAg
KiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVz
LgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBp
ZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4gdW5zaWduZWQg
aW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lO
REVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZh
bHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdlcikgYXJlIG5v
dCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09i
amVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMg
aWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKKy8vIHdo
ZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBi
ZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBt
YXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisv
LyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAg
dW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3Bl
cnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRo
ZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFy
c2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3
b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBh
dCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVz
IHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9J
TkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3Rv
cmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVt
IHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0
byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgp
CisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgp
IGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1P
IGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3
ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2Vy
LgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJB
U0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdl
J2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2Vw
Y2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVD
VE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdy
b3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRl
ZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hl
biB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBh
bGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMg
dXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0
IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBi
b29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1W
YWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8
IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKK30KKworaW5saW5l
IEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAg
IHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExlbmd0aCh2ZWN0b3JM
ZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBi
YXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJu
IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw5ICsxMTQsMTcgQEAgY29uc3Qg
Q2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8gPQogQGVuZAogKi8KIAorQXJyYXlQcm90
b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGV4ZWMtPmdsb2JhbERhdGEoKSwg
MCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKIC8vIEVD
TUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0FycmF5KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCitBcnJheVByb3RvdHlwZTo6QXJyYXlQ
cm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTI5Miw4ICszMDAs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBmb3Ig
KHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKICAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXgoaykpCi0gICAgICAgICAgICBl
bGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7CisgICAgICAgIGlmICh0aGlzT2JqLT5jYW5H
ZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5k
ZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbGVtZW50ID0gdGhpc09i
ai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQxMywxMCArNDIxLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKyspIHsK
LSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAgICAgaWYg
KCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7CisgICAg
ICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAg
ICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvVVN0cmluZ0lubGluZShleGVjKSk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC02MjgsNyArNjM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKIAotICAgIGlmICh0
aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNP
YmopLT5pblNwYXJzZU1vZGUoKSkgeworICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAm
SlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNwYXJzZUluZGV4aW5nTW9k
ZSgpKSB7CiAgICAgICAgIGlmIChpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oZXhlYywgY2FsbFR5
cGUsIGNhbGxEYXRhKSkKICAgICAgICAgICAgIGFzQXJyYXkodGhpc09iaiktPnNvcnROdW1lcmlj
KGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICBlbHNlIGlmIChj
YWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCkBAIC03ODgsOSArNzk2LDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAz
KTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyAr
K2spIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCB2KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwpAQCAtODQ2LDExICs4NTQsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhp
c09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRo
aXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5k
ZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0
SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwg
anNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlz
T2JqKTsKIApAQCAtOTA5LDExICs5MTcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9y
ICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhh
cHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+
Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJh
eS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgy
LCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxs
KCk7CkBAIC05NjUsMTEgKzk3MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAg
ICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsg
ayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7Cisg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNr
bHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihr
KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBA
IC0xMDE3LDExICsxMDI1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAg
ICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwg
bGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlz
KTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4
KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldElu
ZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpz
TnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09i
aik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAt
MTA3NSw4ICsxMDgzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4
ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRl
eCgwKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4KDApOworICAgIGVsc2UgaWYgKGFy
cmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoMCkpeworICAgICAgICBydiA9IGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoMCk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTA5Nyw4ICsxMTA1LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCBydik7CiAgICAgICAgICAgICBKU1ZhbHVlIHY7Ci0gICAgICAgICAgICBp
ZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleChpKSkpCi0gICAgICAgICAgICAgICAgdiA9IGFy
cmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShpKSkpCisgICAgICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNr
bHkoaSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0
aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xv
dyBwYXRoCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIHYpOwpAQCAtMTE1
Miw4ICsxMTYwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBl
eGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXgobGVuZ3RoIC0gMSkpewotICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAx
KTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGxlbmd0
aCAtIDEpKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEp
OwogICAgICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKQEAgLTExNzQsOSArMTE4Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIHVuc2lnbmVkIGlkeCA9IGxlbmd0aCAt
IGkgLSAxOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBydik7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChpZHgpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpZHgpKSkKICAgICAgICAgICAgICAg
ICBicmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0
ZSBmYWxsYmFjayB0byBzbG93IHBhdGgKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMSwgYXJyYXktPmdldEluZGV4KGlkeCkpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGlkeCkpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgyLCBqc051bWJlcihpZHgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMywgYXJyYXkpOwogICAgICAgICAgICAgcnYgPSBjYWNoZWRDYWxs
LmNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNB
cnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRl
ZiBKU0FycmF5IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUqIHByb3Rv
dHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+
aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgICAgICAg
ICAgcmV0dXJuIHByb3RvdHlwZTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgQXJyYXlQcm90
b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwpAQCAtNDcsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAg
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdl
X2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gKKworI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMu
aCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwg
ZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdz
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rv
ci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUg
Z2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0
YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3Jh
Z2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4g
IFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8g
ICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3Qg
QXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOwor
cHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRp
YWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGlj
OgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsg
fQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5n
SGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0
dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0
ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5k
IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigp
LT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5k
ZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lk
IHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0
TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9m
ZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRl
ckZyb20oY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNl
TWFwID0gb3RoZXIubV9zcGFyc2VNYXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9p
bmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVl
c0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlh
bGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247
CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7Cisg
ICAgfQorICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVu
c2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Cisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJf
dCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9u
SW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
TGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9pbmRleEJpYXMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VNYXBPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3NwYXJzZU1hcCk7
IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2
ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
R2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworc3RydWN0IEFycmF5U3RvcmFnZTsKKwor
Y2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOwor
cHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1Ymxp
YzoKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMgPyBoYXNJbmRleGluZ0hlYWRlciA6IHRydWUpOworICAgICAg
ICBBU1NFUlQoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KTsKKyAgICAgICAgcmV0dXJuIChwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSArIChoYXNJbmRleGluZ0hlYWRlciA/IHNpemVvZihJbmRleGlu
Z0hlYWRlcikgOiAwKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2Up
ICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSAr
IEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJmbHkq
IGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYs
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZs
eSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90Vmlz
aXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhp
bmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQor
ICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGluZ1Bh
eWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFycmF5
U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3Rv
cmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisgICAg
eworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQqIGJhc2Uo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2
b2lkKiBiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBUaGUgYnV0dGVy
Zmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYg
YnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0
IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCisg
ICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVu
Y2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisgICAgLy8gbW9kZXMgb2YgYnV0dGVy
ZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5
IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4K
KyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJv
cGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBh
Y2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1By
b3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFz
c3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAg
IEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVy
Zmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkUHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9v
bCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdo
ZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFzIGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0
ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3Rz
KTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVt
YmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRl
cmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZs
eUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAi
QnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZSgKKyAgICAgICAgICAgIHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KSwgJnRlbXApKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29u
c3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxp
emVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAo
aGFzSW5kZXhpbmdIZWFkZXIpCisgICAgICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBp
bmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAorICAgICAgICB2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKKyAgICAg
ICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJl
KSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEJ1dHRlcmZs
eSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0
eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRl
VW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgbWVtY3B5KAorICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xk
UHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgYmFzZShwcmVDYXBhY2l0eSwgb2xkUHJvcGVydHlD
YXBhY2l0eSksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5
LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwK
KyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3Ry
dWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAg
ICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2Fw
YWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVy
KCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAgIEFTU0VSVF9VTlVTRUQob2xkU3Ry
dWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVy
dHlDYXBhY2l0eSk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3Jh
Z2UoCisgICAgICAgICAgICAmdGhlQmFzZSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpLAorICAgICAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUs
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAorICAgICAgICBn
bG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KG9sZFN0cnVjdHVyZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+YmFz
ZShuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksCisgICAgICAgIGJhc2Uob2xkUHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLAorICAgICAgICBzdGQ6Om1pbigKKyAgICAgICAg
ICAgIHRvdGFsU2l6ZSgKKyAgICAgICAgICAgICAgICAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRI
YXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAg
ICAgICAgdG90YWxTaXplKAorICAgICAgICAgICAgICAgIDAsIHByb3BlcnR5Q2FwYWNpdHksIG5l
d0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6
ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVy
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVBcnJheSgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJl
KSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0
dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7
CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJs
eSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4g
d2hpY2gKKyAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBu
ZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3Zp
bmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhy
b3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9m
IGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0
bworICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJn
dW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkg
b24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIg
YXJndW1lbnRzIChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5k
IGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgor
ICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNp
dHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsK
KyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAt
IG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMp
Cit7CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFi
b3ZlLgorICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSArIG51bWJlck9mU2xvdHMsCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5
Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3Jh
Z2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQg
KCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgICAgIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIg
Z2V0UHJvcGVydHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVj
ayMjbWVtYmVyIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93
blByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0lu
c3RhbmNlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5n
SGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlT
dG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBT
dHJ1Y3R1cmU7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7
CitwdWJsaWM6CisgICAgLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0
aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorICAgIC8v
IHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1heGltdW1MZW5ndGggPSAweDEwMDAwMDAwOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIs
IG1fYXV4V29yZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2xlbmd0aCk7IH0KKyAgICAK
KyAgICAvLyBUaGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4aW5nSGVhZGVyIGlzIGFsbCB6
ZXJvJ3MgaXMgcGFydCBvZiB0aGUKKyAgICAvLyBjb250cmFjdCBvZiB0aGlzIGNsYXNzIGFuZCBz
aG91bGQgbm90IGJlIGNoYW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRlcGVuZAorICAgIC8vIG9uIGl0
LgorICAgIEluZGV4aW5nSGVhZGVyKCkKKyAgICAgICAgOiBtX2F1eFdvcmQoMCkKKyAgICAgICAg
LCBtX2xlbmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aCh1aW50
MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5n
dGgpOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMy
X3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1
aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0
aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkg
LSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20o
Y29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJh
eVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGlu
Z0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5k
ZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihw
cm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFByb3Bl
cnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRo
b2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQor
ICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXplX3Qg
cHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90IG1fYXV4V29yZDsgLy8gVGhl
IG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgorICAgIHVp
bnQzMl90IG1fbGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0
b3JhZ2UgYW5kIGl0cyB0eXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCisj
aW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3Qg
SW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdl
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+
bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtF
TFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZpbmUgSW5kZXhpbmdUeXBlX2gK
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CisKKy8v
IEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFk
ZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVz
ZSBhcmUgdXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJl
Y3RseS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAgICAg
ID0gMTY7IC8vIE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFnZSBp
biB0aGUgcGFzdC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0
b3JhZ2U7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5ICAgICAgICAgICAgICAgICAg
ICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZSAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CisKKy8vIE1hc2sgb2YgYWxsIHBv
c3NpYmxlIHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAg
ICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5n
IHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5k
SGlzdG9yeSAgPSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kZXhpbmdU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBDbGFzc0luZm8g
SlNBY3RpdmF0aW9uOjpzX2luZm8gPSB7CiAKIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSkKICAgICA6IEJhc2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkp
Ci0gICAgLCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIDAp
CisgICAgLCBtX3JlZ2lzdGVyQXJyYXkoMCkKICAgICAsIG1fbnVtQ2FwdHVyZWRBcmdzKG1heChj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJD
b3VudCgpKSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2Fw
dHVyZWRWYXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2lzVG9ybk9mZihmYWxzZSkKQEAgLTY3LDEy
ICs2NywxMiBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIC8vIE5vIG5l
ZWQgdG8gbWFyayBvdXIgcmVnaXN0ZXJzIGlmIHRoZXkncmUgc3RpbGwgaW4gdGhlIFJlZ2lzdGVy
RmlsZS4KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1f
cmVnaXN0ZXJBcnJheS5nZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9
IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheTsKICAgICBpZiAoIXJlZ2lzdGVyQXJyYXkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRo
aXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Cisg
ICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rl
ck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBp
dCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzMSw3ICsxMzEsNyBAQCBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTQ2LDgg
KzE0Niw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxl
T2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9m
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWlj
U2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyAr
OTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXpl
KCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAg
ICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2Yg
cmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3Rl
cnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9y
ZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVu
IGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAgICAgICBpbnQgbV9u
dW1DYXB0dXJlZFZhcnMgOiAzMDsKICAgICAgICAgYm9vbCBtX2lzVG9ybk9mZiA6IDE7CkBAIC0x
NjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZvciAoaW50IGkgPSBmcm9t
OyBpIDwgdG87ICsraSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwogCi0gICAgICAgIG1fcmVnaXN0ZXJBcnJheS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIG1fcmVnaXN0ZXJB
cnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwog
ICAgICAgICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAg
LTQ1LDcxICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0v
LyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVj
dHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSBy
ZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgot
Ly8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMg
d2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBu
b3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhl
IHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5
LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFu
IHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGlu
ZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0v
LwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRh
YmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9J
TkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRo
ZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBp
IHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAg
KiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0
b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBp
biBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFw
LgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JB
R0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQg
aW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBv
biB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhl
IHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8g
bWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCku
Ci0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZ
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNw
YXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0
aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5l
ZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJm
bG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkg
bXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3Qp
LgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVk
PigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRo
ZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4o
KSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBp
cyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmlu
ZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9S
X0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9j
YXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxl
bmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0
VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJv
IGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZp
bmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2Ug
YSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkg
aW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVj
dG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBm
dWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBK
U0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLS8vIFdlIGtlZXAgdHJhY2sgb2Yg
dGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRo
aXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhl
IG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUg
Y29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1bnNpZ25l
ZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0
dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNp
dHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQogc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsK
ICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkBAIC0xMTcsNDE5ICs1NCwxNSBAQCBzdGF0aWMgYm9v
bCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0j
aWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLWlubGluZSB2b2lkIEpTQXJyYXk6OmNoZWNr
Q29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUpCi17Ci19Ci0KLSNlbmRpZgotCi12b2lk
IEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgdW5zaWduZWQgaW5pdGlh
bFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3Rv
cmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQq
IG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsK
LSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9y
YWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3Rv
cmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5p
dGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAw
OwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLX0KLQotSlNBcnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVk
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2Fu
IGhhbmRsZSB3aXRoIGEgdmVjdG9yLgotICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0
aWFsVmVjdG9yTGVuZ3RoID0gbWF4KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0g
ICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rv
ckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFn
ZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8
QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9
IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAg
ICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKLQotI2lmIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwotICAg
IG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7Ci0jZW5kaWYKLQot
ICAgIHJldHVybiB0aGlzOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6ZShK
U0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29u
c2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwot
fQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFs
dWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJh
eUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKLSAg
ICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAh
PSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVv
Zih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBt
X3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3Bh
cnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8v
IFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRo
ZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0
aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWlu
LgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEo
ZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0cmli
dXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0g
ICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0
ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICgh
c2V0dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBj
YWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVu
ZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJy
YXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJl
Y3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFy
cmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0
IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNh
c2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAg
IC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUg
LSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmlu
ZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9Ci0K
LSAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhcnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAgIEpT
VmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAgaWYg
KExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0dGVy
ID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikgewot
ICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFy
cmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17Ci0g
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKLX0K
LQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNBcnJheSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQo
KTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRl
clNldHRlcigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
LSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGluZSBK
U1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewotICAg
IEFTU0VSVCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1pbmxp
bmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoaXRl
cmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJz
ZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9
IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6
ZXIodGhpcywgZmluYWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFyc2VN
YXAoKQotewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFsdWVN
YXAgPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0g
ICAgaWYgKCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7Ci0g
ICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+c3Bh
cnNlTW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsK
LQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgs
IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBp
biB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAgLy8g
YW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAgICAg
ICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNl
Y29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQqIG5l
d1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwot
ICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3Rv
cmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3JhZ2Us
IHN0b3JhZ2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3Jh
Z2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7Ci0g
ICAgbV92ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikK
LXsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgaWYg
KGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVudHJ5
SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0
ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVj
dCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwot
ICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0
dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmpl
Y3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQotICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsK
LQotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUo
ZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0
dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikKLSAg
ICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIp
OwotCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFj
Y2Vzc29yKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVz
Y3JpcHRvcigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmluZWQg
aW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4RkZG
RkZGRkYpOwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0IGNh
c2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQot
ICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBp
ZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0g
ICAgICAgIC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1p
c3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScK
LSAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0
byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4K
LSAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgQVNT
RVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRocm93
RXhjZXB0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0gICAgLy8gMS4gTGV0IGN1
cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0gICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBT
cGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwot
Ci0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2li
bGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5k
ZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KLSAgICAvLyA0LiBJ
ZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCi0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsK
LSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0
eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0
YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFs
dWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFu
IGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUg
bmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQg
dmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFBy
b3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFt
ZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0Vu
dW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNj
cmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRl
ZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAg
ICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRl
ZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5k
ZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7
Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBk
ZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQotICAg
ICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBp
biBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGlu
IGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4x
MikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgZW50cnlJbk1hcC0+Z2V0
KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVx
dWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gNy4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVuCi0g
ICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgIC8vIDcuYS4gUmVqZWN0
LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAg
IGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZp
Z3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tF
bnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxl
XV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9m
IGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkg
JiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0
cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIWRl
c2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIC8vIDkuIEVsc2UsIGlm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2
ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNj
cmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAg
IC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9w
ZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50
KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
ZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3Bl
cnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVy
dHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVd
XSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1
dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgICAg
IC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBm
cm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAgICAg
IC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0
eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KLSAgICAgICAgICAgIC8v
IGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0
ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5p
c0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAg
ICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KLSAgICAgICAgICAgIC8v
IDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Us
IHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVu
dC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBv
ZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlp
LiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAg
ICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVs
ZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVu
dC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZh
bHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFs
dWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5
LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFj
Y2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVudC5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJl
bnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29y
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJv
dGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRd
XSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7
Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQg
b2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50Lltb
R2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclBy
ZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTIuIEZvciBl
YWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3Jy
ZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9i
amVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0RGVzY3JpcHRvcihleGVj
LCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAvLyAxMy4gUmV0dXJuIHRy
dWUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFi
bGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQogewogICAgIEFTU0VSVChpc0xlbmd0
aFdyaXRhYmxlKCkgfHwgIXdyaXRhYmxlKTsKICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8
fCB3cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVj
LT5nbG9iYWxEYXRhKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXA7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgbWFwLT5zZXRMZW5ndGhJc1Jl
YWRPbmx5KCk7CiB9CkBAIC02MzMsMzUgKzE2Niw3IEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QKICAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25OdW1lcmlj
UHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9
CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci19Ci0KLWJvb2wgSlNB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIGlmIChpID49IHN0b3JhZ2UtPm1f
bGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGl0
LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4g
YXJyYXktPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6Omdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxNzcsNiBA
QCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJu
IEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwg
c2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzE4OCw2IEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAg
ICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0
aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAh
PSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNj
cmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBA
IC03MTQsMTEgKzE5NSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4
ZWMpOwpAQCAtNzMzLDE5NCArMjA5LDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0
IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92
ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3Qg
PSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFn
ZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJ
blZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAg
ICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxl
bmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAg
ICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0
aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRl
ZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlf
SU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAg
ICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBp
cyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rv
ckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVy
ZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSgh
bWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNo
b3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUg
bWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBV
cGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5t
X2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rv
ciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgo
aXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkg
JiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAg
ICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVl
biByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9y
YWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3Bl
cnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxs
b2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0
aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7
Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhl
IGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0
aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0g
Y2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdp
bGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEg
dmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAg
dW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
KyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4
ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVw
ZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAv
LyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0
ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+
bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+
Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUo
KSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBw
cm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0
IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdo
ZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZ
KCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ug
c2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFy
ZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8v
IFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAg
ICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVj
dG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZ
KChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAg
ICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBi
ZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhp
cyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAg
ICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xl
bmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5n
dGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcg
dGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxk
VGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlm
ICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3Vs
ZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMg
bm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9y
YWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5
IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNv
LgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNl
TW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRp
b24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkg
fHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAh
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAg
ICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwg
dXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAg
IC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVs
ZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0
LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3
IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+
KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlm
IChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1ICsyMTksNiBAQCBib29sIEpT
QXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29s
IEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVj
dC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFs
dWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAt
Pm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBE
b250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1h
cC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJl
S2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWdu
ZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsKQEAgLTk2NCwxMjcgKzIy
NiwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0
dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2Jq
ZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlk
ZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNp
ZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAg
Ly8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9y
IFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09i
amVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBt
aW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
IFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFw
LT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEo
aXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMu
YXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCks
IGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2ly
ZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWdu
ZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQot
ICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0g
ICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXpl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoK
LSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsK
LSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVk
KWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJv
bmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2ly
ZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQot
ICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JP
Vyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBm
dW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0
YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1
ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3Ig
dGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChu
ZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3Ro
ID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdW
ZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5v
IHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAg
aWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBz
dG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVh
bGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0
b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJh
eVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVu
Z3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVt
b3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAm
IGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0lu
ZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0
eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdT
dG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9p
ZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkp
ICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxl
bmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+
PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsK
LSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmll
cjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5
IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9y
LgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5n
dGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jh
c2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJl
dHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9k
IG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xl
YXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBo
YXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1f
aW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0
ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJl
KCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUg
ZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAog
ICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmljczoKQEAgLTEwOTMsOCAr
MjU0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8v
ICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVj
dG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNp
dHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFz
ZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1f
dmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxl
bmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0
b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAg
aWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgp
CkBAIC0xMTAyLDU4ICsyNjMsNTcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxl
bmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFu
ZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
LgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
ICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5k
ZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCAr
IG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNp
Z25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkg
d29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8
IDEpOwogCiAgICAgLy8gU3RlcCAyOgorICAgIC8vIFdvcmsgb3V0IHdoZXJlIHdlJ3JlIGdvaW5n
IHRvIG1vdmUgdGhpbmdzIHRvLgorCisgICAgLy8gRGV0ZXJtaW5lIGhvdyBtdWNoIG9mIHRoZSB2
ZWN0b3IgdG8gdXNlIGFzIHByZS1jYXBhY2l0eSwgYW5kIGhvdyBtdWNoIGFzIHBvc3QtY2FwYWNp
dHkuCisgICAgLy8gSWYgdGhlIHZlY3RvciBoYWQgbm8gZnJlZSBwb3N0LWNhcGFjaXR5IChsZW5n
dGggPj0gbV92ZWN0b3JMZW5ndGgpLCBkb24ndCBnaXZlIGl0IGFueS4KKyAgICAvLyBJZiBpdCBk
aWQsIHdlIGNhbGN1bGF0ZSB0aGUgYW1vdW50IHRoYXQgd2lsbCByZW1haW4gYmFzZWQgb24gYW4g
YXRvbWljIGRlY2F5IC0gbGVhdmUgdGhlCisgICAgLy8gdmVjdG9yIHdpdGggaGFsZiB0aGUgcG9z
dC1jYXBhY2l0eSBpdCBoYWQgcHJldmlvdXNseS4KKyAgICB1bnNpZ25lZCBwb3N0Q2FwYWNpdHkg
PSAwOworICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAg
ICAvLyBBdG9taWMgZGVjYXksICsgdGhlIHBvc3QtY2FwYWNpdHkgY2Fubm90IGJlIGdyZWF0ZXIg
dGhhbiB3aGF0IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0g
cmVxdWlyZWRWZWN0b3JMZW5ndGgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZXNpcmVk
VmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7CisgICAg
dW5zaWduZWQgZGVzaXJlZEluZGV4QmlhczsKKworICAgIC8vIFN0ZXAgMzoKICAgICAvLyBXZSdy
ZSBlaXRoZXIgZ29pbmcgdG8gY2hvb3NlIHRvIGFsbG9jYXRlIGEgbmV3IEFycmF5U3RvcmFnZSwg
b3Igd2UncmUgZ29pbmcgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIG9uLgogCiAgICAgdm9pZCogbmV3
QWxsb2NCYXNlID0gMDsKICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAgLy8g
SWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBu
b3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCiAgICAgaWYgKGN1cnJlbnRD
YXBhY2l0eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1cnJl
bnRDYXBhY2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgIG5ld0FsbG9jQmFz
ZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOworICAgICAgICAvLyBGSVhNRSBkbyB0aGluZ3MKKyAg
ICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0b3JhZ2UtPm1faW5kZXhCaWFz
LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVu
dENhcGFjaXR5OworICAgICAgICBkZXNpcmVkSW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5
IC0gZGVzaXJlZFZlY3Rvckxlbmd0aDsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5
KSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIGRlc2lyZWRJbmRleEJpYXMgPSBuZXdTdG9yYWdl
Q2FwYWNpdHkgLSBkZXNpcmVkVmVjdG9yTGVuZ3RoOworICAgICAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoZGVzaXJlZEluZGV4
QmlhcywgcHJvcGVydHlDYXBhY2l0eSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRWZWN0
b3JMZW5ndGgpKSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CiAKLSAg
ICAvLyBTdGVwIDM6Ci0gICAgLy8gV29yayBvdXQgd2hlcmUgd2UncmUgZ29pbmcgdG8gbW92ZSB0
aGluZ3MgdG8uCi0KLSAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHZlY3RvciB0byB1
c2UgYXMgcHJlLWNhcGFjaXR5LCBhbmQgaG93IG11Y2ggYXMgcG9zdC1jYXBhY2l0eS4KLSAgICAv
LyBJZiB0aGUgdmVjdG9yIGhhZCBubyBmcmVlIHBvc3QtY2FwYWNpdHkgKGxlbmd0aCA+PSBtX3Zl
Y3Rvckxlbmd0aCksIGRvbid0IGdpdmUgaXQgYW55LgotICAgIC8vIElmIGl0IGRpZCwgd2UgY2Fs
Y3VsYXRlIHRoZSBhbW91bnQgdGhhdCB3aWxsIHJlbWFpbiBiYXNlZCBvbiBhbiBhdG9taWMgZGVj
YXkgLSBsZWF2ZSB0aGUKLSAgICAvLyB2ZWN0b3Igd2l0aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5
IGl0IGhhZCBwcmV2aW91c2x5LgotICAgIHVuc2lnbmVkIHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAg
aWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIC8vIEF0b21pYyBkZWNheSwg
KyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxh
YmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3Ro
KSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlv
biwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KLSAgICAgICAgQVNTRVJUKG5l
d0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3Zl
Y3Rvckxlbmd0aCAtIGxlbmd0aCk7Ci0gICAgfQotCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1
aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0
b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVy
PFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKKyAgICBtX2J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBkZXNpcmVkSW5kZXhCaWFzLCBw
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgbmV3U3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKGRl
c2lyZWRWZWN0b3JMZW5ndGgpOworICAgIG5ld1N0b3JhZ2UtPm1faW5kZXhCaWFzID0gZGVzaXJl
ZEluZGV4QmlhczsKIAogICAgIC8vIFN0ZXAgNDoKICAgICAvLyBDb3B5IGFycmF5IGRhdGEgLyBo
ZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5ICYgZnJl
ZSBhbnkgb2xkIGFsbG9jYXRpb24uCiAKICAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1vdmVkIHdp
dGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBzaGlmdGlu
ZyBkYXRhCiAgICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhCaWFzKS4g
QXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAgICBtZW1t
b3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgbWVtbW92
ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFyZSB3ZSBj
b3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNlICE9IG1f
c3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRp
b24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9
IG5ld0FsbG9jQmFzZTsKLSAgICB9CisgICAgbWVtbW92ZShuZXdTdG9yYWdlLT5tX3ZlY3RvciAr
IGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIG91dE9mTGluZVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBv
dXRPZkxpbmVTaXplLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb3V0T2ZMaW5lU2l6ZSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xMTYyLDEzICszMjIsMTMgQEAgYm9vbCBKU0FycmF5OjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRo
ZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nICdp
ZicuCi0gICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBtX3NwYXJzZVZhbHVlTWFwKTsK
KyAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsK
IAotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7
CisgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CiAgICAgICAgIC8vIEZhaWwgaWYgdGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCiAgICAg
ICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CkBAIC0xMjExLDcgKzM3MSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywKIAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8g
RGVsZXRlIHByb3BlcnRpZXMgZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0g
dmFsdWVTbG90OwpAQCAtMTIyMCw3ICszODAsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0
aCA9IG5ld0xlbmd0aDsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAogICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjksNDQgKzM4OSw1
NiBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiBKU1ZhbHVlIEpT
QXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKICAgICAKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAg
ICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBp
ZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCisgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgaWYgKGluZGV4IDwg
bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsK
LSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAg
IEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAgICAgICAgICAgIHZhbHVlU2xv
dC5jbGVhcigpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAg
IGlmIChpbmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsK
KyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
dmFsdWVTbG90LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKLSAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAgICAgICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRM
ZW5ndGgoaW5kZXgpOworICAgICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
IH0KIAotICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tH
ZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0gICAgSlNWYWx1
ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIC8vIENhbGwgdGhlIFtbRGVs
ZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4K
LSAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBMZXQgZWxlbWVudCBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCBpbmR4LgorICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywg
aW5kZXgpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRl
cm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgorICAgICAgICBp
ZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Q2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVu
Z3RoIiwgaW5keCwgYW5kIHRydWUuCisgICAgICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1
ZSk7CisgICAgICAgIC8vIFJldHVybiBlbGVtZW50LgorICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChl
eGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXgg
YXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3
NSwzOSArNDQ3LDUzIEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHZv
aWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQXJyYXk6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgMCwgdmFsdWUsIHRydWUsIGNyZWF0ZUluaXRpYWxBcnJheVN0b3Jh
Z2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworCisgICAgICAgIC8vIEZh
c3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1f
bnVtVmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxl
bmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aCArIDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0
b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYg
KFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAg
ICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgo
KSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAg
NiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3Io
ZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1
cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAx
OwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIC8vIEhh
bmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwg
dHJ1ZSwgc3RvcmFnZSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5
IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdl
IGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0aCA9PSAweEZGRkZGRkZG
dSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9y
YWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40
Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlmICghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3Io
ZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQot
ICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAogYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIGNvdW50KQogewogICAgIEFTU0VSVChjb3VudCA+IDApOwogICAgIAot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoKTsKICAgICAKLSAgICB1bnNpZ25lZCBvbGRM
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMg
b3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2Vu
ZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCkBAIC0xMzE4LDE4ICs1MDQsMTggQEAg
Ym9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVucwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGNvdW50Owot
ICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50OworICAgIHN0b3JhZ2UtPnNldExlbmd0aChv
bGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOworICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIGlmICh2
ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBtaW4odmVjdG9yTGVuZ3RoLCAodW5zaWdu
ZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92ZWN0b3JMZW5ndGggLT0gY291bnQ7Cisg
ICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9y
TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
OwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNp
emUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJy
YXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGgp
IHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBjb3VudCk7CisgICAgICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgbV9pbmRleEJpYXMgKz0g
Y291bnQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzM5LDU5ICs1MjUsMjkgQEAgYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVucwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB1
bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCiBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvdW50KQogewotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBv
ciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5l
cmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAobGVuZ3RoICE9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKGxlbmd0
aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9k
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9pbmRleEJpYXMgPj0gY291
bnQpIHsKLSAgICAgICAgbV9pbmRleEJpYXMgLT0gY291bnQ7Ci0gICAgICAgIGNoYXIqIG5ld0Jh
c2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBjb3VudCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9y
YWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgIG1fc3RvcmFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLSAgICAgICAg
bV92ZWN0b3JMZW5ndGggKz0gY291bnQ7CisgICAgaWYgKHN0b3JhZ2UtPm1faW5kZXhCaWFzID49
IGNvdW50KSB7CisgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlLT51bnNoaWZ0KHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xv
d0Nhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFy
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09i
amVjdC0+bV9zdG9yYWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0
aGlzT2JqZWN0LT5sZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3Jh
Z2UtPm1fYWxsb2NCYXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+
bV92ZWN0b3JMZW5ndGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVj
dG9yLT5zbG90KCksIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAo
YmFzZVN0b3JhZ2UgIT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJy
YXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1Zh
bHVlKSAqIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKQotICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0
YXRpYyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lk
KiBiKQogewogICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+
YXNOdW1iZXIoKTsKQEAgLTE0MTAsMTEwICs1NjYsMTM1IEBAIHZvaWQgSlNBcnJheTo6c29ydE51
bWVyaWMoRXhlY1N0YXRlKiBleGUKIHsKICAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKIAot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47CiAgICAgICAg
IAotICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7Ci0gICAgc2l6ZV90IHNpemUg
PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1i
ZXIoKSkgewotICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmco
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOzsKKyAgICAgICAgCisgICAgICAgIGlmIChzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgICAgIHNp
emVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+
bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51
bWJlcnMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAg
ICAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEpOworICAgICAgICAKKyAgICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hp
Y2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgICAgICAv
LyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdz
IG5vIHVzZXIgdmlzaWJsZQorICAgICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRo
ZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgorICAgICAgICBxc29ydChzdG9yYWdl
LT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVO
dW1iZXJzRm9yUVNvcnQpOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlm
ICghYWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFy
ZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29t
cGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBX
ZQotICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNl
IHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGlu
ZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdl
LT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVO
dW1iZXJzRm9yUVNvcnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lD
aGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
QVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAg
IGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFT
Y3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25j
ZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25z
aWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwg
dGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNp
ZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUg
Y3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3Ro
ZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0
aW9uIGluY29uc2lzdGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsK
LSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIAotICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKLQotICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwot
ICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICB2YWx1ZXNbaV0u
Zmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBv
biBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgLy8gYSB0b1N0cmluZyBjYWxsIHJh
aXNlcyBhbiBleGNlcHRpb24uCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFs
dWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lubGluZShleGVjKTsKLQotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
U2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUg
dG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgIC8vIHRo
YW4gTyhOIGxvZyBOKS4KLQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21w
YWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+c3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+
bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2Fu
IGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBv
biB0aGF0LgorICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92
ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxh
cmdlIHRlbXBvcmFyeQorICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMg
dXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0
aG9kcyB0aGF0IHJldHVybgorICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5n
IHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVu
dC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1
c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJU
KCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZh
bHVlOworICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwg
dG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRv
U3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAg
ICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lubGlu
ZShleGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdo
dCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAg
ICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0g
ICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJl
Z2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlT
dHJpbmdQYWlyRm9yUVNvcnQpOwotICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5i
ZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVl
cykKKyAgICAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6
ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0
KTsKICNlbHNlCi0gICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxp
a2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2Vz
IG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVy
Zm9ybSBhIHN0YWJsZSBzb3J0LgotICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6
ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0
KTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2Vs
eSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9l
cyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBl
cmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwogI2VuZGlmCi0KLSAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAvLyBpbmNy
ZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZh
bHVlcy4KLSAgICBpZiAobV92ZWN0b3JMZW5ndGggPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpCi0gICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0
aCA9IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKLQotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICBtX3N0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOwotCi0gICAg
SGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAg
ICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBh
cnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0
byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgICAgIGlm
IChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkg
eworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RvcmFnZS0+
bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgCisg
ICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7
IGkrKykKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQogfQogCiBzdHJ1Y3QgQVZMVHJlZU5vZGVGb3JBcnJheUNvbXBhcmUgewpAQCAtMTU5Niwx
NDggKzc3NywxODMgQEAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIAog
dm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rp
b24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7CiAgICAg
QVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0
aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29v
ZAotICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+
bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2Vk
VmVjdG9yTGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXpl
KCkgOiAwKTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVw
dGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9l
eGVjID0gZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNv
bXBhcmVGdW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9
IGNhbGxUeXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNh
bGxEYXRhOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwot
Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3Is
IG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVy
IHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCi0KLSAgICB1bnNpZ25lZCBu
dW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5n
IHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRy
ZWUuCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmlu
ZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
XS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZh
bHVlID0gdjsKLSAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgfQotICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAg
ICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAg
ICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAg
ICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICAgICArK251
bURlZmluZWQ7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlv
biBvciBpbiB0b051bWJlci4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUg
ZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5v
IGdvb2QKKyAgICAgICAgLy8gaWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgICAgICBB
U1NFUlQoc3RvcmFnZS0+bGVuZ3RoKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgp
ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKHN0
b3JhZ2UtPm1fc3BhcnNlTWFwID8gc3RvcmFnZS0+bV9zcGFyc2VNYXAtPnNpemUoKSA6IDApOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlQ291bnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCisgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0aW9uOworICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOworICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKKyAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0
cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVz
IHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAg
ICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0
cmVlIGhlcmUuCisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAg
ICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1
bmRlZmluZWQgb25lcywgYW5kIGluc2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVl
LgorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVm
aW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVm
aW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZp
bmVkKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAg
ICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAg
ICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgKytu
dW1EZWZpbmVkOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgIH0KLQotICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsg
bnVtVW5kZWZpbmVkOwotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXApIHsKLSAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUo
KTsKLSAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgewot
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBh
cnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCi0gICAgICAgICAgICBp
ZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAh
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdVc2VkVmVjdG9yTGVu
Z3RoKSkgewotICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2Vk
VmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAg
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkg
eworICAgICAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKKyAgICAg
ICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9j
YXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KKyAgICAg
ICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdV
c2VkVmVjdG9yTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsK
KyAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAg
ICArK251bURlZmluZWQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAo
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXpl
KCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNv
bXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxv
d2luZyBtaWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3Rs
eS4KKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9y
YWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsK
KyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwog
ICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJv
ZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAg
ICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7
Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVu
Z3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQotICAgIC8vIG1vZGlmeWlu
ZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgotCi0gICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sg
aW50byBtX3N0b3JhZ2UuCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29t
cGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVl
KTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewotICAgICAgICBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAg
Ly8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBtX3N0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdW51
c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0g
ICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIG1fc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0Nv
bnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5OjpmaWxs
QXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogewot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVj
dG9yRW5kID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5z
aWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+
bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9
IDA7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0
aCgpOyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1fbGVuZ3Ro
OyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQgSlNB
cnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0
aCgpKTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7Ci0g
ICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAg
IGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5k
ID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKDsg
aSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHYgPSB2ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKIHVuc2lnbmVk
IEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAg
LTE3NDUsMTAzICs5NjEsNzEgQEAgdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmco
SlNHbAogICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWlu
KHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICB1bnNpZ25lZCBudW1E
ZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAg
IGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwot
ICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAg
ICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodik7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgo
KSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAg
ICAgIAorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVt
RGVmaW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBo
b2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBp
cyB0aHJvd24gYnkgY2FsbGVyLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGds
b2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0gICAg
fQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JM
ZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQot
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwot
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICByZXR1
cm4gbnVtRGVmaW5lZDsKLX0KLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLXZvaWQg
SlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQotewot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIEFTU0VSVCghc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0KLSAgICBBU1NFUlQoc3RvcmFnZSk7
Ci0gICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgIEFTU0VSVCgh
bV9zcGFyc2VWYWx1ZU1hcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBp
ZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICB2
YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMg
ZGVhbGxvY2F0ZWQuCi0gICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVj
dG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JM
ZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4
Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZl
Y3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNs
ZWFyKCk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
U29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bURlZmlu
ZWQ7CiAgICAgfQotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKTsKLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFn
ZS0+bV9sZW5ndGgpOwotCi0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OwotICAgICAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1f
dmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5E
RVgpOwotICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKHR5
cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNo
IGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgotICAgICAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIAotI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTIxLDE0MCArMjEsMzAgQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJy
YXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCi0jZGVmaW5lIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZIDAKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0Fy
cmF5OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHN0cnVjdCBTcGFy
c2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5
cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlF
bnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0
ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29u
c3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAg
ICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6Oklu
dEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9
IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVh
ZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1h
cDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1
bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxh
Z3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7
Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRT
cGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0
PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0
aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nh
c3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAot
ICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBK
U0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBB
ZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQotICAgICAgICAvLyBUaGlzIHNo
b3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUg
ZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShp
dCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7
IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNF
bXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9l
bmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1hcCBtX21h
cDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBh
Y2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRh
IHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29u
dGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rv
ci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUg
Z2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGlt
cG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlT
dG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3Bl
cmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNp
bmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFs
dWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhlIGFycmF5Ci0gICAgICAgIHVuc2lnbmVk
IG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxsb2NCYXNlOyAvLyBQb2lu
dGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBpbmcgdGhpcyBw
b2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBsZWFrIGRldGVj
dG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIC8vIE5lZWRzIHRvIGJl
IGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCi0gICAgICAgIHVpbnRwdHJfdCBt
X2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0cl90IG1fcGFkZGluZzsKLSNlbmRpZgot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Ci0KLSAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1
ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NC
YXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxv
Y0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0gICAgfTsKLQog
ICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBX
YWxrZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKKyAgICBwdWJsaWM6CisgICAgICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCiAgICAgcHJvdGVjdGVkOgotICAgICAg
ICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQotICAgICAgICAgICAgLCBtX2luZGV4QmlhcygwKQotICAgICAgICAgICAgLCBtX3N0
b3JhZ2UoMCkKLSAgICAgICAgICAgICwgbV9zcGFyc2VWYWx1ZU1hcCgwKQorICAgICAgICBleHBs
aWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNBcnJheSogdHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwotICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgZmlu
YWxpemUoSlNDZWxsKik7Ci0KICAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAg
ICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlv
biBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKQEAgLTE2NywyNSArNTcsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6OnB1dERpcmVjdCog
bWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3Vs
dGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KLSAgICAgICAgLy8g
VGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwg
ZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9v
bCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChjYW5TZXRJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAg
c2V0SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAg
ICAgIC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEg
UmVnRXhwTWF0Y2hBcnJheS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTE5OSw5OSArNzUsMjkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGNvdW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsg
cmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0g
ICAgICAgIEpTVmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRl
eCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9p
ZCBzZXRJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdl
LT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSAr
IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUlu
ZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAg
QXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXph
dGlvbik7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhl
IG5leHQgaW5kZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAg
ICAgICAgICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4g
dGhpcyBudW1iZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VS
VChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbmxpbmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxp
emVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3Ro
KTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlh
bExlbmd0aC4KLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25J
bmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNT
RVJUKG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAg
ICAgICAgcmV0dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAg
ICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsK
ICAgICAgICAgdm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWlu
dDMyX3QgbGVuZ3RoKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0
aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJk
aWZmX3Qgc3RvcmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0
YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25h
cnlNb2RlKEpTR2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUodW5zaWduZWQgdmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAgICAgICAgewot
ICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsK
KyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygp
OworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpOwogICAgICAgICB9CiAKQEAgLTMwMSw0MCArMTA3LDU2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2
b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBp
bmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwog
ICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVk
IGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpT
R2xvYmFsRGF0YSYpOwotCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3Jt
YWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNp
c3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQg
bV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAg
dW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9j
a3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7
Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJl
IHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
X3NwYXJzZVZhbHVlTWFwOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVN
YXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1
ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKIAor
ICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxE
YXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3Ro
KSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBz
dG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7Cisg
ICAgfQorCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7Ci0gICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRl
cmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBK
U0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXkt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAg
fQogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0
aW9uVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVu
Z3RoKTsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7
CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRp
YWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFw
ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5n
dGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
IH0KIAogICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSk7CkBAIC0zNTMsMzAgKzE3NSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwp
IHsgcmV0dXJuIGNlbGwtPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBp
bmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlz
SlNBcnJheSh2LmFzQ2VsbCgpKTsgfQogCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6
ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1p
dCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBj
YW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVl
IG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4
KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNo
LU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRF
WCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0Fy
cmF5OjpzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBB
U1NFUlQodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAot
ICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0
IHByb3ZpZGVkICh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAg
ICAgICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24g
Y2Fubm90IG92ZXJmbG93LgotICAgICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBk
ZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBpbiBwcmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5v
dCBiZSBwb3NzaWJsZSwgcHJvdmlkZWQgdGhhdAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIGlzIGNvcnJlY3RseSBkZWZpbmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAt
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkg
LyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXpl
ID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSkpOwotICAgIAotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNB
cnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2
ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJp
bmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAgICAgIH0KLQorICAg
ICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZh
bGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7
IH0KICNlbmRpZgpAQCAtMTYwLDYgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBzdGF0aWMgZnVuY3Rpb25z
IGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJsZQogICAgICAgICBzdGF0aWMg
SlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogICAgICAgICBzdGF0aWMgVVN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKICAg
ICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE3LDcgKzMxNyw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG8KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5j
dGlvbigpICYmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMjks
NyArMzI5LDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAg
ICAgfQotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVu
Y3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTI2
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxOSw4ICs1MTksOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgaWYgKG1faXNBcnJheSkgewogICAgICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAg
ICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBpZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheSht
X29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHZhbHVlID0g
YXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG1f
aXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleFF1aWNrbHko
aW5kZXgpKQorICAgICAgICAgICAgdmFsdWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0
SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChtX29iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBl
eGVjLCBpbmRleCwgc2xvdCkpCkBAIC02ODUsOCArNjg1LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJ
bmRleChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5k
ZXgoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5
LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVl
ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJyYXktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
YXJyYXksIG1fZXhlYywgaW5kZXgsIHNsb3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Vi
a2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDQsNiArNDQsMTEgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0
ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKKy8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBm
b3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCisvLyBU
aGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVm
aW5lZCBhYm92ZS4KK3N0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKKwogSlNDZWxs
KiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQogewogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKCk7CkBAIC04NiwyOSArOTEsODEgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImIHZp
c2l0b3IsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogewotICAgIEFT
U0VSVChzdG9yYWdlKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKICAgICBBU1NFUlQoc3RvcmFn
ZVNpemUpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5
SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwot
ICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0g
MTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNl
T2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFs
bG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90
IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIp
KSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Cisg
ICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9CisgICAgc2l6ZV90
IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAgICBwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90
aGVyd2lzZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9u
KHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgLy8gTWFy
ayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJl
bnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgpOwogICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCktPnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIG1fb3V0T2ZMaW5l
U3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBzdG9yYWdlU2l6
ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJ
bmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPmFycmF5U3RvcmFn
ZSgpLT5jb3B5SGVhZGVyRnJvbSgqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3U3RvcmFn
ZS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld1N0b3JhZ2UtPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJy
ZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG5l
d1N0b3JhZ2UtPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZs
eTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3Jh
Z2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJh
eSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHN0b3JhZ2UtPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwgc3RvcmFnZS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE3OSw5IEBAIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3Rv
cmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3Is
IHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25O
b25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzE5OSw5IEBA
IHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0
b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAo
c3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0
b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3Jh
Z2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFs
T2JqZWN0KCk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3Rv
cmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAgKzIxOCw0OCBAQCBVU3RyaW5nIEpTT2Jq
ZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsK
IH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CisgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIg
aW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3Ig
YW55b25lIHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVy
cmlkaW5nCisgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAg
IAorICAgIGlmIChpIDw9IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFs
dWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ICE9IG1h
cC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYg
KzI2OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAg
QVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhl
ZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0
ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90
eXBlOwpAQCAtMjM1LDkgKzMzNywxNDIgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmpl
Y3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShp
ID49IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5W
ZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aCk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
IH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNP
YmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0
b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQg
dXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgbV92ZWN0b3JMZW5ndGgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAg
ICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5v
IG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBh
cmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX3N0b3JhZ2UtPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCAwKTsK
KyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPm1faW5kZXhCaWFzID0g
MDsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1
cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4
aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sK
KyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsK
KyAgICBBU1NFUlQob2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodChn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxl
bmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFy
cmF5U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBB
U1NFUlQoIXJlc3VsdC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCghcmVzdWx0LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgcmVzdWx0LT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICByZXN1bHQtPnNldFZl
Y3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAgPSAwOwor
ICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKyAgICByZXN1bHQtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgcmVz
dWx0LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICBzZXRCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
Z2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxE
YXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVybiBzdG9y
YWdlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTMwNCw2ICs1MzksMTAg
QEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9vbCBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAg
IHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0
aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNG
b3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU3MSw0NSBAQCBib29sIEpTT2JqZWN0OjpoYXNP
d25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0
aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAKKyAgICBpZiAo
aSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAg
ICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+
c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3MzksNTEgQEAgdm9pZCBKU09iamVjdDo6
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAgIC8vIEFkZCBu
dW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQg
Y29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRo
IGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAgICAvLyBpcyBpbmNyZWRpYmx5IGlu
ZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gs
CisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1
cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRjaCAob2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnR5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1h
cCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOworICAgICAgICAgICAga2V5
cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwor
ICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRl
cyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKICAg
ICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVy
dHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogICAgIG9i
amVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkBAIC01MTUsOCArODM0LDcgQEAg
dm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0
OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYg
KGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5
TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFs
RGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArODkxLDExIEBAIGJvb2wgSlNPYmplY3Q6
OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJf
SU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbikKK05FVkVSX0lOTElO
RSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xv
dCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVu
Y3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0ZXIoKSkgeworICAg
IGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihnZXREaXJlY3RP
ZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAgIGlmICghc3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRo
aXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBv
ZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0
dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2ICs5MjEsNTIyIEBAIFN0cnVjdHVy
ZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7
CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2
b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
UHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewotICAgIEFTU0VSVChuZXdTaXpl
ID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Cisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAg
ICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAg
ICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSkgeworICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZ2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJP
YmplY3QoKTsKKyAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNj
cmlwdG9yLnNldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iu
c2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVy
T2JqZWN0KCk7CisKKyAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRl
cjo6Y3JlYXRlKGV4ZWMpOworICAgICAgICBpZiAoZ2V0dGVyKQorICAgICAgICAgICAgYWNjZXNz
b3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7CisgICAgICAgIGlmIChz
ZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgc2V0dGVyKTsKKworICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBhY2Nlc3Nvcik7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFk
T25seTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChkZXNjcmlwdG9yLmlz
R2VuZXJpY0Rlc2NyaXB0b3IoKSk7CisgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOworfQorCisv
LyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhl
ZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoaW5k
ZXggIT0gMHhGRkZGRkZGRik7CisKKyAgICBpZiAoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsK
KyAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0
byBhIHJlZ3VsYXIgYXJyYXkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3Rp
Y2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwg
ZGVmYXVsdCB0byBmYWxzZQorICAgICAgICAvLyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJy
ZW50bHkgZXhpc3RzIG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIg
Y3VycmVudCAndHJ1ZScKKyAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkg
Y291bGQgYmUgdXNlZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcg
J1NwYXJzZU1vZGUnKS4KKyAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9y
LnZhbHVlKCksIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9i
YWxEYXRhKCkpOworICAgIH0KKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgQVNTRVJUKG1hcCk7CisK
KyAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4K
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhp
cywgaW5kZXgpOworICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUg
b2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCisgICAgLy8gMy4g
SWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVq
ZWN0LgorICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IHRydWUsIHRoZW4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJs
ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRv
cihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFu
IG93biBkYXRhIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2Ug
W1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJs
ZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKKyAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJ
ZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUg
YXR0cmlidXRlIG9mIHRoZSBuZXdseQorICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNl
dCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3Qg
YmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nl
c3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCisgICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0
XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0
ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQorICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUg
b2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9m
IHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5CisgICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVm
YXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KKworICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKKyAgICAgICAgZW50cnlJbk1h
cC0+Z2V0KGRlZmF1bHRzKTsKKworICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBl
bnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7CisgICAgICAgIGlmIChpbmRleCA+PSBt
X3N0b3JhZ2UtPm1fbGVuZ3RoKQorICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGlu
ZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJu
IHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgorICAgIC8vIDYuIFJldHVy
biB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5k
IHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUg
U2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJl
bnQ7CisgICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOworICAgIGlmIChkZXNjcmlwdG9yLmlz
RW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSB0aGVuCisgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
CisgICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCisgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNl
bnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3Vy
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgIC8v
IDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJl
IHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCisgICAgICAgIGlmIChkZXNjcmlw
dG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3Jp
cHRvci5lbnVtZXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2Yg
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgfQorCisgICAgLy8gOC4gSWYgSXNHZW5l
cmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBp
cyByZXF1aXJlZC4KKyAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7
CisgICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgorICAgICAg
ICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgorICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZv
ciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIC8vIDkuYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCisgICAgICAgICAgICAvLyBkYXRhIHByb3Bl
cnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVz
IG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncworICAgICAgICAgICAgLy8gW1tDb25maWd1cmFi
bGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRo
ZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8KKyAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQg
dmFsdWVzLgorICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBu
YW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHBy
b3BlcnR5LgorICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0
aGUgY29udmVydGVkIHByb3BlcnR5J3MgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxl
XV0KKyAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJv
cGVydHkncyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICB9IGVs
c2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRv
cihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVu
CisgICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJh
YmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEwLmEu
aS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Ug
YW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAg
ICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRo
ZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5b
W1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1
ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSBy
ZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwLmIu
IGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28g
YW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclBy
ZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7CisgICAgICAgICAgICAvLyAxMS4g
RWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25m
aWd1cmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtb
U2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1d
LCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0
dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRo
ZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tH
ZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50
LmdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNl
bnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVy
dHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAgIHB1
dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQp
OworICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBK
U09iamVjdDo6ZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKQoreworICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKK30KKworU3BhcnNlQXJy
YXlWYWx1ZU1hcCogSlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5ldyBT
cGFyc2VBcnJheVZhbHVlTWFwOworICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCA9IHJl
c3VsdDsKKyAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplQXJy
YXlEYXRhKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQg
dGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8v
IHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgordm9pZCBKU09iamVj
dDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBkZWxldGUgc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisgICAgc3RvcmFnZS0+bV9z
cGFyc2VNYXAgPSAwOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAv
LyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUg
Y3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICBB
U1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCi0gICAgUHJvcGVydHlT
dG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAg
ICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKIAotICAgIC8vIFdlIGhhdmUg
dGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qg
b2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZvaWQq
IHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5ld1Np
emUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7CisgICAgLy8g
Rmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJz
ZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkg
aXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2Rl
LCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxl
KCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAg
ICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0
byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rv
ci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0
YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdl
IHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2
ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVz
ZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAg
JiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUg
bV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxl
bmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93
aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFw
LT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBh
IG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAv
LyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMg
c2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxz
LgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAt
PnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxl
bmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3Rv
cmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFy
cmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0
b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXRO
b25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3Qp
CisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFT
U0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6
IHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5
U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKGkgKyAxKSk7CisgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ0UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lk
ZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgp
OworICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhh
bmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisg
ICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4
dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3Jl
YXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAg
IAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChp
ICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBi
ZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAg
ICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEp
KSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0
IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisg
ICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsK
KyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUg
YXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3Qg
ZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNp
bmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisg
ICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2Rl
IGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBm
YWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJl
dHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
CisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBk
YXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisg
ICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBk
ZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3Jb
aXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUg
dGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAg
ICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAg
ICAgIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwg
aSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAgICAgICBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAs
IGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdFKGV4ZWMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitBTFdB
WVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQg
Y3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVz
aXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVk
IGluY3JlYXNlZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKGN1cnJl
bnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVu
Z3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2Ug
aWYgKCFtX3ZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2ly
ZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1h
dGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChu
ZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNy
ZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAg
Ly8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAg
aW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsg
KGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3Ro
ID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRM
ZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVu
Z3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgp
Cit7CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aChnZXRBcnJheUxlbmd0aCgpLCBkZXNp
Z25lZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVu
dCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2Ug
dmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQg
Zm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KKyAgICBp
ZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisK
KyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdlLT5tX2luZGV4QmlhczsKKyAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQo
bmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGgg
PSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKKworICAgIC8vIEZhc3QgY2FzZSAtIHRo
ZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vu
c2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgp
KTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJm
bHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNh
cGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5n
dGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKGluZGV4QmlhcyA+PiAxLCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAvLyBDYWxjdWxh
dGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0
eS4KKyAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBu
ZXdJbmRleEJpYXM7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0
ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIGluZGV4
Qmlhcywgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBv
bGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAgIG1fYnV0dGVyZmx5ID0gbmV3
QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAg
QVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFn
ZTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBlID09IFNv
cnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFw
KTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBl
ICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZhbHVlLmlz
VW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3Jh
Z2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAt
PmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFY
X0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAg
ICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAg
ICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgfQorICAg
IH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJmbHkqIEpT
T2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCBy
ZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CisgICAgLy8gY2FwYWNpdHksIHNp
bmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2Uu
CisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQpAQCAtNjMwLDEwICsxNDQ0LDQ2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBKU0NlbGwq
IGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJl
KCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2Vs
bCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+
Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zm
c2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToK
KyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVl
LmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVl
TWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1h
cC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVz
Y3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9v
bCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAt
NzA0LDI2ICsxNTU0LDI2IEBAIHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERh
dGE7CiB9OwogCi1ib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhy
b3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdy
ZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5
IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVw
bGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhv
d2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBE
b250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2Ug
dGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUg
c2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdl
IGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxseQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJy
ZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFt
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVy
dHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJl
dmVudGVkIQotICAgICAgICBpZiAoIW9iamVjdC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQog
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJB
dHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5z
aWJsZS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERlc2NyaXB0b3Iu
c2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMs
IHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCks
IG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSkK
QEAgLTc0OSw4ICsxNTk5LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUg
YXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNjcmlwdG9yLmlz
R2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0Vx
dWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVu
dCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywg
dGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2MTIsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5p
c20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1
dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAg
ICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChj
dXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFu
ZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTYzNCw4IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQogICAg
ICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0
b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJl
bnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhp
cywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhl
YywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hh
bmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9w
ZXJ0eQpAQCAtODAyLDcgKzE2NTIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRl
clNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2NjIsMzcgQEAgYm9vbCBKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRl
cihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlm
IChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhp
cywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRl
ciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQor
eworICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBpbmRleGVkIHBy
b3BlcnR5IHN0b3JhZ2UuCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAg
ICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1
bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBh
c3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4gUmVq
ZWN0IGlmIHN1Y2NlZWRlZCBpcyBmYWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0gb2xk
TGVuCisgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsg
MS4KKyAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVu
RGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVy
biB0cnVlLgorICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIG9iamVj
dC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bk5v
bkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJp
bmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI0LDIxIEBACiAjZGVm
aW5lIEpTT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJBcnJheUNv
bnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVy
Zmx5LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmll
cnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eVNsb3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKICNpbmNs
dWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCi0jaW5jbHVk
ZSAiU3RvcmFnZUJhcnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXAuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNzksNiArODMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFjY2Vz
c29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0dGVyL3NldHRlcgogICAgIH07
CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9u
ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChS
ZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93X0ZpcnN0
SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKERvbnRFbnVtIDwgRmlyc3RJ
bnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09N
UElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBGdW5jdGlvbl9p
c19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChBY2Nl
c3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFjY2Vzc29yX2lzX2JlbG93X0ZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNGaW5hbE9iamVjdDsKIAogICAgIGNsYXNz
IEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05Niw2ICsxMDcsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCk7
CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC0xMjAsOCArMTMzLDE3NiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0
aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVk
CisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gVGhp
cyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51
bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBw
dXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAg
ICAgIHNldEluZGV4UXVpY2tseShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
ICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldEluZGV4UXVpY2tseShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAg
ICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIEFT
U0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4gc2Vx
dWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNl
dCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAorICAgICAgICAgICAg
ICAgIC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBu
dW1iZXIgb2YgcHJvcGVydGllcy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9p
bml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1
bnNpZ25lZCBuZXdMZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFs
aXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KKyAgICAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IHN0b3JhZ2UtPmxlbmd0
aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhl
IGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRl
eGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICAvLyBw
dXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVmaW5lT3du
UHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25z
dWx0ZWQKQEAgLTE0Nyw2ICszMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKQEAgLTIwMyw4ICszODUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2Fm
ZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgp
OyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4g
bV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
b3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9u
Rm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3
LDcgKzQxMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5s
aW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0g
bG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CkBAIC0yNjksMTcgKzQ1NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBzdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1
bmN0aW9uc1JlaWZpZWQoKTsgfQogICAgICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9y
RGVsZXRlKEV4ZWNTdGF0ZSogZXhlYyk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJv
cGVydHlTdG9yYWdlIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eVN0b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0
QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOworICAgICAg
ICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqKTsg
Ly8gWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gY2FsbCB0aGlzLgogICAgICAgICAKICAgICAg
ICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9p
ZCBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOwogCi0gICAgICAgIHZvaWQqIGFkZHJlc3NPZk91dE9mTGluZVN0b3Jh
Z2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gJm1fb3V0T2ZMaW5lU3RvcmFnZTsK
LSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+
ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcyk7CkBAIC0yOTMsNyAr
NDc0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwotICAgICAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IHB0cmRpZmZfdCBidXR0ZXJmbHlPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX2J1dHRlcmZseSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gJm1fYnV0dGVyZmx5OworICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzE2LDE0ICs1MDYs
NjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVG8gaW5zdGFudGlhdGUgb2JqZWN0
cyB5b3UgbGlrZWx5IHdhbnQgSlNGaW5hbE9iamVjdCwgYmVsb3cuCiAgICAgICAgIC8vIFRvIGNy
ZWF0ZSBkZXJpdmVkIHR5cGVzIHlvdSBsaWtlbHkgd2FudCBKU05vbkZpbmFsT2JqZWN0LCBiZWxv
dy4KLSAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAg
IEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJlbW92ZURpcmVjdChnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLm1faW5oZXJpdG9ySURLZXkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2b2lkIHZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFn
ZSwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKyAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisKKyAgICAgICAgLy8g
Q2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUg
aXQgaGFzIGFycmF5CisgICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3
aXNlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgfCBIYXNBcnJheVN0
b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHRv
IHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIC8v
IG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuCisgICAgICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlT3JaZXJvKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkg
c3RvcmFnZS4gVXNlCisgICAgICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0IHRvIHBlcmZvcm0g
YWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhlCisgICAgICAgIC8vIG9iamVjdCB0
byBiZSBjb252ZXJ0ZWQgdG8gaGF2ZSBhcnJheSBzdG9yYWdlLCBpZiBpdCBkaWRuJ3QgaGF2ZSBp
dAorICAgICAgICAvLyBhbHJlYWR5LgorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAg
ICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBi
b29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcg
KzU3Niw0NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAg
ICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpT
R2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8
UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpT
Q2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3Jl
YXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7Ci0KLSAgICAgICAgU3RvcmFnZUJhcnJpZXIg
bV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVz
Y3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAgICAgICBib29sIGRlZmluZU93bkluZGV4
ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CisgICAgICAg
IHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICBib29sIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5
U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRO
ZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExl
bmd0aCk7CisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKTsKKyAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworCisgICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVj
a1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
aywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
KyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5
cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZvaWQgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lz
dGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJ1dHRlcmZs
eSogbV9idXR0ZXJmbHk7CisgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgcHJp
dmF0ZToKICAgICAgICAgdm9pZCogbV9wYWRkaW5nOwogI2VuZGlmCiAgICAgfTsKQEAgLTM3Miw4
ICs2NDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgot
ICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSkKKyAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IDApCisgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU2LDExICs3MjQsNiBAQCBp
bmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0CiAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0ZpbmFsT2JqZWN0LCBtX2lubGluZVN0b3JhZ2UpOwogfQogCi1pbmxpbmUg
c2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKQotewotICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fb3V0T2ZMaW5lU3RvcmFnZSk7Ci19Ci0KIGlu
bGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbE9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxPYmplY3RUeXBlOwpAQCAt
NDkxLDE4ICs3NTQsMTcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsVGhpcygpIGNv
bgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsVGhp
c1R5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRPdXRPZkxpbmVTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsK
LSAgICBpZiAoIXN0b3JhZ2UpIHsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAg
ICB9CiAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgbV9vdXRP
ZkxpbmVTdG9yYWdlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdG9yYWdlKTsKKyAgICBtX2J1dHRl
cmZseSA9IGJ1dHRlcmZseTsKK30KKworaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK3sKKyAgICBt
X2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RF
bXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNTQw
LDkgKzgwMiw5IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKICAg
ICByZXR1cm4gYXNPYmplY3QodmFsdWUuYXNDZWxsKCkpOwogfQogCi1pbmxpbmUgSlNPYmplY3Q6
OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCB0aGlzLCAwKQorICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogewogfQogCkBAIC01OTAs
MTUgKzg1MiwxNyBAQCBpbmxpbmUgSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdChFCiAK
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbiA9IGdl
dERpcmVjdExvY2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSkgewotICAg
ICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2Nh
dGlvbi0+aXNHZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3Qoc2xvdCwgbG9jYXRpb24pOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChMSUtF
TFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0
RGlyZWN0T2Zmc2V0KG9mZnNldCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVy
U2V0dGVyUHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCisgICAgICAgICAg
ICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgbG9jYXRpb24tPmdldCgpLCBvZmZzZXRGb3JM
b2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCB2YWx1
ZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9u
IHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtNjg0LDYgKzk0
OCw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBBU1NF
UlQodmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJp
YnV0ZXMgJiBBY2Nlc3NvcikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKHByb3BlcnR5
TmFtZS5hc0luZGV4KCkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKIAogICAgIGlmIChz
dHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0
dHJpYnV0ZXM7CkBAIC03MTIsMTEgKzk3NywxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNF
eHRlbnNpYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdl
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2Fw
YWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJl
KCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAg
c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7
CisgICAgICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVy
ZSgpKTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC03MzAsMTMgKzk5NSwxMyBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zm
c2V0KSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0
b3JhZ2UoKTsgCisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7
CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
IAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERpcmVj
dE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBh
IG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBj
dXJyZW50bHkgY2FjaGFibGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVu
Y2FjaGFibGUgc3RhdGUuCkBAIC04MDMsOSArMTA2OCw5IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRTdHJ1Y3R1cmVBbmRSZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIGds
b2JhbERhdGEsIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3Ry
dWN0dXJlKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlKQpAQCAtODM5LDExICsxMTA0LDExIEBAIGlubGluZSB2b2lkIEpT
T2JqZWN0OjpwdXREaXJlY3QoSlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdl
KCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBpZiAo
c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdT
dG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmpl
Y3QodmFsdWUpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3Jh
Z2UsIHN0cnVjdHVyZSgpKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUoKSk7CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNl
dCwgdmFsdWUpOwogfQogCkBAIC05MzUsNiArMTIwMCwxMSBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lz
dGVyIFJlZ2lzdGVyOjp3aXRoQ2FsCiAgICAgcmV0dXJuIHI7CiB9CiAKK2lubGluZSBzaXplX3Qg
b2Zmc2V0SW5CdXR0ZXJmbHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBv
ZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3Bl
cnR5U3RvcmFnZSgpOworfQorCiAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBwYXRjaGluZyBjb2Rl
IHdoZXJlIHlvdSB3YW50IHRvIGVtaXQgYSBsb2FkIG9yIHN0b3JlIGFuZAogLy8gdGhlIGJhc2Ug
aXM6CiAvLyBGb3IgaW5saW5lIG9mZnNldHM6IGEgcG9pbnRlciB0byB0aGUgb3V0LW9mLWxpbmUg
c3RvcmFnZSBwb2ludGVyLgpAQCAtOTQzLDEzICsxMjEzLDEzIEBAIGlubGluZSBzaXplX3Qgb2Zm
c2V0UmVsYXRpdmVUb1BhdGNoZWRTdG8KIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOworICAg
IHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiB9
CiAKIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBv
ZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9y
YWdlKCk7CiAgICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG9mZnNldCk7CiB9CkBAIC05NTcsNyArMTIyNyw3IEBAIGlubGluZSBpbnQgaW5kZXhS
ZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZz
ZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAg
IFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5lbmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihl
eGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cisg
ICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojpw
dXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1pY1Nj
b3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAg
cmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2Rl
ZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3Bl
cnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29u
c3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJv
cGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0
Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0
IHJlc3VsdCkKLSAgICAgICAgICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qt
PnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpKQorICAgICAgICBSZWdFeHBNYXRjaGVzQXJy
YXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwg
TWF0Y2hSZXN1bHQgcmVzdWx0KQorICAgICAgICAgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGJ1dHRlcmZseSkKICAg
ICAgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQogICAgICAgICAgICAgLCBtX3N0YXRlKFJlaWZp
ZWROb25lKQogICAgICAgICB7CkBAIC00Niw3ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBN
YXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1hdGNoZXNBcnJheShnbG9iYWxE
YXRhLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7
CisgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5
KGdsb2JhbERhdGEsIDApOworICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0
YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwogICAgICAgICAg
ICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwx
MSArMTE0LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAg
ICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
IH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisK
KyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3Jp
dGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBC
YXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQorCisgICAg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBjb25zdDsKKyAgICB2b2lkIGdldChQ
cm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBj
b25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1
aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4g
TWFwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIE5vcm1hbCA9IDAsCisgICAgICAgIFNw
YXJzZU1vZGUgPSAxLAorICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKKyAgICB9OworCitw
dWJsaWM6CisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYg
TWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6QWRk
UmVzdWx0IEFkZFJlc3VsdDsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQorICAgICAgICA6
IG1fZmxhZ3MoTm9ybWFsKQorICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKworICAgIGJv
b2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1v
ZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1f
ZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0K
KworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9m
bGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1Jl
YWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMg
bWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEFkZFJlc3VsdCBhZGQoSlNPYmplY3QqLCB1bnNpZ25l
ZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkp
OyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNr
IHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7
IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFw
LnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9t
YXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
cC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24u
CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigp
OyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7
IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAgRmxhZ3MgbV9mbGFnczsKKyAgICBz
aXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKKyNp
bmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxp
bmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFk
ZChKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGkpCit7CisgICAgU3BhcnNlQXJyYXlFbnRyeSBl
bnRyeTsKKyAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwor
CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7CisgICAgc2l6ZV90
IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBv
cnRlZENhcGFjaXR5KSB7CisgICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWdu
ZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKyAgICAgICAgbV9yZXBvcnRl
ZENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
K3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJh
eUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMg
bm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAg
ICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIShlbnRyeS5h
dHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYg
UmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKKyAgICBBU1NF
UlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9IGFz
R2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0ZXIp
IHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRh
KTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHZhbHVl
KTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJn
cyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBp
KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5
cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhh
dCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4
dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyBy
ZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRl
bnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICB9CisKKyAgICBl
bnRyeS5hdHRyaWJ1dGVzID0gMDsKKyAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBh
cnJheSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAoreworICAgIEpTVmFsdWUg
dmFsdWUgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOworCisgICAgaWYgKExJS0VM
WSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNH
ZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikgeworICAgICAg
ICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2xv
dC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50
cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Cit7CisgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKK30KKworaW5s
aW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIGFycmF5KSBjb25zdAoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Cisg
ICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0
ZXIoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0g
YXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdl
dHRlciwgY2FsbERhdGEpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworfQorCitpbmxpbmUgSlNWYWx1
ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIWF0dHJpYnV0ZXMpOworICAgIHJldHVybiBCYXNlOjpnZXQoKTsKK30KKworaW5saW5lIHZv
aWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmaXQtPnNlY29uZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
U3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZUJh
cnJpZXJfaAotI2RlZmluZSBTdG9yYWdlQmFycmllcl9oCi0KLSNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKLSNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5
cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwotdHlwZWRl
ZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsK
LQotY2xhc3MgU3RvcmFnZUJhcnJpZXIgewotcHVibGljOgotICAgIGVudW0gVW5jaGVja2VkVGFn
IHsgVW5jaGVja2VkIH07Ci0gICAgU3RvcmFnZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0NlbGwqIG93bmVyLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0gICAg
ICAgIHNldChnbG9iYWxEYXRhLCBvd25lciwgc3RvcmFnZSk7Ci0gICAgfQotICAgIAotICAgIFN0
b3JhZ2VCYXJyaWVyKFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAg
ewotICAgICAgICBzZXQoc3RvcmFnZSwgVW5jaGVja2VkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXQoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2Up
Ci0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIHNldChQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAg
IHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSB7IHJl
dHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+IG9wZXJhdG9yKigpIHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX3N0b3JhZ2VbaV07IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRv
cltdKHNpemVfdCBpKSB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICAKLSAgICBDb25zdFBy
b3BlcnR5U3RvcmFnZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBQcm9w
ZXJ0eVN0b3JhZ2UgZ2V0KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0KLSAgICBib29sIG9wZXJh
dG9yISgpIHsgcmV0dXJuICFtX3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVy
dHlTdG9yYWdlIG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkK
ICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorU3RydWN0
dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZv
LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkK
ICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5n
ZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8pCisgICAgLCBtX2luZGV4aW5ndHlwZShp
bmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlzLCBnbG9i
YWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAs
IG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJ
bmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBAQCBjb25zdCBDbGFzc0luZm8gU3RydWN0
dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCiAgICAgLCBtX3R5cGVJ
bmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbikKKyAgICAsIG1faW5kZXhp
bmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBqc051bGwoKSkK
ICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50
U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcsNiArMTk5LDcgQEAgU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAg
ICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8oKSkKKyAgICAsIG1faW5kZXhpbmdUeXBl
KHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3Byb3Rv
dHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAg
LCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25X
YXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC01MDIsNiArNTA1LDM3IEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNp
dGlvbjsKIH0KIAorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0
cnlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRv
QXR0cmlidXRlcyh0cmFuc2l0aW9uKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
bmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
LCB0cmFuc2l0aW9uKTsKKyAgICAKKyAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRp
b24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkgewor
ICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3Vz
ID09IGF0dHJpYnV0ZXMpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0
dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9p
bmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9w
cm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0
dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9w
cmV2aW91cykKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAo
Z2xvYmFsRGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0
ZVByb3BlcnR5TWFwKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
VGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHJldHVybiB0cmFuc2l0aW9u
OworfQorCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4K
IGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2lu
Y2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAg
LTY4LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwg
QmFzZTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25z
dCBDbGFzc0luZm8qKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFs
RGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZv
JiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpA
QCAtMTAwLDYgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBzZWFsVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBj
b25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVy
biBtX3R5cGVJbmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0
eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9Cisg
ICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAg
ICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0
aGlzLCBnbG9iYWxPYmplY3QpOyB9CkBAIC0zMzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZSwgbV9jbGFzc0luZm8pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
Jik7CiAgICAgICAgIApAQCAtMzYzLDcgKzM3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHBy
aXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJ
bmZvKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEm
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNv
bnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1
Y3R1cmUqKTsKIApAQCAtNDE2LDYgKzQyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsK
IAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9p
bmRleGluZ1R5cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmpl
Y3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90
b3R5cGU7CkBAIC00NDcsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBi
b29sIG1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBt
X2F0dHJpYnV0ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVz
SW5QcmV2aW91cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwog
ICAgICAgICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBp
bmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJl
PihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBl
SW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAog
I2RlZmluZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdU
eXBlLmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNp
dGlvbnMgdGhhdCBkb24ndCBoYXZlIHRvIGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisv
LyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90
IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKy8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhl
IHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5
VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNp
Z25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7Cisg
ICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxp
bmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9u
KSB7CisgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5
cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBvbGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdT
aW5nbGVTbG90RmxhZyA9IDE7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161103</attachid>
            <date>2012-08-28 17:49:05 -0700</date>
            <delta_ts>2012-08-28 21:02:05 -0700</delta_ts>
            <desc>it builds.</desc>
            <filename>butterflies_patch_25.diff</filename>
            <type>text/plain</type>
            <size>392065</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2OTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4OSBA
QAorMjAxMi0wOC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNPYmplY3RS
ZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBZGphY2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEFkamFjZW5jeUxp
c3QpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpwdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3Rv
Q2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpy
dW4pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNl
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9w
bmFtZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAg
ICAgICAoSlNDOjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jTWFwKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
U29tZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5oOgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3Rv
cmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OmNvcHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppblNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNwYXJz
ZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFz
ZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Oklu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpz
ZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5
KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpT
QWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3Ap
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29t
cGFjdEZvclNvcnRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0
YWJsZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpib3VuZEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rp
b25Db25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5o
OgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRh
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJ
bml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5n
TW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpv
ZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0
SW5CdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0xp
dGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQzo6b2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U3RvcmFn
ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAg
ICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAg
IChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAg
ICAgICAoUmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlamVjdC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnJlamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpTcGFy
c2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAo
SlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VB
cnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpy
ZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpub3RGb3VuZCk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1wdHkpOgorICAgICAgICAoSlND
OjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFy
cmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpi
ZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmVuZCk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZCk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5
RW50cnk6OmdldCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJz
ZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAg
KFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6
CisgICAgICAgIChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisKIDIwMTItMDgtMjggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJvbGxlZCBvdXQg
cjEyNjkyOCwgdGhpcyBicm9rZSBzdHVmZiA6Jy0oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNiBCam9lcm4g
R3JhZiAoYmpvZXJuLmdyYWZAZ21haWwuY29tKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw4ICsyMiwx
MCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb21w
bGV0aW9uLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDcgKzE4Nyw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG8pOwogCi0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ5LDcgKzQ0OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBh
cmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwogICAgIEpTQ29udGV4dFJlZiBleGVjUmVm
ID0gdG9SZWYoZXhlYyk7CkBAIC00ODQsNyArNDg0LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93blBybwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFBhcmVudDo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lv
biAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJp
dmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEYXRlQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSw2ICsxODksMTcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0
NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
QjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEMx
NUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBG
MTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
QjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2
MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZC
N0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0Iy
IC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhF
MzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4
RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgw
MEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQw
MEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4
MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NjQsNyArNTc1
LDYgQEAKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1
MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1
QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZG
NTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0Ug
LyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07Ci0JCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAv
KiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjEx
MUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWls
ZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3
NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQlBN0I0OEY0OTBF
RTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYg
LyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05NDUsNiArOTU1LDE3IEBACiAJ
CTBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdBMTRGNUM3RDQw
MDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0Iy
IC8qIEFycmF5U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJh
eVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEIxNUVEOEUz
ODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCdXR0ZXJmbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMxNUVE
OEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8q
IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ1R5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eVN0b3Jh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTExNUVEOEUzODAwRjE2
N0IyIC8qIFJlamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTIxNUVEOEUzODAwRjE2N0Iy
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI3RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQx
NDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDEsNyArMTM2Miw2IEBACiAJCUE3NjdG
RjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJ
VC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyog
SklUV3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdy
aXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgxRTM1ODE0MTk3
MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RvcmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc5RURCMDgxMTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3lu
dGF4Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVj
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDIwLDYgKzIwNDAsMTcgQEAK
IAkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAv
KiBBcnJheUNvbnZlbnRpb25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8q
IEFycmF5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0
ZXJmbHkuaCAqLywKKwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oICovLAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlci5oICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3Bl
cnR5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3Qu
aCAqLywKKwkJCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oICovLAorCQkJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBH
Q0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAv
KiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlz
dC5oICovLApAQCAtMjIwNCw3ICsyMjM1LDYgQEAKIAkJCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0
RTIgLyogU2NvcGVDaGFpbk1hcmsuaCAqLywKIAkJCQk5MzMwM0ZFODBFNkE3MkI1MDA3ODZFNkEg
LyogU21hbGxTdHJpbmdzLmNwcCAqLywKIAkJCQk5MzMwM0ZFQTBFNkE3MkMwMDA3ODZFNkEgLyog
U21hbGxTdHJpbmdzLmggKi8sCi0JCQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3Jh
Z2VCYXJyaWVyLmggKi8sCiAJCQkJQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2
YWxBY3RpdmF0aW9uLmNwcCAqLywKIAkJCQlBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCAqLywKIAkJCQlCQzE4QzNDMDBFMTZFRTMzMDBCMzQ0NjAgLyog
U3RyaW5nQ29uc3RydWN0b3IuY3BwICovLApAQCAtMjc2MCw3ICsyNzkwLDYgQEAKIAkJCQlFNDlE
QzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJ
dGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4MUUzNTkxNDE5NzBDNzAw
MDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEy
NTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTA4LDYgKzI5MzcsMTcgQEAKIAkJCQkwRjYzOTQ4NTE1RTQ4
MTFCMDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ3
ODE1RENFMzRCMDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdFQzhDN0ExNUU2RTk1MDAwNTFFOUE5IC8qIE9wY29kZURlZmluaXRpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlD
b252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0Iy
IC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTcxNUVEOEU0NjAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTgxNUVEOEU0
NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8q
IEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2
N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUQxNUVE
OEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUUxNUVE
OEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2
ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJ
bmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcg
dHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3Vn
aC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOwor
I2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVy
biBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBoYXZlIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRz
CiAgICAgICAgICAgICAvLyBjYXNlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk1NiwxMCArOTU1LDEwIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAg
ICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5v
ZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZp
bHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdp
biwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw3ICsxMzg1LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTQw
NCw4ICsxNDAzLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAv
LyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBt
YXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2Rl
IHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9
IDMgfTsKICAgICAKKyAgICBBZGphY2VuY3lMaXN0KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5
TGlzdChLaW5kIGtpbmQpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChr
aW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9t
T2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlCiAgICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2Ug
MDoKICAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6
Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBB
cnJheTo6SlNBcnJheTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHMgOiBBcnJheTo6QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFr
ZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9y
IHdoaWNoLCB0aG91Z2ggdGhlcmUgaXMgbm8KICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhl
IGFycmF5IHByb2ZpbGUsIHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJv
bQpAQCAtMTIwLDEwICsxMjQsMTQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RW
YWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5n
U3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNB
cnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05f
QVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6
OnNfaW5mbzsKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworCisgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IEhhc0FycmF5U3RvcmFnZSkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAg
CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwpAQCAtMTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hh
ciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhp
dCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0g
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91
dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVy
biAiQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFy
cmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMi
OworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2Rl
IHsKICAgICBGb3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRv
IGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAg
R2VuZXJpYywKICAgICBTdHJpbmcsCi0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3Vu
ZHMsCisgICAgQXJyYXlTdG9yYWdlLAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAg
IEFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4
QXJyYXksCiAgICAgSW50MTZBcnJheSwKQEAgLTYxLDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9
OwogfSAvLyBuYW1lc3BhY2UgQXJyYXkKIAorLy8gSGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVu
dHMuIEZvciBleGFtcGxlLCBzYXlpbmcgImNhc2UgQWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8g
aXMgdGhlIHNhbWUgYXMgaGF2aW5nIG11bHRpcGxlIGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9m
ZiBhbGwgb2YgdGhlIG1vZGVzIHRoYXQKKy8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIg
aW4gdGhlbS4KKyNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9T
VE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJB
WV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6
Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBB
cnJheTo6TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAt
NzQsOCArMTAxLDE3IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBp
bmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNh
c2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTUwLDYgQEAg
aW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0KIAotaW5s
aW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUgbGVmdCwg
QXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAgIGxlZnQg
PT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJheU91dE9m
Qm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICByaWdodCA9
PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJheU91dE9m
Qm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0FycmF5KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGlu
ZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoICht
b2RlKSB7CkBAIC0xNDcsNyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFy
cmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2Rl
IG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDcgKzE2NzQsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNl
Ci0gICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdl
LCBiYXNlKTsKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFkZFRvR3Jh
cGgoCiAgICAgICAgICAgICBHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksCkBAIC0yMzA5LDcgKzIzMDksNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXpl
KCkpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKQEAgLTIz
NjAsMTMgKzIzNjAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9y
YWdlLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFw
aChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChw
dXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdl
LCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRv
R3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAg
ICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTYwLDcgKzExNjAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdl
dFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5j
aGlsZDEoKS5pbmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zODEsOCArMzgxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAo
c2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7Ci0gICAgICAg
IE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7Cisg
ICAgICAgIE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgaWYgKG1vZGVJ
c0pTQXJyYXkoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UgPSBOb2RlKEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgYXJyYXkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0gTm9kZShHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOwog
ICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlLnJlZigpOwogICAgICAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzoKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgor
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAg
ICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBzdHJ1Y3QgT3BJ
bmZvIHsKIHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogICAg
IAorICAgIE5vZGUoKSB7IH0KKyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAg
dG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3As
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVy
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwg
Tm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2Up
IFwKLSAgICBtYWNybyhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCisg
ICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKENo
ZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1
ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
LmgiCkBAIC0yMjQsMTQgKzIyNSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhl
Y1N0YXRlKiBlCiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OwogICAgIAotICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgaWYgKGFycmF5LT5jYW5TZXRJ
bmRleChpbmRleCkpIHsKLSAgICAgICAgICAgIGFycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBp
bmRleCwgdmFsdWUpOworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKG9iamVj
dC0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICAgICAgb2JqZWN0LT5zZXRJ
bmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKKyAgICAgICAgSlNPYmplY3Q6OnB1dEJ5SW5kZXgob2Jq
ZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTMzOSwxMSArMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0
QnlWYWwoRXgKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7
CiAgICAgCi0gICAgLy8gRklYTUU6IHRoZSBKSVQgdXNlZCB0byBoYW5kbGUgdGhlc2UgaW4gY29t
cGlsZWQgY29kZSEKLSAgICBpZiAoaXNKU0FycmF5KGJhc2UpICYmIGFzQXJyYXkoYmFzZSktPmNh
bkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5
KGJhc2UpLT5nZXRJbmRleChpbmRleCkpOworICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICB9CiAKLSAg
ICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byByZWxpbmsgdGhpcyB0byBhbiBvcHRpbWl6
ZWQgZm9ybSEKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlKSAmJiBhc1N0cmluZyhiYXNlKS0+Y2Fu
R2V0SW5kZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5n
KGJhc2UpLT5nZXRJbmRleChleGVjLCBpbmRleCkpOwogCkBAIC01MzIsMTUgKzUzNCwxNSBAQCB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0
QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVk
UHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGds
b2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5n
IHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAg
ICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0
SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFycmF5
LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTQ5LDE1ICs1NTEsMTUgQEAgdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50
MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwg
ZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgot
ICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAgICAgICBKU0Fy
cmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlj
a2x5KGluZGV4KSk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTEyOTQsMjAgKzEyOTYsMjkgQEAgdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdAogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCAmcmVz
dWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSArIDEpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAg
ICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwg
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywg
c2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNW
YWx1ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1NpemU7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOworfQorCitjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0
LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKK30KKworY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmds
b2JhbERhdGEoKSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3
U2l6ZSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0K
IAogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGlu
dDMyX3QgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB0eXBlZGVmIHNpemVfdCBE
RkdfT1BFUkFUSU9OICgqU19ERkdPcGVyCiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgq
U19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYg
c2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFU
SU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQVpKKShFeGVjU3RhdGUqLCBKU0FycmF5Kiwg
aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
RUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpW
X0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1l
Kik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0x
MDUsOCArMTA1LDEwIEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQK
IHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0
YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwg
c2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VP
KShFeGVjU3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgq
UF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSos
IHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBw
cm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25z
IHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpAQCAtMTM4LDggKzE0MCw4IEBAIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJO
QUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKQEAgLTE4NSw2ICsxODcs
OCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUp
IFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsK
IGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhl
Y1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVS
TkFMOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFu
ZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2Nh
dGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJh
dGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdl
dFByb3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTksMTIgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90
b0NoYWluQWNjZXNzU3R1YgogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9y
YWdlKCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+
YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
b2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwg
cmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjUz
LDEwICsyNTMsMTAgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQog
ICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
ICAgICAgICAgCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHVi
Sml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAot
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQyMyw3ICs0
MjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQ
Uik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbHNlCkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNl
bHNlCkBAIC02ODEsMTcgKzY4MSwxNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIo
CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsK
LSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtODMwLDcgKzgzMCw3IEBAIHN0YXRp
YyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hT
dWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04
NDQsNyArODQ0LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSk7CiAgICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAg
ICAgfQogCkBAIC04NTQsOCArODU0LDggQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpA
QCAtODYzLDkgKzg2Myw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1
dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIApAQCAtMTAyMCw2ICsxMDIw
LDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAg
ICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9w
dGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVy
ZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAo
aGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBub3JtYWxp
emVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
OCw3ICs0OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAg
ICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJl
VG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPigtMSkpKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwg
cHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0
aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklU
Q29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRl
QmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3Bl
cnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVM
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJs
ZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0
b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVl
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21w
aWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTI0MzIsMjMgKzI0MzIs
MTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewotICAgICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFz
ZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50Lgot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwpAQCAt
MjUzOCw2ICsyNTMyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3Ig
c29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGtlZXAg
aXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtlbHkgdG8gYmUgaW4gYSByZWdpc3Rl
ciBhbnl3YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJtIGluIGxvY2tpbmcgaXQgaGVyZS4K
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBjaGlsZDEpOwogICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAg
ICAgICAgCkBAIC0yNTQ1LDggKzI1NDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJv
cGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVy
LgpAQCAtMjU3Myw4ICsyNTY5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlN
b2RlKSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgYmFz
ZS51c2UoKTsKQEAgLTI1ODcsOSArMjU4Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAogICAgICAgICAgICAgLy8gSWYgd2Un
cmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERv
ZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAogICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRV
cGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjU5OCw3ICsyNTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVl
IHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSkpOwogCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7
CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91
bmRzLCB0aGlzLApAQCAtMjc2NywxNyArMjc2MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5n
dGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxl
bmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9m
TGVuZ3RoKCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTI4
MDMsMTggKzI3OTksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAg
ICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1
ZUdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAg
ICAgICAKQEAgLTM0MDIsMTQgKzMzOTgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9y
YWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgc3RvcmFn
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0z
NzUyLDcgKzM3NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAjZW5kaWYKICAgICAgICAgbV9qaXQubmVnMzIocmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBt
X2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BS
LCBKSVRDb21waWxlcjo6U2NhbGVQdHIsIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjY3OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0
ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsK
LSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhlIGNvZGUgYmVsb3cgaW4gYW50aWNp
cGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAgICAgICAvLyBzdWJzdGFudGlhbGx5IGNoYW5n
ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAg
ICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4
KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAu
Z3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMxMjcsMTEgKzMxMzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZz
ZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMyNjAsMTMgKzMyNjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAK
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9m
ZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIApAQCAtMzM2Miw2ICszMzY1LDIwIEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7Cisg
ICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFn
ZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3VsdC5ncHIoKSwgYmFzZUdQUik7CisgICAgICAgIAor
ICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIApAQCAtMzM4MywxMyArMzQwMCwzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQWxsb2NhdGVQcm9wCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAotICAgIG1faml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOwogICAgICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29t
cGlsZUluZGV4KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKIHsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUg
KiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CisgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUg
LyBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
IFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpAQCAtMzQwMiw5ICszNDM3LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICAKICAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aDsKICAgICAgICAgCi0gICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICog
b3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpOwogICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0g
Jm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAgICAgICAgIAog
ICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBz
Y3JhdGNoR1BSMik7CkBAIC0zNDE1LDEzICszNDQ3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMik7CiAgICAgICAgIAogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSkp
OworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkp
OwogICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEg
PSBzY3JhdGNoCiAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAt
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjEp
OwogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQq
KSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkp
OworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAKICAgICBzdG9yYWdl
UmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjY3OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNTYsNiArMTE1NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1
c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTM2OCw3ICsxMzc4LDcg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTE2NjYsNyArMTY3Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJC
SVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2Fk
KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9a
SiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQ
UlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwg
YXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CkBAIC0yMTQxLDcgKzIxNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZz
ZXQoKSkpOwogICAgICAgICAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJv
cGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgICAgIG1faml0
LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAg
IH0KIAogICAgIC8vIEl0IGlzIGFjY2VwdGFibGUgdG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwg
dG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3UncmUgZmluZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3
ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAg
ICAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlz
aW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9v
bCBpc092ZXJzaXplKHNpemVfdCk7CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJs
b2NrRm9yKHZvaWQqIHB0cik7CiAKLSAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dD
YXNlKHNpemVfdCwgdm9pZCoqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDaGVja2VkQm9vbGVh
biB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVh
biB0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVfdCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVh
biB0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVy
TW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3IsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IHZvaWQg
ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKLSAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZ2Uoc2l6ZV90LCBSZWdpc3RlcklEIHJlc3VsdCk7CisgICAgICAgIHZvaWQgZW1pdEFs
bG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgcHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdp
c3RlcklEIHJlc3VsdCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFs
bG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lz
dGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNp
Z25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1
bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RyCiAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBBZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpjbGFzc0lu
Zm9PZmZzZXQoKSkpOwogCiAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkg
c3RvcmFnZSBwb2ludGVyCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhy
ZXN1bHQsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00MzQsNyArNDM0LDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQogICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8
SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUs
IFJlZ2lzdGVySUQgcmVzdWx0KQoraW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0
b3JhZ2Uoc2l6ZV90IHNpemUsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRh
LT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKIApAQCAtNDQzLDM3ICs0NDMsMzIgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwogICAgIHN0b3JlUHRyKHJlc3VsdCwg
JmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICBuZWdQdHIocmVzdWx0KTsKICAg
ICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZhbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQp
LCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoc2l6ZSksIHJlc3VsdCk7CisgICAg
c3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0gb2Zmc2V0RnJvbUJhc2UpLCByZXN1bHQpOwogfQog
CiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVn
aXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKIHsKICAgICB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxT
dG9yYWdlID0gSlNBcnJheTo6c3RvcmFnZVNpemUoaW5pdGlhbExlbmd0aCk7CisgICAgc2l6ZV90
IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5ndGgpKTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIHRo
ZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiAK
ICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJheSBpbml0aWFsaXphdGlvbi4KLSAg
ICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHN0b3JhZ2VSZXN1bHQp
OworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2Vs
bCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwg
ZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hcnJheVN0
cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3RvcmFnZVB0cik7CiAKICAgICAvLyBTdG9yZSBhbGwg
dGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3Rv
cmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmFsbG9jQmFz
ZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VS
ZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMy
KGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJ
blZlY3Rvck9mZnNldCgpKSk7CisgICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJy
YXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZz
ZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2Uu
Ci0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNz
KGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogCi0gICAgLy8gU3Rv
cmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGluZGV4IGJpYXMuCi0gICAgc3RvcmUzMihJbW0zMihp
bml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKGNlbGxSZXN1
bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNldCgpKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRo
ZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJl
c3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3BhcnNlVmFsdWVNYXBPZmZzZXQoKSkpOwotCi0gICAg
ICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KKyAgICAvLyBTdG9yZSB0aGUgdmFsdWVz
IHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRy
KTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0Fy
cmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNlbmRpZgogICAgIH0KLQotICAgIC8v
IFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xvdHMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVu
Z3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsrKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotI2VuZGlmCi0g
ICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY5
LDcgKzE2NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVu
Z3RoKSkpIHsKKyAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3Rh
bFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAg
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTE2ODgsNyArMTY4OCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJyYXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUg
YWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwgd2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHBy
b3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAgLy8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAg
aW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENv
cGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkpKQorICAg
IGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNl
IGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFj
ZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2NSw2ICsxMDY1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVtaXRMb2FkUGF5bG9hZChpdGVyLCByZWdUMSk7
CiAgICAgCiAgICAgLy8gVGVzdCBiYXNlJ3Mgc3RydWN0dXJlCisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBKU0NlbGw6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmUpKSkpOwogICAgIGxvYWQzMihhZGRyZXNz
Rm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwx
MCArMTE0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7
CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5
OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNB
cnJheVN0b3JhZ2UpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OwogCiAgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVnVDApOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgCiAgICAgaWYgKGZp
bmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFsKSB7CiAgICAgICAgIEp1bXAgaXNJbmxpbmUgPSBi
cmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFj
aXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgICAgICBuZWcz
MihvZmZzZXQpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5l
LmxpbmsodGhpcyk7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJl
Y3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBicmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZM
aW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRy
KG9mZnNldCwgb2Zmc2V0KTsKQEAgLTIzOSwxMCArMjM5LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAg
c3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0
UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0
KHRoaXMpOwpAQCAtMjUyLDEwICsyNTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChJbnN0cnVjdGlvbgogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CiAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1
bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3Rv
cmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCkBAIC00MDMsNyArNDAz
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZQogICAgIFBhdGNo
YWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsKICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVj
ayk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29u
dmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNl
bWVudExhYmVsID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mo
cmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CiAKICAgICBMYWJlbCBw
dXRSZXN1bHQodGhpcyk7CkBAIC00NzAsNyArNDcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1
Y3R1cmUpKSkpOwogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9h
ZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJv
cGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxh
Y2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJl
c3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVS
UlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CkBAIC01MDgsOCArNTA4LDggQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKLSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhi
YXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zm
c2V0KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBiYXNlKTsKKyAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2Yo
SlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpKSk7CiB9CiAKIC8vIENv
bXBpbGUgYSBsb2FkIGZyb20gYW4gb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVy
d3JpdGUgYmFzZS4KQEAgLTUyMCw4ICs1MjAsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVj
dE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJl
c3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0
dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdl
dERpcmVjdE9mZnNldChKU09iamVjdCogYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCkKQEAgLTUzMSw4ICs1MzEsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hl
ZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CisgICAg
bG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQpAQCAtNjU3LDExICs2NTcsMTEgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKICAgICBzdG9yZVB0cihyZWdUMywgbV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQcm9m
aWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUo
KSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2g4
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpOwogCiAgICAgLy8gQ2hlY2tz
IG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBBcnJheVN0
b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZWdUMik7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMy
ID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMCkpOwogCiAgICAgZW1p
dEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE2LDgg
KzE1MTYsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1dF9iCiAgICAg
QVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZSA9IGFzT2Jq
ZWN0KGJhc2VWYWx1ZSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKnN0YWNrRnJh
bWUuZ2xvYmFsRGF0YTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGJhc2UtPmdy
b3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwotICAgIGJh
c2UtPnNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0
dXJlKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGJhc2UtPnNldEJ1dHRlcmZs
eShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAKICAgICByZXR1cm4gYmFz
ZTsKIH0KQEAgLTI1MjcsMTIgKzI1MjcsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHV0X2J5X3ZhbAogCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsK
ICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAo
aXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBh
c0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5kZXgo
aSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoKmdsb2JhbERhdGEsIGksIHZh
bHVlKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChv
YmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNl
dEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgY2FsbEZyYW1lLCBp
LCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1
ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2UgaWYg
KGlzTmFtZShzdWJzY3JpcHQpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NzAsMTIgKzEwNzAsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92
YQogICAgIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAg
IHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJh
eShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShi
YXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAg
ICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseShnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChqc0FycmF5LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdDo6
cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgTExJTlRfRU5EKCk7CiAgICAgICAgIH0KICAgICAg
ICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTk0MSwyMSArOTQxLDIxIEBAIF9sbGludF9vcF9pc19z
dHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChw
cm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2Vy
dChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5
LCBvayBlbmQpCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAotICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAg
ICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZGkgVGFnT2Zm
c2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hl
YWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRp
IFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9m
IEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5
bG9hZAogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlP
ZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBiaWx0IHByb3BlcnR5
T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3Jh
Z2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9i
amVjdEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQog
LmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAg
SlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDEpICogOCArIHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5
OgotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9h
ZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhp
bmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBl
bmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC03OTQsMjAgKzc5NCwyMCBAQCBfbGxp
bnRfb3BfaXNfc3RyaW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3du
Tm90RmluYWwocHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVl
KQogICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwg
SW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCiAgICAgbmVncCBwcm9wZXJ0eU9mZnNldEFz
UG9pbnRlcgotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5k
U3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4
XSwgdmFsdWUKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFn
ZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5
T2Zmc2V0QXNQb2ludGVyLCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVl
KQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAu
aXNJbmxpbmUKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFu
ZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVy
Zmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0
eU9mZnNldEFzSW50CiAgICAgc3hpMnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZz
ZXRBc0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmpl
Y3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9i
amVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAt
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIs
IG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2
YWx1ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2Yg
SW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0s
IHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTEyNiw4
ICsxMTI2LDggQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2dsb2JhbERhdGFbdDJdLCB0MgogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNz
SW5mb1t0Ml0sIHQyCiAgICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQyLCAu
b3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDBdLCB0MwotICAg
IGJpYWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdwor
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYmlhZXEgdDEsIC1z
aXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDNdLCAub3BH
ZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZh
bFNsb3cKQEAgLTEyMTEsOCArMTIxMSw4IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxv
YWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QwXSwgdDAKICAgICBsb2FkcCBKU0dsb2JhbERh
dGE6OmpzQXJyYXlDbGFzc0luZm9bdDBdLCB0MAogICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFz
c0luZm9bdDNdLCB0MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1f
dmVjdG9yTGVuZ3RoW3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9z
dG9yYWdlW3QxXSwgdDAKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAor
ICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1f
bGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CiAgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yW3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6
CiAgICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCkBAIC0xMjIzLDkgKzEyMjMsOSBAQCBfbGxp
bnRfb3BfcHV0X2J5X3ZhbDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBhZGRpIDEsIEFycmF5
U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIEFycmF5U3RvcmFn
ZTo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmliIHQyLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4V29yZFt0MF0sIC5vcFB1
dEJ5VmFsU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQotICAgIHN0b3JlaSB0MSwgQXJy
YXlTdG9yYWdlOjptX2xlbmd0aFt0MF0KKyAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhXb3JkW3QwXQogICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTEgQEAgZWxzZQogICAgIGNvbnN0IFBh
eWxvYWRPZmZzZXQgPSAwCiBlbmQKIAorIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1
dHRlcmZsaWVzLgorY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgK
K2NvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3Ry
aW5nVHlwZSA9IDUKIGNvbnN0IE9iamVjdFR5cGUgPSAxMwpAQCAtMzE4LDcgKzMyMyw3IEBAIG1h
Y3JvIGFsbG9jYXRlQmFzaWNKU09iamVjdChzaXplQ2xhc3NJbmQKICAgICAgICAgbG9hZHAgY2xh
c3NJbmZvT2Zmc2V0W3NjcmF0Y2gxXSwgc2NyYXRjaDIKICAgICAgICAgc3RvcmVwIHNjcmF0Y2gy
LCBbcmVzdWx0XQogICAgICAgICBzdG9yZXAgc3RydWN0dXJlLCBKU0NlbGw6Om1fc3RydWN0dXJl
W3Jlc3VsdF0KLSAgICAgICAgc3RvcmVwIDAsIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vb
cmVzdWx0XQorICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0K
ICAgICBlbmQKIGVuZAogCkBAIC00OTMsNyArNDk4LDcgQEAgbWFjcm8gd2l0aElubGluZVN0b3Jh
Z2Uob2JqZWN0LCBwcm9wZXJ0eQogZW5kCiAKIG1hY3JvIHdpdGhPdXRPZkxpbmVTdG9yYWdlKG9i
amVjdCwgcHJvcGVydHlTdG9yYWdlLCBjb250aW51YXRpb24pCi0gICAgbG9hZHAgSlNPYmplY3Q6
Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKKyAgICBsb2FkcCBK
U09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0XSwgcHJvcGVydHlTdG9yYWdlCiAgICAgIyBJbmRp
Y2F0ZSB0aGF0IHRoZSBwcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXIgbm93IHBvaW50cyB0byB0aGUK
ICAgICAjIHByb3BlcnR5IHN0b3JhZ2UsIGFuZCB0aGF0IHRoZSBvYmplY3QgcmVnaXN0ZXIgbWF5
IGJlIHJldXNlZAogICAgICMgaWYgdGhlIG9iamVjdCBwb2ludGVyIGlzIG5vdCBuZWVkZWQgYW55
bW9yZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVu
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoK
KyAqLworCisjaWZuZGVmIEFycmF5Q29udmVudGlvbnNfaAorI2RlZmluZSBBcnJheUNvbnZlbnRp
b25zX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZIDAKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFByb3BlcnRpZXMgb2YgSlNB
cnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKKy8v
ICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLyAgICogQSBzdG9yYWdl
IHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KKy8vCisvLyBQ
cm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMg
dGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9y
IHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAorLy8gKHNw
ZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZG
RkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJl
ZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVy
dHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwg
cmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisvLyB3aGVyZSAoaSA8PSBN
QVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGlu
IGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJy
YXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZworLy8gZmFzaGlvbjoK
Ky8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUg
d2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8gICAgIHVubGVzcyB0aGUg
YXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGlu
dG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgZWl0aGVyCisvLyAgICAg
YmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBk
ZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3Rv
cmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKKy8v
ICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBw
b3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9
IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJlIHN0b3JlZAorLy8gICAg
IGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZl
Y3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRo
YXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisjZGVmaW5lIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRleGluZ0hlYWRlcjo6bWF4
aW11bUxlbmd0aCkpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1
c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCisvLyBhIFBJQyBicmFu
Y2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgorI2Rl
ZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmluZSBNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQorLy8gMHhGRkZGRkZG
RiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQn
cyBhbiBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKKworLy8g
VGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9y
IGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRl
ZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCisjZGVm
aW5lIEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBz
aXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50
CisvLyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKKworLy8gT3VyIHBv
bGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1h
cC4KKy8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
LCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCisvLyBh
cyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVz
ZSBhIG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7
CisKK2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsK
K30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdIZWFkZXIg
cmVzdWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldExl
bmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRl
eGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9M
RU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29udmVudGlv
bnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAt
MTE0LDkgKzExNSwxNyBAQCBjb25zdCBDbGFzc0luZm8gQXJyYXlQcm90b3R5cGU6OnNfaW5mbyA9
CiBAZW5kCiAqLwogCitBcnJheVByb3RvdHlwZSogQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJm
bHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwKTsKKyAgICBBcnJheVByb3RvdHlwZSogcHJvdG90eXBl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFw
KCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJu
IHByb3RvdHlwZTsKK30KKwogLy8gRUNNQSAxNS40LjQKLUFycmF5UHJvdG90eXBlOjpBcnJheVBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkK
K0FycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBK
U0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkK
IHsKIH0KIApAQCAtMjkyLDggKzMwMSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKIAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykg
ewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQ7Ci0gICAgICAgIGlmICh0aGlzT2JqLT5jYW5HZXRJ
bmRleChrKSkKLSAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleChrKTsKKyAg
ICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4UXVpY2tseShrKSkKKyAgICAgICAgICAgIGVs
ZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIApAQCAtNDEz
LDEwICs0MjIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAKICAgICAgICAgZm9y
ICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5k
ZXgoaykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFy
cmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5n
ZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRP
ck51bGwoKSkKICAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9V
U3RyaW5nSW5saW5lKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2MzcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwogCi0gICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5Ojpz
X2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYgKHRo
aXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09i
aiktPmluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBh
cmVGdW5jdGlvbihleGVjLCBjYWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJh
eSh0aGlzT2JqKS0+c29ydE51bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4OCw5
ICs3OTcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2Fs
bCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAh
ZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2Fu
R2V0SW5kZXgoaykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHko
aykpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJh
eS0+Z2V0SW5kZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXhR
dWlja2x5KGspOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1NSwxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRD
YWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFk
RXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2Fu
R2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC05MDksMTEgKzkxOCwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4
ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0
aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5k
ZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTk2NSwxMSArOTc0LDExIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywg
ZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24o
KTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChr
KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHko
aykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwg
YXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTEwMTcsMTEgKzEwMjYsMTEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAz
KTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyAr
K2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC0xMDc1LDggKzEwODQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJy
YXkgJiYgYXJyYXktPmNhbkdldEluZGV4KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5k
ZXgoMCk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseSgw
KSl7CisgICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseSgwKTsKICAgICAgICAgaSA9
IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CkBAIC0xMDk3LDggKzExMDYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKICAgICAgICAgICAgIEpT
VmFsdWUgdjsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4KGkpKSkK
LSAgICAgICAgICAgICAgICB2ID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgaWYg
KExJS0VMWShhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKSkKKyAgICAgICAgICAgICAgICB2
ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBicmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVu
dW1lcmF0ZSBmYWxsYmFjayB0byBzbG93IHBhdGgKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMSwgdik7CkBAIC0xMTUyLDggKzExNjEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAyKQogICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFy
cmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleChsZW5ndGggLSAxKSl7Ci0gICAgICAgIHJ2ID0gYXJy
YXktPmdldEluZGV4KGxlbmd0aCAtIDEpOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5j
YW5HZXRJbmRleFF1aWNrbHkobGVuZ3RoIC0gMSkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJ
bmRleFF1aWNrbHkobGVuZ3RoIC0gMSk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTgzLDkg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAg
dW5zaWduZWQgaWR4ID0gbGVuZ3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDAsIHJ2KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlk
eCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5
KGlkeCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1
bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHko
aWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlk
eCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAg
ICAgICAgICBydiA9IGNhY2hlZENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxNyArMjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJh
eVByb3RvdHlwZSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJh
eVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAg
cHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMg
QXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBcnJheVByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgICAg
ICAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkBAIC00Nyw3ICs0Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5j
bHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1
ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgor
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBz
dHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJh
eSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0
IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlT
dG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgp
IG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFj
ZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNo
aWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBh
dmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBz
aXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAv
LyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQg
b2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJh
eVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJ
bmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5h
cnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVh
ZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMp
OyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBo
ZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsg
cmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3Ro
KHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7
IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigp
LT5sZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkg
eyBpbmRleGluZ0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9m
QXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
IHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3JhZ2UmIG90aGVyKQor
ICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1hcDsKKyAgICAgICAg
bV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZl
Y3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXph
dGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGlu
U3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFy
c2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAgICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQg
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8v
IE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWlu
dHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1f
cGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsK
KyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zm
c2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNl
dCgpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVj
dG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2luZGV4Qmlhcyk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IHNwYXJzZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fc3BhcnNlTWFwKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZv
cih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2Rl
ZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRl
ICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7Citz
dHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBO
b3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxT
aXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7
CisgICAgICAgIEFTU0VSVChpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA/IGhhc0luZGV4aW5n
SGVhZGVyIDogdHJ1ZSk7CisgICAgICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09
IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsg
cHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgKGhhc0luZGV4aW5n
SGVhZGVyID8gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA6IDApICsgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCog
YmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkg
KyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5n
SGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIo
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIG9mZnNl
dE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9
CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIs
IGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWRE
dXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdI
ZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0
IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFn
ZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBp
bmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9m
UHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkg
LSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwor
ICAgIAorICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0
aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0
aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBO
b3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFu
ZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24K
KyAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQg
YWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZworICAgIC8vIGRpcmVjdGx5IGludG8gSGVh
cDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNh
cGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7
CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFu
ZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNp
emVfdCBvbGRQcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFz
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXko
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0
eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0
IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5k
ZXhpbmcgaGVhZGVyLgorICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJBcnJh
eVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERh
dGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgaWYg
KCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgdG90YWxT
aXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAg
cmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKKyAgICAgICAgKnJlc3Vs
dC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShn
bG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5n
SGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVy
aW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJv
bUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFT
U0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRh
LCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+
cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBiYXNlKHBy
ZUNhcGFjaXR5LCBvbGRQcm9wZXJ0eUNhcGFjaXR5KSwKKyAgICAgICAgdG90YWxTaXplKDAsIG9s
ZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5l
d1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisg
ICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVy
ZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhp
bmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVF9VTlVTRUQob2xkU3Ry
dWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkob2xkU3RydWN0dXJlKSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4aW5nSGVhZGVyID09IGhhc0lu
ZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB2b2lkKiB0
aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgKKyAgICAgICAgICAgICZ0aGVCYXNlLAorICAgICAg
ICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBv
bGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3Bl
cnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJh
eVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jv
d0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFy
cmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wg
bmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAg
ICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJ
bmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNw
eSgKKyAgICAgICAgcmVzdWx0LT5iYXNlKG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KSwKKyAgICAgICAgYmFzZShvbGRQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksCisgICAg
ICAgIHN0ZDo6bWluKAorICAgICAgICAgICAgdG90YWxTaXplKAorICAgICAgICAgICAgICAgIDAs
IHByb3BlcnR5Q2FwYWNpdHksIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyksCisgICAgICAgICAgICB0b3RhbFNpemUoCisgICAgICAgICAgICAgICAg
MCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAg
cmV0dXJuIHJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCks
CisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKKyAgICAgICAgaGFz
SW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChudW1iZXJPZlNsb3RzIDw9IGlu
ZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8g
RklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFzIGEgbG9v
cCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaAorICAgIC8vIGRpcmVjdGlvbiB3ZSdyZSBtb3Zp
bmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIGNoZWNrIG9mIG1lbW1vdmUgYW5k
ICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgaW4gdGhl
IGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdocHV0IG9mIG1lbW1vdmUgd29uJ3QKKyAgICAvLyBh
bW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBpdC4gQW5kIG5vLCB3ZSBjYW5ub3QgcmVs
eSBvbiB0aGUgQysrIGNvbXBpbGVyIHRvCisgICAgLy8gaW5saW5lIG1lbW1vdmUgKHBhcnRpY3Vs
YXJseSBzaW5jZSB0aGUgc2l6ZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8gYmUgdmFyaWFibGUpLCBu
b3IgY2FuCisgICAgLy8gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gcmVjb2duaXplIHRoZSBv
cmRlcmluZyBvZiB0aGUgcG9pbnRlciBhcmd1bWVudHMgKHNpbmNlCisgICAgLy8gcHJvcGVydHlD
YXBhY2l0eSBpcyB2YXJpYWJsZSBhbmQgY291bGQgY2F1c2Ugd3JhcC1hcm91bmQgYXMgZmFyIGFz
IHRoZSBjb21waWxlciBrbm93cykuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVydHlTdG9y
YWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgcHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVu
ZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQor
CitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFkZXIo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6IFNlZSBj
b21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAgICAgICAg
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikg
KyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6
ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlubGluZU1l
dGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0
eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
RnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOworCiAgICAgICAgIHR5cGVk
ZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldFBy
b3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCkBAIC0xMjQsNiArMTI3
LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAgICZDbGFzc05hbWU6
OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0VmFsdWUsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjbGFzc05hbWUsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcl9o
CisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKK2NsYXNzIFN0cnVjdHVyZTsKK3N0cnVjdCBBcnJheVN0b3JhZ2U7CisK
K2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBEZWZpbmUgdGhlIG1heGlt
dW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAy
IHRvIGVuc3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyAg
ICBlbnVtIHsgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDAgfTsKKyAgICAKKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4
aW5nSGVhZGVyLCBtX2F1eFdvcmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxl
bmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9sZW5ndGgp
OyB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGluZ0hlYWRl
ciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2YgdGhpcyBj
bGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBlbmQKKyAg
ICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhXb3JkKDAp
CisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBzZXRM
ZW5ndGgodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBt
YXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAgfQorICAgIAor
ICAgIHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2b2lkIHNl
dEF1eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9CisgICAg
CisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihi
dXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IEluZGV4aW5nSGVh
ZGVyKiBmcm9tKGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0g
MTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFycmF5U3Rv
cmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5
U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5n
SGVhZGVyKj4ocHJvcGVydHlTdG9yYWdlKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlTdG9y
YWdlIHByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25zdFByb3Bl
cnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAg
ICAKKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAgfQorICAg
IAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBj
YW5ub3QgYmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCisg
ICAgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOworICAgIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICAKKyAgICB1aW50MzJfdCBtX2F1eFdv
cmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlw
ZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBw
cm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9y
YWdlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxp
bmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0Fy
cmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVy
OjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFn
ZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nVHlwZV9oCisjZGVmaW5lIEluZGV4
aW5nVHlwZV9oCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdU
eXBlOworCisvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJpbGl0aWVz
Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAx
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAgICAgPSA4
OworCisvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUg
dHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKKy8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9y
IHRoZW0gZGlyZWN0bHkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5U3RvcmFn
ZSAgICAgICAgICA9IDE2OyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZlIGFycmF5
IHN0b3JhZ2UgaW4gdGhlIHBhc3QuCisKKy8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBl
cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgID0g
MDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlID0g
SGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheSAgICAgICAg
ICAgICAgICAgICAgPSBJc0FycmF5Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisvLyBNYXNr
IG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJy
YXlUeXBlcyAgICAgICAgICAgID0gMTU7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVz
IGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJy
YXlUeXBlc0FuZEhpc3RvcnkgID0gMzE7CisKK2lubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVy
KEluZGV4aW5nVHlwZSB0eXBlKQoreworICAgIHJldHVybiAhISh0eXBlICYgSGFzQXJyYXlTdG9y
YWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ1R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlv
bi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3Qg
Q2xhc3NJbmZvIEpTQWN0aXZhdGlvbjo6c19pbmZvID0gewogCiBKU0FjdGl2YXRpb246OkpTQWN0
aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
bkV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpLCBjYWxsRnJhbWUtPnJl
Z2lzdGVycygpKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNhcHR1cmVk
QXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlvbkV4ZWN1
dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYoZmFsc2Up
CkBAIC02NywxMiArNjcsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAg
ICAvLyBObyBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxsIGluIHRo
ZSBSZWdpc3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lz
dGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFyZWdpc3Rl
ckFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZWdpc3RlckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0
ZXJBcnJheVNpemVJbkJ5dGVzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlZ2lzdGVy
QXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZSgpKTsKLSAgICB0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJyYXksIFN0b3JhZ2VCYXJyaWVyOjpVbmNo
ZWNrZWQpOworICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7
CiAgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5ICsgdGhpc09iamVj
dC0+cmVnaXN0ZXJPZmZzZXQoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYXJndW1lbnRzIG9iamVj
dCwgc2luY2UgaXQgcG9pbnRzIGF0IG91ciBidWZmZXIuCkBAIC0xMzEsNyArMTMxLDcgQEAgaW5s
aW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNB
Y3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVjdCk7CiAK
QEAgLTE0Niw4ICsxNDYsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9Ci0gICAgLy8gU2tpcCB0aGUg
SlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5hbWVzCi0g
ICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1l
bnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKKyAgICBKU09iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDEyNjc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
QEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCByZWdpc3Rl
ckFycmF5U2l6ZSgpOwogICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCk7
CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVu
dCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBp
dHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgUHJvcGVydHlT
dG9yYWdlIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdpc3RlcnMs
IHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2Yg
dGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIGludCBtX251bUNhcHR1cmVkQXJnczsKICAgICAg
ICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzIDogMzA7CiAgICAgICAgIGJvb2wgbV9pc1Rvcm5PZmYg
OiAxOwpAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmb3IgKGlu
dCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAgICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKIAotICAgICAgICBtX3JlZ2lz
dGVyQXJyYXkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBt
X3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBtX3JlZ2lzdGVycyA9IHJl
Z2lzdGVyczsKICAgICAgICAgbV9pc1Rvcm5PZmYgPSB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNv
bSkKICAqCkBAIC0yNCwxMyArMjQsMTYgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAKICNpbmNs
dWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMu
aCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5h
bWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC00NSw0OTEgKzQ4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5f
Q0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwog
Ci0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9i
amVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRo
ZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9y
LgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRp
ZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFy
ZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUg
dGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNh
bGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFz
IGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5
IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAu
Ci0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNl
bnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJB
WV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVy
IHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRl
eCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8v
ICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJl
IHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBp
cyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUg
bWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9y
ZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGlu
ZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4g
dGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgx
IC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRl
ZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FS
UkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhl
IHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1
bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVm
aW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92
ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXpl
X3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8v
IFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBt
aW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFy
aWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAt
LSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2Rl
ZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVD
VE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFs
bG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVk
IGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xF
TiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6
ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNk
ZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1
c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJy
YXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEg
dmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEv
OCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5m
byBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLS8vIFdlIGtlZXAgdHJhY2sg
b2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNl
IHRoaXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cg
dGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0
aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1bnNp
Z25lZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0gICAg
cmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRl
bnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQotc3RhdGljIGJvb2wgcmVqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkK
LXsKLSAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IG1lc3NhZ2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJBWV9DT05T
SVNURU5DWQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3Rl
bmN5Q2hlY2tUeXBlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBKU0FycmF5OjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBCQVNF
X1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNp
emUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAg
ICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VT
aXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdl
ID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5p
dGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0g
ICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKLSNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZh
bHNlOwotI2VuZGlmCi0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLUpTQXJyYXkqIEpT
QXJyYXk6OnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIC8v
IENoZWNrIGZvciBsZW5ndGhzIGxhcmdlciB0aGFuIHdlIGNhbiBoYW5kbGUgd2l0aCBhIHZlY3Rv
ci4KLSAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IG1h
eChpbml0aWFsTGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwotICAgIHVuc2lnbmVkIGluaXRpYWxT
dG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9p
ZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgp
OwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0
b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9z
dG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBp
bml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IGluaXRpYWxMZW5ndGg7Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3Rv
cmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGhpczsKLX0K
LQotLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBz
YW1lIG9iamVjdC4KLXZvaWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNP
YmplY3QtPmNoZWNrQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwotICAg
IHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSog
YXJyYXksIHVuc2lnbmVkIGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAgICBl
bnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRkUmVz
dWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0g
bV9tYXAuY2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5
KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNh
cGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0g
Y2FwYWNpdHk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewot
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNW
YWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5p
c0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
YWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXIt
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNhbGwo
ZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQotaW5s
aW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNl
QXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRv
IHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBz
cGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5l
dyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlz
IGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgot
ICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0g
ICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRl
cyA9IDA7Ci0gICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0
KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6
Z2V0KCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0
dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZh
bHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRl
ZmluZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xv
dChnZXR0ZXIpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNw
YXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25z
dAotewotICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3Vs
dCk7Ci0KLSAgICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
cmVzdWx0KS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OwotICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJh
eSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVu
dHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMp
OwotICAgIHJldHVybiBCYXNlOjpnZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVy
YXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29u
ZCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQotewotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1
ZU1hcDsKLSAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsK
LX0KLQotdm9pZCBKU0FycmF5OjpkZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUg
bV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBK
U0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsK
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAg
ICAgIGFsbG9jYXRlU3BhcnNlTWFwKGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJz
ZVZhbHVlTWFwOwotICAgIH0KLQotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
IC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVl
ZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBk
ZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAg
ICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAg
ICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCks
ICZuZXdSYXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3Jh
Z2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdl
KTsKLSAgICBtZW1jcHkobmV3U3RvcmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0g
ICAgbmV3U3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9
IG5ld1N0b3JhZ2U7Ci0gICAgbV9pbmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0g
MDsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3Bh
cnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0
b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkp
Ci0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBk
ZXNjcmlwdG9yLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0
cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2Ny
aXB0b3IpICYgfkFjY2Vzc29yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0
dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAg
ICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0
dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNl
dHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAg
ICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNl
dHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0
dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAo
Z2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIGdldHRlcik7Ci0gICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUlu
TWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9v
bCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQotewotICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICgh
aW5TcGFyc2VNb2RlKCkpIHsKLSAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEg
cmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRo
aXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlz
c2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZl
ciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2ls
bCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChp
LmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91
dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAg
IH0KLQotICAgICAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0g
ICAgfQotCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsK
LSAgICBBU1NFUlQobWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdp
dGggcHJvcGVydHkgbmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50
cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRl
bnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVy
dHkgb2YgTy4KLSAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJs
ZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmlu
ZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkgewotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJl
bW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0
aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJ
ZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMg
dHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQg
UCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxl
XV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUg
ZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2Yg
RGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNy
ZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0
LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNv
LCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8g
b2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29u
ZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8v
IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNl
bnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAg
Ly8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0
cnVlLgotCi0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50
cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
ZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5
OwotICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2Ny
aXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBp
ZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+
bV9sZW5ndGggPSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAg
ICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBp
biBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2Ft
ZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFy
ZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBjdXJyZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAo
ZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25m
aWd1cmFibGUoKSkgewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25m
aWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OwotICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50
IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAg
ICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJs
ZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUg
YXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8v
IDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVy
IHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rl
c2NyaXB0b3IoKSkgewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1
cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMs
IHRoZW4KLSAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0
b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYg
dGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNz
IG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAg
ICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252
ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAg
Ly8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4
aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAg
Ly8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0
IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAg
Ly8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZl
cnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9w
ZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhp
c3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxl
XV0gYW5kIFtbRW51bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQg
dGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQg
dmFsdWVzLgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYm
IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxz
ZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNj
KSBhcmUgYm90aCB0cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBp
cyB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAu
YS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50
IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxz
ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUo
ZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7
Ci0gICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkg
YW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBb
W0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEx
LmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBT
YW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNl
dHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0
dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8v
IDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBh
bmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRv
ci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhl
IGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0
dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUg
b2YgdGhlIGZpZWxkLgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3Jp
cHRvciwgY3VycmVudCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVl
OwotfQotCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywg
Ym9vbCB3cml0YWJsZSkKIHsKICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8ICF3cml0
YWJsZSk7CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKIAot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAg
IEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0TGVuZ3RoSXNSZWFkT25seSgpOwogfQpAQCAtNjMw
LDM4ICsxNTksMTAgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAog
ICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCiAg
ICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGlu
dGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2Ms
IGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1
ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCi0gICAgICAgIHJldHVybiBhcnJheS0+ZGVm
aW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwot
fQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAg
ICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICBpZiAoaSA+
PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xv
dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaSA8IHRoaXNPYmpl
Y3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBzbG90
LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0g
ICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnJheS0+ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAgcmV0dXJuIGFycmF5LT5KU09i
amVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0KIAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTY3MiwxMCArMTczLDYgQEAgYm9vbCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAo
aSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApAQCAtNjg3LDI2ICsxODQsNiBAQCBib29sIEpTQXJy
YXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsK
LSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAo
aSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2
YWx1ZSkgewotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5n
ZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RG
b3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIApAQCAtNzE0LDExICsx
OTEsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiB2b2lkIEpT
QXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2ln
bmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGks
IHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAog
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewog
ICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTcz
MywxOTQgKzIwNSw5IEBAIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQK
ICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOwogfQogCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
Ci17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gc3Rv
cmUgdG8gdGhlIHZlY3Rvci4KLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3Ro
KSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3Ro
OwotCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMg
bmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbmd0
aCA9IGkgKyAxOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAg
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKLQotICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVj
dCwgdmFsdWUpOwotICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMl4zMi0xIC0gdGhpcyBpcyBub3Qg
YW4gYXJyYXkgaW5kZXggKHNlZSBFUzUuMSAxNS40KSwgYW5kIGlzIHRyZWF0ZWQgYXMgYSByZWd1
bGFyIHByb3BlcnR5LgotICAgIGlmIChVTkxJS0VMWShpID4gTUFYX0FSUkFZX0lOREVYKSkgewot
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBjYWxsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGguCi0gICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3ko
KTsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
LXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0K
LSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBv
ZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwot
ICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3Qg
Y3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAg
ICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBl
bnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAg
ICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVu
Z3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0g
ICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVu
IHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNl
VmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nl
c3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0
ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9j
YXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNl
TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7
Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNz
YXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChp
ID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBs
ZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5
KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0g
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0g
ICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRo
ZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVl
ICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3Vs
ZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51
bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXpl
KCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1W
YWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwg
dmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4K
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7
Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50
byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVj
dG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
Ci19Ci0KLWJvb2wgSlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7
Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24n
dCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewot
ICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZl
IGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAg
ICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9s
ZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkK
LSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRo
ZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3Vj
Y2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9j
YXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkg
LSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0
ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZh
bHVlTWFwOwotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVj
ZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlm
IChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBp
ZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRP
bmx5KCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICBpZiAoIWlzRXh0ZW5z
aWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNp
YmxlLiIpOwotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1h
cCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBX
ZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0
LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgot
ICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVj
dG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1h
cC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0KLSAgICAv
LyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251
bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFs
bCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFw
LgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAg
ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBp
bnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2
ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTkyOCwzNSArMjE1LDYgQEAgYm9vbCBKU0FycmF5OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU0FycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBN
QVhfQVJSQVlfSU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFn
ZTsKLSAgICAKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVh
cigpOwotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0
LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShp
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29y
dChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIHVuc2lnbmVkIGRhID0gKnN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4oYSk7CkBAIC05NjQsMTI3ICsyMjIsMjYgQEAgc3Rh
dGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEgPiBk
YikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBcnJheTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAg
Ly8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZv
ciBldmVyeSBpbnRlZ2VyCi0gICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFy
Z2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAotICAgIC8vIHdoaWNoIGFs
bW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5h
bWVBcnJheS4KLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3Rv
cmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pm1fbGVuZ3RoLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RvcmFn
ZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGkpKTsKLSAgICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IGtleXM7Ci0gICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsK
LSAgICAgICAgCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBxc29y
dChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5
c0ZvclFTb3J0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGtleXNbaV0pKTsKLSAgICB9CiAKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQot
ewotICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
OwotCi0gICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heEluaXRM
ZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwgMTAwMDAwVSk7Ci0KLSAgICBpZiAoZGVz
aXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1h
eEluaXRMZW5ndGg7Ci0gICAgZWxzZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQotICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8v
IG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xl
bmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVy
bmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsg
KGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOwotICAgIH0KLQotICAg
IEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7Ci0KLSAgICBsYXN0QXJy
YXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOwotCi0gICAg
cmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwot
fQotCi1ib29sIEpTQXJyYXk6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVh
dmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVz
ZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCi0gICAg
Ly8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1
c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICBpZiAobmV3TGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxl
bmd0aCk7Ci0gICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3Ro
KG5ld0xlbmd0aCk7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0
eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgotICAgIGlmIChMSUtFTFko
IW1faW5kZXhCaWFzKSkgewotICAgICAgICB2b2lkKiBuZXdTdG9yYWdlID0gc3RvcmFnZS0+bV9h
bGxvY0Jhc2U7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKCZuZXdTdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpLCBzdG9yYWdlU2l6ZShu
ZXdWZWN0b3JMZW5ndGgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBz
dG9yYWdlID0gbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1N0b3JhZ2UpKTsKLSAgICAgICAgbV9zdG9yYWdlLT5tX2Fs
bG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlKTsKLQotICAgICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBzb21lLCBi
dXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8g
bm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KLSAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBt
aW4obV9pbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rv
ckxlbmd0aCk7Ci0gICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5n
IHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCi0gICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFj
aXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFzOwotICAgIHZvaWQqIG5ld0FsbG9j
QmFzZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0
b3JhZ2VTaXplKG5ld1N0b3JhZ2VDYXBhY2l0eSksICZuZXdBbGxvY0Jhc2UpKSAgICAKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1f
aW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0g
ICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJp
YXMpOwotCi0gICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgbV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4q
PihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwotCi0gICAgLy8gQ29weSB0aGUgQXJyYXlT
dG9yYWdlIGhlYWRlciAmIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHZlY3Rvci4KLSAgICBtZW1t
b3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSk7Ci0KLSAg
ICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAgIG1f
c3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29t
IGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSB1bmNsZWFyZWQuCiBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVk
IHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KLSAgICBBU1NFUlQoY291bnQgPiBtX2luZGV4Qmlhcyk7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7Cisg
ICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplKCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAg
Ly8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4K
KyAgICBBU1NFUlQoY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKICAgICAvLyBTdGVw
IDE6CiAgICAgLy8gR2F0aGVyIDQga2V5IG1ldHJpY3M6CkBAIC0xMDkzLDggKzI1MCw4IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyAgKiBjdXJyZW50
Q2FwYWNpdHkgLSB3aGF0IGlzIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHZlY3RvciwgaW5jbHVk
aW5nIGFueSBwcmUtY2FwYWNpdHkuCiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxh
cmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJl
cXVpcmVkVmVjdG9yTGVuZ3RoLgogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3ZlY3Rvckxlbmd0
aCwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
LCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBp
cyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMTEwMiw4
ICsyNTksOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAg
dW5zaWduZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGggPSB1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7
CiAgICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpOwogICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFz
IHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJU
KG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotICAg
IHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IG1fdmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7
CisgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJpYXMpOworICAgIHVuc2lnbmVkIGN1cnJlbnRD
YXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7
CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRlc2lyZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxv
dywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgogICAgIHVu
c2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILCBt
YXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkgPDwgMSk7CiAKQEAgLTEx
MTQsMTAgKzI3MSwxMCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xv
CiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50
IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEp
IHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgogICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNp
cmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJl
cXVpcmVkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICBuZXdBbGxvY0Jhc2UgPSBzdG9yYWdlLT5t
X2FsbG9jQmFzZTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVj
dHVyZSgpKTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShzdG9yYWdlU2l6ZShkZXNpcmVkQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihk
ZXNpcmVkQ2FwYWNpdHkpKSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9
CkBAIC0xMTMwLDQ1ICsyODcsNDAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsbwogICAgIC8vIElmIGl0IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBhbW91bnQgdGhhdCB3
aWxsIHJlbWFpbiBiYXNlZCBvbiBhbiBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0aGUKICAgICAvLyB2
ZWN0b3Igd2l0aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2aW91c2x5LgogICAg
IHVuc2lnbmVkIHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVu
Z3RoKSB7CisgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAg
ICAgIC8vIEF0b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3QgYmUgZ3JlYXRl
ciB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKG1f
dmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJl
ZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRo
aW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNl
ZC4KLSAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5tX2FsbG9jQmFzZSB8
fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCk7Ci0gICAgfQotCi0gICAg
bV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKLSAg
ICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9yTGVuZ3RoOwotICAg
IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhC
aWFzKTsKLQotICAgIC8vIFN0ZXAgNDoKLSAgICAvLyBDb3B5IGFycmF5IGRhdGEgLyBoZWFkZXIg
aW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5ICYgZnJlZSBhbnkg
b2xkIGFsbG9jYXRpb24uCi0KLSAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1vdmVkIHdpdGhpbiB0
aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBzaGlmdGluZyBkYXRh
Ci0gICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhCaWFzKS4gQXMgc3Vj
aCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAgICBtZW1tb3ZlKG1f
c3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgbWVtbW92ZShtX3N0
b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFyZSB3ZSBjb3B5aW5n
IGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNlICE9IG1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVw
ZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0Fs
bG9jQmFzZTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWlyZWRWZWN0b3JM
ZW5ndGgpOworICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0aGluIHRoZSBz
YW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVjZWQuCisgICAg
ICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSgpKSB8
fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCk7CiAgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVu
Z3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG5ld1N0b3Jh
Z2VDYXBhY2l0eSAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworCisgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0FsbG9jQmFzZSwgbmV3SW5kZXhC
aWFzLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXpl
b2YoSlNWYWx1ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKG5ld0J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAg
IAorICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhC
aWFzID0gbmV3SW5kZXhCaWFzOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogewot
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsK
IAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBl
bnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBv
bmx5IHRoZW4gd2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93
aW5nICdpZicuCi0gICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBtX3NwYXJzZVZhbHVl
TWFwKTsKKyAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwKTsKIAotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwKSB7CisgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKSB7CiAgICAgICAgIC8vIEZhaWwgaWYgdGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUu
CiAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CkBAIC0xMTk1LDcgKzM0Nyw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBt
YXAtPnJlbW92ZShpdCk7CkBAIC0xMjA0LDE0ICszNTYsMTQgQEAgYm9vbCBKU0FycmF5OjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtYXAtPnJlbW92
ZShrZXlzW2ldKTsKICAgICAgICAgICAgICAgICBpZiAobWFwLT5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAobmV3TGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgIC8vIERlbGV0ZSBw
cm9wZXJ0aWVzIGZyb20gdGhlIHZlY3Rvci4KLSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihsZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9IHZhbHVlU2xv
dDsKQEAgLTEyMjAsNTMgKzM3Miw2NSBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5l
d0xlbmd0aDsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0
b3JhZ2U7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAgICAgCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgpIHsKLSAgICAg
ICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KCFpc0xlbmd0aFdyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGxl
bmd0aCAtIDE7Ci0gICAgaWYgKGluZGV4IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07
Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5n
ZXQoKTsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGlmIChpbmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsK
KyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICAgICAg
ICAgIHZhbHVlU2xvdC5jbGVhcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5k
ZXg7Ci0gICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXgpOworICAgICAgICAgICAgICAg
IGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1l
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywg
aW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
KyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KLSAg
ICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRz
ICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRy
dWUpOwotICAgIC8vIFJldHVybiBlbGVtZW50LgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRl
bnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTEyNzQsNjMgKzQzOCw3NyBA
QCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRv
IGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93
cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4g
dmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwg
bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gbGVuZ3RoICsgMTsKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgMCwgdmFsdWUsIHRydWUsIGNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogCi0gICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3Jl
cyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KLSAgICBpZiAoVU5MSUtF
TFkoc3RvcmFnZS0+bV9sZW5ndGggPT0gMHhGRkZGRkZGRnUpKSB7Ci0gICAgICAgIG1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0
cnVlKTsKLSAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0
ZXAgMy5kLgotICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxl
bmd0aCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgLy8gRmFzdCBjYXNlIC0g
cHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Cisg
ICAgICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7Cisg
ICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICBj
aGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogCi0gICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5
IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdl
IGVycm9yLgorICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZG
RkZGRnUpKSB7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4
ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIg
RVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGVkIHRoZSBzYW1l
IGFzIHB1dEluZGV4LgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUsIHN0b3JhZ2Up
OworICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CiB9CiAKLWJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNp
Z25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGNvdW50KQogewogICAgIEFTU0VSVChjb3VudCA+IDApOwogICAgIAotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICAKLSAgICB1bnNp
Z25lZCBvbGRMZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBvbGRMZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFp
bnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVz
ZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKG9sZExl
bmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQor
ICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNw
YXJzZUluZGV4aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW9s
ZExlbmd0aCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciAtPSBjb3VudDsKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCAtPSBjb3VudDsK
KyAgICBzdG9yYWdlLT5zZXRMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOwogICAgIAotICAgIGlm
IChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBjb3VudCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwg
KHVuc2lnbmVkKWNvdW50KTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKTsKKyAgICBpZiAodmVjdG9yTGVuZ3RoKSB7CisgICAgICAgIGNvdW50ID0g
bWluKHZlY3Rvckxlbmd0aCwgKHVuc2lnbmVkKWNvdW50KTsKICAgICAgICAgCi0gICAgICAgIG1f
dmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICB2ZWN0b3JMZW5ndGggLT0gY291bnQ7Cisg
ICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAK
LSAgICAgICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaGFyKiBuZXdCYXNl
U3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpICsgY291bnQgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgICAgIG1lbW1vdmUobmV3QmFzZVN0
b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZSA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLQot
ICAgICAgICAgICAgbV9pbmRleEJpYXMgKz0gY291bnQ7CisgICAgICAgIGlmICh2ZWN0b3JMZW5n
dGgpIHsKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVj
dHVyZSgpLCBjb3VudCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzM5LDU5ICs1MTcsMzAgQEAg
Ym9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVucwogLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSB1bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCiBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvdW50
KQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlu
cyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNl
IHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAobGVuZ3Ro
ICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAg
aWYgKGxlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmlu
U3BhcnNlTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9pbmRleEJp
YXMgPj0gY291bnQpIHsKLSAgICAgICAgbV9pbmRleEJpYXMgLT0gY291bnQ7Ci0gICAgICAgIGNo
YXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBj
b3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICBtZW1tb3ZlKG5l
d0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgIG1fc3RvcmFn
ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsK
LSAgICAgICAgbV92ZWN0b3JMZW5ndGggKz0gY291bnQ7CisgICAgaWYgKHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID49IGNvdW50KSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVy
Zmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMg
LT0gY291bnQ7CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFn
cyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0
U2V0dGluZ0ZsYWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0
LT5tX3N0b3JhZ2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNP
YmplY3QtPmxlbmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlz
T2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+
bV9hbGxvY0Jhc2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3Zl
Y3Rvckxlbmd0aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3It
PnNsb3QoKSwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNl
U3RvcmFnZSAhPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAg
ICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0
b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUp
ICogdGhpc09iamVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9z
dG9yYWdlLT5tX2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRo
aXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFs
dWVNYXApCi0gICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGlj
IGludCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
CiB7CiAgICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051
bWJlcigpOwpAQCAtMTQwOCwxMTIgKzU1NywxMzcgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJp
bmdQYWlyRm9yUVNvcnQoYwogCiB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBD
YWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7CisgICAg
QVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1f
c3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5OgogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGJvb2wgYWxsVmFsdWVz
QXJlTnVtYmVycyA9IHRydWU7Ci0gICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAgICAgICAg
YWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOzsKKyAgICAgICAgCisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGJvb2wgYWxs
VmFsdWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIo
KSkgeworICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICAgICAgcmV0dXJuIHNvcnQo
ZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICAKKyAg
ICAgICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMg
ZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUg
bWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQorICAg
ICAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmlt
aXRpdmUgdmFsdWVzLgorICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAg
ICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNo
ZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYgKCFhbGxWYWx1ZXNB
cmVOdW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNh
bGxUeXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGlj
aCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxz
byBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1
c2VyIHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBv
ZiBlcXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBz
aXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29y
dCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAog
dm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBBU1NFUlQoIWluU3Bh
cnNlTW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9
IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNl
VmFsdWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMg
dG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFu
ZCBzb3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXBy
b3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVx
dWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJv
dGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJp
bmcgbWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdp
bmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0
ZW50LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNT
RVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKICAgICAKLSAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0KLSAgICBib29sIGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcyA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgIGlzU29ydGlu
Z1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1By
aW1pdGl2ZSgpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29u
dGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgot
ICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAg
ICAgdmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUoZXhl
Yyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBh
IGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQg
YmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0aW5nIEph
dmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQg
b25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAvLyBUaGlzIGlz
IGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBh
cmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgICAgICAvLyBi
dWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9i
amVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgICAgICAv
LyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2lu
ZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAgICAgIFZlY3Rv
cjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwor
ICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAgaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJp
bWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1
ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2Vw
dGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0g
dmFsdWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lubGluZShleGVjKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmlu
ZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBU
aGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAg
ICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZh
bHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVv
ZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgIGVs
c2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXpl
b2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAg
ICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAgICAgICAgIHFzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVyZ2Vz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCi0gICAgLy8gRklYTUU6IFRo
ZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29y
dC4KLSAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQs
IGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgotICAgIHFz
b3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWly
KSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBx
c29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4K
KyAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0
LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICAg
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCi0KLSAgICAvLyBJ
ZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBv
ciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0
aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICBpZiAobV92ZWN0b3JMZW5n
dGggPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIGluY3JlYXNlVmVjdG9y
TGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsK
LSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCkKLSAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZDsKLQotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsgaSsrKQotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOwotCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rp
b24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAg
ICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVy
IG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
OworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAg
ICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNp
c3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBB
VkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk1LDI1MyArNzY5LDI1NiBAQCBzdHJ1
Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAKIHZvaWQgSlNBcnJheTo6c29y
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VN
b2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMg
aWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0
b051bWJlci4KLQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4g
LSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAvLyBpZiBhIGxh
cmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9sZW5ndGggPD0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsK
LSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5z
aWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rv
ckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArICht
X3NwYXJzZVZhbHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgpIDogMCk7Ci0KLSAgICBp
ZiAoIW5vZGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBm
b3IgMl4zMSBpdGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7Ci0gICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Ci0g
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKLSAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQotICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwg
PSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBh
cmVGdW5jdGlvbiksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5i
ZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICBBU1NF
UlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0
aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgIC8v
IHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhl
cmUuCi0KLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlz
c2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBv
dGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVm
aW5lZCk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmlu
ZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsK
LSAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMg
cmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAK
KyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0
aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdl
ciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwor
ICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVD
b3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdl
LT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVD
b3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZM
VHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBl
bm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0g
ZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21w
YXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBl
ID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRh
ID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9k
ZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQor
ICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3
IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAy
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVn
aW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYg
dGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAs
IGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIg
dXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQg
PSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3Jp
bmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5n
IGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAg
ICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZp
bmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmlu
ZWQpOworICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNl
ZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdV
c2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFs
bCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5n
bG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsg
bnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9y
TGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7
CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKLSAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOwotICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURlZmluZWQpOworICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGNoYW5nZWQg
dGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUKKyAgICAgICAg
Ly8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCisgICAgICAgIAorICAgICAgICAv
LyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICAgICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAg
ICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgeworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0
ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotCi0gICAgICAgIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1dCB1bmRlZmluZWQg
dmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHVu
dXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIAor
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0
aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBBU1NFUlQodHJlZS5h
YnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7Ci0KLSAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJh
eSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQotICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGlu
Y29ycmVjdGx5LgotCi0gICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2Uu
Ci0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVy
YXRvciBpdGVyOwotICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWypp
dGVyXS52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8gUHV0IHVuZGVmaW5l
ZCB2YWx1ZXMgYmFjayBpbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwg
bmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFVuZGVmaW5lZCgpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0
aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRW
ZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogewotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0
b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0g
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwor
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZv
ciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCisgICAg
ICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAg
IGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVpbnQzMl90IGxl
bmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKLSAgICBVTlVT
RURfUEFSQU0obGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVj
dG9yRW5kID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAoOyBpIDwgdmVj
dG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9y
W2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZy
YW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB1bnNp
Z25lZCBpID0gMDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9y
YWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsg
KytpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
CisgICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgY2FsbEZyYW1l
LT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0KLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnNl
dEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBh
Y3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWlu
U3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdN
b2RlKCkpOwogCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5t
X2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotCi0gICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7
Ci0gICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQotICAgIGZvciAoOyBudW1EZWZpbmVk
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwg
di5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVm
aW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAor
ICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5l
ZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNl
ZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdV
c2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFs
bCB0aGUgZW50cmllcyAtIGlmIG5vdCwKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJv
d24gYnkgY2FsbGVyLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0g
ICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAg
ICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
bnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3Bh
cnNlTW9kZSgpKTsKLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7
ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICByZXR1cm4gbnVt
RGVmaW5lZDsKLX0KLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLXZvaWQgSlNBcnJh
eTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQotewotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIEFTU0VSVCghc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0KLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAg
aWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgIEFTU0VSVCghbV9zcGFy
c2VWYWx1ZU1hcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodHlw
ZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICB2YWx1ZS5p
c1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxv
Y2F0ZWQuCi0gICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgbmV3VXNlZFZlY3Rv
ckxlbmd0aCArPSBtYXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVj
ayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0
byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKKyAgICAgICAgICAgICAgICAvLyBleGNl
cHRpb24gaXMgdGhyb3duIGJ5IGNhbGxlci4KKyAgICAgICAgICAgICAgICBpZiAoKG5ld1VzZWRW
ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9y
TGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmlu
ZWQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3Rv
ciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewot
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJz
ZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAg
ICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtl
bHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQwICsyMSwyOSBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNk
ZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKIAotI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCi0KIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3du
PiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30K
LQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9w
ZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2Rl
KCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAg
Y2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50
NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51
bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9k
ZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQot
ICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAg
ICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAg
IHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwg
bV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9k
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1v
ZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3Ro
SXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBt
dXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAg
ICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5z
aWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFw
LmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMg
dmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92
ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3Zl
KHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0
aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVy
YXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNv
bnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0g
ICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAg
ICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7
Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRo
aXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpT
QXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAv
LyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5l
ZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8g
c2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJl
IG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVz
ZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2Nh
dGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdl
KCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3Jh
Z2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5
IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJu
ZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxz
ZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50
IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAg
ICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAg
IHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0g
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xh
c3MgSklUOwogCisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBK
U05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9p
bmRleEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAgICAgICAsIG1f
c3BhcnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
KyAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVu
Z3RoID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENy
ZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KTsKLSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAg
IHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5k
CkBAIC0xNjcsMjUgKzU2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlv
bik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWls
YXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRo
ZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3Nv
cnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9w
ZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJs
ZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJv
cGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ugb24gbmV3IGFy
cmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgICAg
IGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9u
ID0gZmFsc2UpOwogCkBAIC0xOTksMTQyICs3NCw4MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAg
Ym9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogCi0gICAgICAg
IGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3Ro
ICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1
bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkp
OwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkg
PCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAg
ICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
LSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIEFTU0VS
VChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4K
LSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7
Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0lu
VmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8g
bm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVz
LgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIGNvbXBsZXRl
SW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFz
IHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwg
bmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgcHJvcHJldGll
cyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgotICAgICAgICAgICAgQVNT
RVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFj
dEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBib29sIGlu
U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1cm4gbWFwICYmIG1hcC0+
c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVj
U3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwogCiAgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0
b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5n
dGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJik7Ci0K
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdz
OworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmpl
Y3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGlj
IHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBib29s
IGlzTGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAgICAgICBpZiAoIXN0b3Jh
Z2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAgICAgICAgICAgICByZXR1
cm4gIW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwotICAg
ICAgICB2b2lkIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFBy
b3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKLSAgICAgICAgYm9v
bCBkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGFsbG9jYXRl
U3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VN
YXAoKTsKLQotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNp
Z25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRD
b3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAg
ICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwotCi0gICAg
ICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29u
c2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRo
ZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7
IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFn
ZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6
IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlND
ZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwotCi0g
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNBcnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkq
IGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNl
SW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9
IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRl
eCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOwor
I2VuZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQorCiAgICAgaW5saW5lIEpT
QXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxE
YXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0
aWFsTGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7
Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNB
cnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9i
YWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZl
Y3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0
aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICAgICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsK
KyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7CisjZW5k
aWYKKyAgICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFz
QXJyYXkoSlNWYWx1ZSk7CkBAIC0zNTMsMzAgKzE2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwpIHsgcmV0dXJuIGNlbGwtPmNsYXNz
SW5mbygpID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXko
SlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlzSlNBcnJheSh2LmFzQ2VsbCgpKTsg
fQogCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRl
cGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cg
LSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhh
dCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6
ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8g
KHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9
IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5l
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZG
RkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVz
IGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQg
aW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRh
cjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAw
MDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0FycmF5OjpzdG9yYWdlU2l6ZSh1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoIDw9
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAotICAgICAgICAvLyBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHByb3ZpZGVkICh2ZWN0b3JMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgLy8gLSBhcyBhc3NlcnRl
ZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBkZXRlY3QgaW50ZWdlciBvdmVyZmxv
dyBpbiBwcmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSwgcHJvdmlk
ZWQgdGhhdAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGNvcnJlY3Rs
eSBkZWZpbmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkpOwotICAgIAotICAgICAgICBy
ZXR1cm4gc2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBBcmdMaXN0
JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQog
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3Vu
ZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJ
bmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1
bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkp
OwogCkBAIC02NSw3ICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRG
dW5jdGkKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYXJncy5hcHBl
bmQoYm91bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJn
cy0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhl
Yy0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3Vt
ZW50KGkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAordm9pZCBKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcg
KzE0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
Jm1fc3RydWN0dXJlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElE
QVRJT04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVy
biBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9m
IG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhl
aXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0
IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVTdHJpbmcg
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3Rh
bmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9w
ZXJ0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEpT
RnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwog
ICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSlNGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJh
c2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUg
PSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTksOCArNTE5LDggQEAgYm9vbCBT
dHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIGlmIChtX2lzQXJyYXkpIHsK
ICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZS4KICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAg
ICAgaWYgKG1faXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRl
eChpbmRleCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5n
ZXRJbmRleChpbmRleCk7CisgICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2Jq
ZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHZhbHVl
ID0gYXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkp
OwogICAgICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChtX29iamVjdC5nZXQoKSwgZXhlYywgaW5kZXgsIHNsb3QpKQpAQCAtNjg1
LDggKzY4NSw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNK
U0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAg
ICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHko
aW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4LCBzbG90
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwg
MjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTI0LDEwICsyNCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNp
bmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRo
aXMuaCIKQEAgLTM4LDEyICs0MCwxOSBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5o
IgorI2luY2x1ZGUgIlJlamVjdC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFm
dGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMg
Zm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8g
VGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRl
ZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2Vs
bCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzk1LDgxIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlz
aXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBB
U1NFUlQoc3RvcmFnZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgQVNTRVJUKHN0b3Jh
Z2VTaXplKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0
eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsK
LSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAt
IDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFz
ZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
bmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5h
bGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAg
UHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVf
dCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7Cisg
ICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVy
KSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwor
ICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVf
dCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5P
dGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlv
bih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1h
cmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJv
cGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAg
ICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGlu
ZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAg
IH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNp
emUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFz
SW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAg
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAg
ICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBN
YXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE4Myw5IEBAIHZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkK
LSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3Jh
Z2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5h
bE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRl
cmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0
dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzIwMyw5IEBAIHZvaWQg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFn
ZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0
b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5h
bE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRl
cmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0
dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXpl
ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0
KCk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgp
LCBzdG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAgKzIyMiw0OCBAQCBVU3RyaW5nIEpTT2JqZWN0Ojpj
bGFzc05hbWUoY29uc3QgSlNPYmplCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAot
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Citib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAg
Ly8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhl
ZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3IgYW55b25l
IHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5n
CisgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIAorICAg
IGlmIChpIDw9IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNlIE5vbkFycmF5Ogor
ICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBp
dC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CiB9CiAKIC8vIEVDTUEg
OC42LjIuMgpAQCAtMTc0LDYgKzI3MywxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwog
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAK
KyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7
CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgog
ICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzM0MSwxNDUgQEAgdm9pZCBKU09iamVj
dDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNs
b3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAor
ICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0eU5hbWUgPj0gTUFYX0FSUkFZX0lOREVYKSkgeworICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBV
cGRhdGUgbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBwcm9w
ZXJ0eU5hbWUgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7Cisg
ICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGhp
c09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAg
IG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybiBzdG9yYWdlOworCisgICAgbWFwLT5zZXRT
cGFyc2VNb2RlKCk7CisKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNr
IHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28g
bm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCAwKTsKKyAg
ICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKDApOworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworfQorCit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNy
ZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0g
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVChvbGRUeXBlID09IE5vbkFy
cmF5IHx8IG9sZFR5cGUgPT0gQXJyYXkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAg
ICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgLy8gRklYTUU6IHdo
YXQgaWYgdGhlIG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZT8gV2Ugc2hvdWxkIHByb2JhYmx5IGRv
IHNvbWV0aGluZyBzcGVjaWFsIHRoZW4uCisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAg
IENSQVNIKCk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFy
ZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOwor
ICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5t
X3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbklu
ZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2Vu
ZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJheVN0b3JhZ2Up
OworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
cmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4p
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
eworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkp
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAg
ICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpA
QCAtMzA0LDYgKzU0NiwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09i
amVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlm
eVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTc4LDQ1IEBAIGJv
b2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
Y29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkp
OworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgIGNh
c2UgTm9uQXJyYXk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVl
U2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkg
eworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAgICAgICAgIC0t
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkg
eworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShp
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXNPYmpl
Y3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiAr
NzQ2LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFw
cGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxp
bmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2Vy
CisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBu
ZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkg
bWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBz
d2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBO
b25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4g
a2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwg
IShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAg
IGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwg
a2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lk
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVj
dC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVz
RnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQpAQCAtNTE1LDggKzg0MSw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEm
IGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXko
dGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAg
ICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lv
bnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg5
OCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJv
cGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
bG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBp
ZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdl
dCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNH
ZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAg
ICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0
Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRp
b24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0
aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
c2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywy
NiArOTI4LDUzMyBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAg
ICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdy
b3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikK
IHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlz
RGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3Jp
cHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9
IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAg
IGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9
IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIg
PSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAg
ICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChv
bGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIg
PSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRl
cikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
ZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUlu
TWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
b2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChv
bGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNP
YmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRp
b24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNw
YXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGlu
ZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1F
OiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJl
IG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZl
ciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2ls
bCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChp
LmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91
dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAg
IH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
OworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBl
bnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4
dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9w
ZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNp
YmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVm
aW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEu
IElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBp
cyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1l
ZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFi
bGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFy
ZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBv
ZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8g
Y3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8v
IDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Ig
c28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAv
LyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tD
b25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAg
Ly8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFi
c2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAg
ICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJu
IHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBl
bnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9u
bHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5k
ZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwor
ICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGlu
ZGV4ICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVy
biB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1
cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFu
ZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0
aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhl
IFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJy
ZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5p
c0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkg
eworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVz
ZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1
cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAv
LyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJl
c2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFy
ZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3Jp
cHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2Ny
aXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2Vu
ZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24g
aXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkg
eworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAg
ICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3Vy
cmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBm
b3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9w
ZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9w
ZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVl
cyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJh
YmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0
aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0
IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkg
bmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBw
cm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2Yg
dGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJs
ZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHBy
b3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBl
bHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0
b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhl
bgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3Vy
YWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5h
LmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNl
IGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3Jp
dGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0
aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2Mu
W1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFs
dWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEg
cmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5i
LiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNv
IGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQ
cmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEu
IEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3Jp
cHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29u
ZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBb
W1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRd
XSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNl
dHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0
aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltb
R2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVu
dC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVz
ZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBw
dXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50
KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3Qt
PmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Cisg
ICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7Cit9CiAKLSAgICAvLyBJ
dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCks
IHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24u
CitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVz
dWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywg
ZmluYWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmpl
Y3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAg
QVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5
U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZl
IHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29k
IG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lk
KiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdT
aXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0g
c3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8v
IEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFy
c2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5
IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9k
ZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJs
ZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUg
dG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0
b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERh
dGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFn
ZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUg
dmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1
c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFw
ICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRl
IG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5s
ZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jv
d2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1h
cC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAg
aWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcg
YSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAg
Ly8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlz
IHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWls
cy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFw
LT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5B
cnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVj
dG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0
Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90
KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQg
YXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBB
U1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5
OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsg
MSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywg
YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBp
bmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChp
ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXA7CisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJl
bnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAg
IC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJl
ZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFT
U0VSVChpc0V4dGVuc2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0
IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkg
dG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAt
IHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBh
bmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0g
YWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxs
b2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4g
bWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9
CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAg
ICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxl
LgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVy
IGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUg
bWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rv
ci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAg
ICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlz
IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJB
WV9JTkRFWCk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUg
LSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAg
ICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCAwLCAwKSk7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVh
dGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAw
LCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0
dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6
OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25l
ZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChk
ZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWdu
ZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBzdGQ6Om1p
bihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4
SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAg
ICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3Ro
ID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5j
cmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgor
ICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAq
IDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92
ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2ly
ZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VS
VChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXpl
ID0gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICBy
ZXR1cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
OworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3
VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKK30KKwor
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMg
dGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0
IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0
byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0
aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4
QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JM
ZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0
aChuZXdMZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNp
dHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZ
KCFpbmRleEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFn
ZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgp
KTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3Qg
YWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3Zl
cmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWlu
KGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVu
Z3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgp
LT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgaW5kZXhCaWFzLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwor
CisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNo
ZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JD
b25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8v
IExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAg
ICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cik7CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsK
KworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VW
YWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsK
KyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0
aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAv
LyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0
T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVy
ZSgpLCBmb3IgdGhlIHByb3BlcnR5CisgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhh
dmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMw
LDEwICsxNDYyLDQ2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9m
ZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsK
KyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0
KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0
dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHN3aXRjaCAob2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNh
c2UgQXJyYXk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1
ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsK
KyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGkpOworICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9y
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC03MDQsMjYg
KzE1NzIsMjYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07
CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVm
aW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2Vw
dGlvbikKIHsKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRl
ZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBk
ZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAog
ICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBk
ZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxl
dGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZs
YWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShl
eGVjKTsKLQorICAgIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1
c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0g
ICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnQpKSB7CiAgICAgICAgIC8vIHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQh
Ci0gICAgICAgIGlmICghb2JqZWN0LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRp
bmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIp
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsKICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBv
bGREZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVz
Y3JpcHRvcik7CiAgICAgfQogCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5
LDggKzE2MTcsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAg
ICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1
dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmlj
RGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVz
Y3JpcHRvcikpIHsKLSAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1
dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAg
ICAgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkBAIC03NjIsOCArMTYzMCw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3Ig
YW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3Jp
cHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBt
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQp
LCBjdXJyZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJp
YnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKQEAgLTc4NCw4ICsxNjUyLDggQEAgYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlm
IChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1
cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlz
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRp
bmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0
aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9mIGFuIGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBA
IC04MDIsNyArMTY3MCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1Zh
bHVlIGFjY2Vzc29yID0gb2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVy
KGFjY2Vzc29yKTsKQEAgLTgxMiwxMiArMTY4MCwzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJl
bnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwogICAgIHVuc2lnbmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nl
c3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRy
cyB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAg
Ly8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkg
c3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBj
LiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0Rl
ZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQ
LCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYg
c3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAg
ICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAg
ICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBh
bmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUu
CisgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZp
bmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
K30KKworYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNP
YmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbWVz
c2FnZSkKIHsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgbWVzc2FnZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNyArMjQsMjEgQEAKICNkZWZpbmUgSlNP
YmplY3RfaAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUgIkFycmF5Q29udmVudGlv
bnMuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIK
ICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5U2xvdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgogI2luY2x1ZGUgIlB1
dFByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9y
YWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC03OSw2ICs4MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAg
ID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAg
IENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2Jl
bG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5
IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFs
QXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9u
dERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FT
U0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93
X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwg
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmpl
Y3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2LDYgKzEwNyw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHZvaWQgZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKQEAgLTEyMCw4ICsxMzMsMTc2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1
bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgor
ICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAg
ICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhv
ZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxl
IGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVj
dEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0
SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
eCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0
b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4K
KyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVt
VmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8g
Y2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBv
ZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVk
IG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFz
IG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOwor
I2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlh
bExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9k
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVj
dCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0
eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApA
QCAtMTQ3LDYgKzMyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
IAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM4NSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGlu
ZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9m
TGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFBy
b3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxp
bmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAK
ICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZz
ZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDEy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9y
YWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlv
biArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5
cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
QEAgLTI2OSwxNyArNDU0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRp
Y0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUo
RXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0
b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJm
bHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3Ug
cHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAgIAogICAgICAgICB2b2lk
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAg
ICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVu
RGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NzQsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBz
aXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUwNiw3NyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBs
aWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRl
cml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAg
ICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmpl
Y3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAK
ICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
ICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERh
dGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQg
dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXpl
X3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9y
JiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRo
aXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMg
YXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisg
ICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7
CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGlj
YXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgLy8gb2JqZWN0
IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdl
LiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25z
IHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNv
bnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAg
ICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVm
aW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAgICAgIGVudW0gQ29uc2lz
dGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lz
dGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVu
Y3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAg
IHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9y
bWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3Jh
Z2UqKTsKKworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYs
IHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CkBAIC0zMzYsMTcgKzU4OSwzNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09i
amVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAg
ICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0ds
b2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3Bl
cnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3Qm
LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3Bl
cnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0
cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50
cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRW
ZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJl
ZExlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOwor
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsK
ICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAg
ICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0
IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9
CiAKQEAgLTQ1NiwxMSArNzI2LDYgQEAgaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxp
bmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291
dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmpl
Y3QoKSBjb25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkg
PT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzU2LDE3IEBAIGlubGluZSBib29sIEpT
T2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVj
dDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFT
U0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFz
dHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQogICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7Cit9CisKK2lubGluZSB2
b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlu
bGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MDQsOSBAQCBpbmxpbmUgSlNPYmplY3QqIGFz
T2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgp
KTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1
dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NTQsMTcgQEAgaW5saW5lIEpTT2JqZWN0KiBK
U1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omlu
bGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAg
ICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKKyAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICBp
ZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dl
dHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBv
ZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGxv
Y2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlT
bG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBtYXkgc2VlbSBj
cmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmlydHVh
bCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NTAsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNH
ZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQo
IUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhp
cykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5NzksMTEgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAoKG1v
ZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5l
U3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5
OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
KQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdl
Q2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
bmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0
YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQo
b2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwpAQCAtNzMwLDEzICs5OTcsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVu
dENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdl
IG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2Ug
PSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBn
cm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAg
ICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1
cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1
Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1
ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGgg
c3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAvLyBz
byBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAzLDkgKzEwNzAs
OSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRP
ZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTgzOSwxMSAr
MTEwNiwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsCiBpbmxp
bmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+
c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3Jh
Z2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3Rv
cmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAgIHB1dERpcmVj
dE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1LDYgKzEyMDIs
MTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAogICAgIHJldHVy
biByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkg
KyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8gVGhpcyBpcyBh
IGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0IGEgbG9hZCBv
ciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZzZXRzOiBhIHBv
aW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0MywxMyArMTIx
NSwxMyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvCiB7CiAgICAg
aWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0
dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpIC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjpvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jh
c2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChv
ZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRl
cmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzEy
MjksNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUg
aW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBp
ZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1
cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9v
bCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAot
dm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRh
YmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBAIC02NSw3ICs2NSw3IEBAIHZv
aWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkKICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQog
ICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZv
aWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgCiAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3Mp
IGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJh
bFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGl0ZXJhbFBhcnNlci5oIgog
CisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkxleGVyLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVk
ZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZz
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qgb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwog
ICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMjsKKyAg
ICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdl
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFnZV9oCisj
ZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJv
cGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBD
b25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQ
cm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE1hdGNoZXNB
cnJheTo6c19pbgogCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEsIG1fcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiB9CiAKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0
LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgICAgICAgICAgOiBKU0Fy
cmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJl
KCkpCisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0
cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCisgICAgICAg
ICAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJy
YXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5KQogICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQp
CiAgICAgICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCiAgICAgICAgIHsKQEAgLTQ2LDcg
KzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQpOwogICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFw
KSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpICsgMSk7CisgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7CiAgICAgICAgICAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiAr
MjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgog
CisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAg
LTExNCwxMSArMTE1LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0Nl
bGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6
OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
KyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVjdF9oCisKKyNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5
VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIlBy
b3BlcnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5r
bm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAgICBT
cGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdldChF
eGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYp
IGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgIEpT
VmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBl
bnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEs
CisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVz
dWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhOb3Jt
YWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKworICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2Rl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRp
Y19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBs
ZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3Ro
SXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAg
IHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3Ro
SXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRo
ZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJl
Y3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBpdGVy
YXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAvLyBU
aGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBv
ZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3Zl
KGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9
CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQorICAg
IGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMo
aSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQor
ICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2YXRl
OgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3JlcG9y
dGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJz
ZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
CisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVm
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJz
ZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBh
cnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVu
dHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBt
X21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkp
IHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2Fw
YWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBj
YXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNW
YWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5p
c0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
YWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXIt
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwo
ZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5s
aW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBU
byBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUg
c3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBu
ZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhp
cyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4K
KyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewor
ICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0
ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6Omdl
dChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6
OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2
YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNs
b3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVz
dWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRl
cihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0
YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFy
cmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5
RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRl
cyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0
ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vj
b25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVm
aW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9y
YWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQg
fTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2Jh
bERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIo
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNl
dChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAg
ICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFBy
b3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBt
X3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0
b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtp
XTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBn
ZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1
cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9z
dG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkg
KzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAK
LVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0
eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxs
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwg
bV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkK
ICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3Jp
dGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUo
Z2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZv
KQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9
IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAg
ICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRU
eXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAg
ICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFz
c0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6
ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZv
KHByZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERh
dGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZv
KHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
SW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVz
KHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5k
ZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFu
c2l0aW9uS2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9u
ID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAg
ICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9
PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVy
biBleGlzdGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1f
YXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOworICAgIHRyYW5zaXRpb24tPm1faW5k
ZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJv
cGVydHlUYWJsZSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX2lzUGlubmVkUHJvcGVydHlU
YWJsZSkKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVy
ZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUucmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJl
dmlvdXMpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGds
b2JhbERhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQ
cm9wZXJ0eU1hcCgpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRh
YmxlLmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsK
K30KKwogLy8gSW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHkuCiBi
b29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cnVjdHVyZV9oCiAKICNpbmNs
dWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCkBAIC02
OCw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3Qg
Q2xhc3NJbmZvKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERh
dGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYs
IGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAg
LTEwMCw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogc2VhbFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
Kik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CiAKICAgICAgICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmKTsK
ICAgICAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKQEAgLTE0MCw2ICsxNDIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkgY29u
c3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOyByZXR1cm4g
bV90eXBlSW5mbzsgfQogICAgICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlw
ZUluZm8oKS5pc09iamVjdCgpOyB9CiAKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlczsgfQorICAg
ICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhpbmdUeXBlOyB9CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAg
IHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgZ2xvYmFsT2JqZWN0KTsgfQpAQCAtMzM0LDYgKzMzOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUs
IG1fY2xhc3NJbmZvKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmRleGluZ1R5cGUpOworICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYp
OwogICAgICAgICAKQEAgLTM2Myw3ICszNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2
YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5m
byopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25z
dCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYpOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0
dXJlKik7CiAKQEAgLTQxNiw2ICs0MjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7CiAK
ICAgICAgICAgVHlwZUluZm8gbV90eXBlSW5mbzsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG1faW5k
ZXhpbmdUeXBlOwogICAgICAgICAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0
PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90
eXBlOwpAQCAtNDQ3LDcgKzQ1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1f
aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNSZWFkT25s
eU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvIDogMTsKICAgICAgICAgYm9v
bCBtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9h
dHRyaWJ1dGVzSW5QcmV2aW91cyA6IDc7CisgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0lu
UHJldmlvdXMgOiAyMjsKICAgICAgICAgdW5zaWduZWQgbV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNo
Q291bnQgOiAyOwogICAgICAgICB1bnNpZ25lZCBtX3ByZXZlbnRFeHRlbnNpb25zIDogMTsKICAg
ICAgICAgdW5zaWduZWQgbV9kaWRUcmFuc2l0aW9uIDogMTsKQEAgLTQ2NSwxMSArNDc1LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlu
bGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCisgICAgaW5s
aW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0cnVj
dHVyZVN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4o
Z2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVh
cCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUlu
Zm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlKTsKICAgICAgICAgc3RydWN0dXJlLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gKICNk
ZWZpbmUgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gKIAorI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgpAQCAtMzcsNiArMzgsMzAgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRp
b25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5IGFkZGl0aW9ucy4KKworLy8g
U3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCBy
ZWxhdGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBz
dHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgorZW51bSBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9OworCitpbmxpbmUgdW5zaWdu
ZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAg
IHJldHVybiB0cmFuc2l0aW9uICsgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZTsKK30KKworaW5saW5l
IEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHN3aXRjaCAodHJhbnNpdGlvbikg
eworICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBvbGRUeXBl
IHwgSGFzQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gb2xkVHlwZTsKKyAgICB9Cit9CisKIGNsYXNzIFN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFVzaW5nU2lu
Z2xlU2xvdEZsYWcgPSAxOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161129</attachid>
            <date>2012-08-28 21:02:05 -0700</date>
            <delta_ts>2012-08-28 23:21:37 -0700</delta_ts>
            <desc>it runs things.</desc>
            <filename>butterflies_patch_26.diff</filename>
            <type>text/plain</type>
            <size>395290</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2OTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MSBA
QAorMjAxMi0wOC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNPYmplY3RS
ZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBZGphY2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEFkamFjZW5jeUxp
c3QpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpwdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3Rv
Q2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpy
dW4pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNl
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9w
bmFtZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAg
ICAgICAoSlNDOjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jTWFwKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
U29tZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5oOgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3Rv
cmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OmNvcHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppblNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNwYXJz
ZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFz
ZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Oklu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpz
ZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5
KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpT
QWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3Ap
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29t
cGFjdEZvclNvcnRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0
YWJsZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpib3VuZEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rp
b25Db25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5o
OgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRh
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJ
bml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5n
TW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpv
ZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0
SW5CdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0xp
dGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zm
c2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdF
eHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKFJlZ0V4cE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9SZWplY3QuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpy
ZWplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VB
cnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJz
ZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdlQmFy
cmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhhc2gpOgor
CiAyMDEyLTA4LTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGRpbmcgc3VwcG9ydCBmb3IgYWRkaW5nIExMSW50IG9wY29kZSBleHRlbnNpb25zLiAgVGhpcyB3
aWxsIGJlIG5lZWRlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFm
QGdtYWlsLmNvbSkKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJJbml0aWFsaXpl
VGhyZWFkaW5nLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBw
cml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpA
QCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5
LDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICov
OyB9OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1
NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QzE0
RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi87IH07
CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4
MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJh
eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5NzE1RUQ4RTQ2MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVE
OEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QTE1RUQ4RTQ2MDBG
MTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4
aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlDMTVFRDhFNDYwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3Jh
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVq
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkyMTVFRDhFMzgw
MEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNw
YXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNl
QXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhp
dFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLzsgfTsK
IAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBE
NEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdp
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRDdF
NjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTY0LDcgKzU3NSw2IEBACiAJCUE3NjZCNDRG
MEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYg
LyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFj
ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2
QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYy
QkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmll
ci5oICovOyB9OwotCQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4
MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAv
KiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovOyB9OwogCQlB
Nzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRG
IC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8q
IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwICovOyB9OwpAQCAtOTQ1LDYgKzk1NSwxNyBAQAogCQkwRkI1NDY3ODE0RjVDNDY4
MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0
ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdG
MzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFs
dWVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUzODAw
RjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAv
KiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMw
QUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzQxLDcgKzEzNjIsNiBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkw
NTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0
b3JhZ2VCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VC
YXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYw
MDE5RTkxMiAvKiBKU09iamVjdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNPYmplY3RSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjAyMCw2ICsyMDQwLDE3IEBACiAJCTdFRjZFMEJCMEVCN0Ex
RUMwMDc5QUZBRiAvKiBydW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9u
cy5oICovLAorCQkJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAq
LywKKwkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJ
MEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywK
KwkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJ
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmggKi8sCisJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICov
LAorCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywK
KwkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0Yz
OTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3
RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNr
LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8s
CiAJCQkJQkNGNjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKQEAgLTIyMDQs
NyArMjIzNSw2IEBACiAJCQkJN0UyQzZDOTgwRDMxQzZCNjAwMkQ0NEUyIC8qIFNjb3BlQ2hhaW5N
YXJrLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5j
cHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICov
LAotCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovLAog
CQkJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAg
Ki8sCiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9y
LmNwcCAqLywKQEAgLTI3NjAsNyArMjc5MCw2IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZE
MTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdl
QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZG
NUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMjkwOCw2ICsyOTM3LDE3IEBACiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdD
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RUM4
QzdBMTVFNkU5NTAwMDUxRTlBOSAvKiBPcGNvZGVEZWZpbml0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5OTE1RUQ4RTQ2
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlB
MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0
b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBS
ZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5RjE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2Zp
bGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAorLy8gVGhpcyBpcyBh
IGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gSW5kZXhpbmdUeXBlIHRoYXQg
d2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJlIDE3IGluZGV4aW5nIHR5cGVzICgwIHRvIDE2LCBp
bmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1vcmUgdGhhbiBlbm91Z2guCiB0eXBlZGVmIHVuc2ln
bmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc05vdEFycmF5ID0gMTsK
LXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pTQXJyYXkgID0gMjsKKyNkZWZpbmUgYXNBcnJheU1v
ZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkpCiAKIGlu
bGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5m
bykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJheTsKLSAgICByZXR1cm4gSXNOb3RBcnJheTsKKyAg
ICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQcm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODk0LDggKzg5NCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBtb3JlIGNv
bnNlcnZhdGl2ZSBoYW5kbGluZyBvZiB0aGUgb3V0LW9mLWJvdW5kcwogICAgICAgICAgICAgLy8g
Y2FzZS4KICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CkBAIC05NTYsMTAgKzk1NSwxMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgSU5fQk9VTkRT
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTEzODYsNyArMTM4NSw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdl
dFByb3BlcnR5U3RvcmFnZToKKyAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKQEAgLTE0MDQsOCArMTQwMyw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3Bl
Y1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJh
eToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZp
bHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAg
ICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1
dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgZW51bSB7IFNpemUgPSAzIH07CiAgICAgCisgICAg
QWRqYWNlbmN5TGlzdCgpIHsgfQorICAgIAogICAgIEFkamFjZW5jeUxpc3QoS2luZCBraW5kKQog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgOiBtX2tpbmQoa2luZCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsOCArNDAsMTIgQEAgQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9k
ZXMgbW9kZQogICAgIHN3aXRjaCAobW9kZXMpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJldHVy
biBBcnJheTo6VW5kZWNpZGVkOwotICAgIGNhc2UgSXNKU0FycmF5OgotICAgICAgICByZXR1cm4g
bWFrZVNhZmUgPyBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzIDogQXJyYXk6OkpTQXJyYXk7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
cmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6
OkFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOworICAgIGNhc2Ug
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhBcnJheVN0b3JhZ2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHRoaXMgaXMgcG9zc2libHkgYSBraW5kIG9mIGFycmF5IGZvciB3aGljaCwgdGhvdWdoIHRo
ZXJlIGlzIG5vCiAgICAgICAgIC8vIHVzZWZ1bCBkYXRhIGluIHRoZSBhcnJheSBwcm9maWxlLCB3
ZSBtYXkgYmUgYWJsZSB0byBleHRyYWN0IHVzZWZ1bCBkYXRhIGZyb20KQEAgLTEyMCwxMCArMTI0
LDE0IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSk7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87CisgICAgICAg
ICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4
aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKTsKKworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2Up
CisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKTsKQEAgLTE3NCwxMCArMTgyLDE4IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhB
cnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJGb3JjZUV4aXQiOwogICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuICJTdHJpbmciOwotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheSI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkpTQXJyYXlPdXRPZkJvdW5kcyI7CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZSI7
CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVy
biAiQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICBy
ZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDEyIEBAIGVudW0gTW9kZSB7CiAgICAgRm9yY2VFeGl0
LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3Bl
cmF0aW9uLCBzbyB3ZSBzaG91bGQganVzdCBnaXZlIHVwLgogICAgIEdlbmVyaWMsCiAgICAgU3Ry
aW5nLAotICAgIEpTQXJyYXksCi0gICAgSlNBcnJheU91dE9mQm91bmRzLAorICAgIEFycmF5U3Rv
cmFnZSwKKyAgICBBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBBcnJheVdpdGhBcnJheVN0
b3JhZ2UsCisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgUG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2UsCisgICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcywKICAgICBBcmd1bWVudHMsCiAgICAgSW50OEFycmF5LAogICAgIEludDE2
QXJyYXksCkBAIC02MSw2ICs2NSwyOSBAQCBlbnVtIE1vZGUgewogfTsKIH0gLy8gbmFtZXNwYWNl
IEFycmF5CiAKKy8vIEhlbHBlcnMgZm9yICdjYXNlJyBzdGF0ZW1lbnRzLiBGb3IgZXhhbXBsZSwg
c2F5aW5nICJjYXNlIEFsbEFycmF5U3RvcmFnZU1vZGVzOiIKKy8vIGlzIHRoZSBzYW1lIGFzIGhh
dmluZyBtdWx0aXBsZSBjYXNlIHN0YXRlbWVudHMgbGlzdGluZyBvZmYgYWxsIG9mIHRoZSBtb2Rl
cyB0aGF0CisvLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2UiIGluIHRoZW0uCisjZGVmaW5l
IE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzCisjZGVmaW5lIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzCisjZGVmaW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzog
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9S
QUdFX01PREVTCisjZGVmaW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZTogICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2UKKyNkZWZpbmUgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
ICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczog
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCisKIEFycmF5OjpNb2RlIGZyb21PYnNlcnZl
ZChBcnJheU1vZGVzIG1vZGVzLCBib29sIG1ha2VTYWZlKTsKIAogQXJyYXk6Ok1vZGUgZnJvbVN0
cnVjdHVyZShTdHJ1Y3R1cmUqLCBib29sIG1ha2VTYWZlKTsKQEAgLTc0LDggKzEwMSwxNyBAQCBj
b25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogaW5saW5lIGJvb2wgbW9kZUlz
SlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1v
ZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsMjUgKzE1MCw2IEBAIGlubGluZSBBcnJheTo6TW9k
ZSBtb2RlRm9yUHV0KEFycmF5OjpNb2QKICAgICB9CiB9CiAKLWlubGluZSBib29sIG1vZGVzQ29t
cGF0aWJsZUZvclN0b3JhZ2VMb2FkKEFycmF5OjpNb2RlIGxlZnQsIEFycmF5OjpNb2RlIHJpZ2h0
KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICBib29sIGxlZnRJc0pTQXJyYXkgPQotICAgICAgICBsZWZ0ID09IEFycmF5OjpKU0FycmF5
Ci0gICAgICAgIHx8IGxlZnQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKLSAgICAKLSAg
ICBib29sIHJpZ2h0SXNKU0FycmF5ID0KLSAgICAgICAgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXkK
LSAgICAgICAgfHwgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKLSAgICAKLSAg
ICBpZiAobGVmdElzSlNBcnJheSAmJiByaWdodElzSlNBcnJheSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgYm9vbCBtb2RlSXNTcGVj
aWZpYyhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTQ3LDcg
KzE2NCwxNSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9kZSBtCiAKIGlu
bGluZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW9kZSBtb2RlKQogewotICAgIHJl
dHVybiBtb2RlSXNTcGVjaWZpYyhtb2RlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEFycmF5OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQotICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICBz
ZXQoZGVzdGluYXRpb25PcGVyYW5kLAogICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAg
R2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwg
T3BJbmZvKHByZWRpY3Rpb24pLApAQCAtMjMwOSw3ICsyMzA5LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNl
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRC
dXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQs
IE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9y
YWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CkBAIC0yMzYwLDEzICsyMzYwLDEzIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBi
YXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZz
ZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZs
eSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBi
YXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDcgKzU4Myw3IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDggKzM4
MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQog
ICAgICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwotICAgICAgICBOb2RlIGdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBj
b2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBOb2RlIGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgIGlmIChtb2RlSXNKU0FycmF5KGFycmF5TW9k
ZSkpCisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0gTm9kZShHZXRCdXR0
ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwg
Y29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAgICAgICAgaWYgKHNob3Vs
ZEdlbmVyYXRlKQogICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZS5yZWYoKTsK
ICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3Jh
cGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRf
T0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9w
KCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5mbyB7CiBzdHJ1Y3QgTm9k
ZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAKKyAgICBOb2RlKCkgeyB9
CisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5v
IGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2Rl
T3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdl
KSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0
UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKEdldEJ1dHRl
cmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpAQCAtMjI0LDE0ICsy
MjUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICBpZiAo
aXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5
KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKSB7Ci0g
ICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAg
ICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVp
Y2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGdsb2Jh
bERhdGEsIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0
cmljdCk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgs
IHZhbHVlLCBzdHJpY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMzksMTEgKzM0
MCwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEV4CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIC8vIEZJ
WE1FOiB0aGUgSklUIHVzZWQgdG8gaGFuZGxlIHRoZXNlIGluIGNvbXBpbGVkIGNvZGUhCi0gICAg
aWYgKGlzSlNBcnJheShiYXNlKSAmJiBhc0FycmF5KGJhc2UpLT5jYW5HZXRJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheShiYXNlKS0+Z2V0SW5kZXgo
aW5kZXgpKTsKKyAgICBpZiAoYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNhbkdldEluZGV4
UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgfQogCi0gICAgLy8gRklYTUU6IHRoZSBK
SVRzdHViIHVzZWQgdG8gcmVsaW5rIHRoaXMgdG8gYW4gb3B0aW1pemVkIGZvcm0hCiAgICAgaWYg
KGlzSlNTdHJpbmcoYmFzZSkgJiYgYXNTdHJpbmcoYmFzZSktPmNhbkdldEluZGV4KGluZGV4KSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1N0cmluZyhiYXNlKS0+Z2V0SW5kZXgo
ZXhlYywgaW5kZXgpKTsKIApAQCAtNTMyLDE1ICs1MzQsMTUgQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8ZmFs
c2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVk
VmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBpbnQzMl90
IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
ICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBn
ZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAg
IEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1
dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRl
eCkpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTU0OSwxNSArNTUxLDE1IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAg
IGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlm
IGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFh
cnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChh
cnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7
CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpOworICAg
ICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkBAIC0xMjk0LDIwICsxMjk2LDI5IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlU3QKIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1
bHQ7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxP
dXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSwgJnJlc3VsdCkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKyAxKTsKKyAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3Jl
YXRlVW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQog
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKG5ld1NpemUsICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsg
MSkgKyBuZXdTaXplOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAg
ICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwg
bmV3U2l6ZSwgZmFsc2UsIDApKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCAw
LCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlc3VsdCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIG9iamVj
dC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIG9iamVj
dC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGRvdWJsZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNf
REZHT3BlcgogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFU
SU9OICgqU19ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0
aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRUFaSikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QsIEVuY29kZWRK
U1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9a
SikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBK
U0NlbGwqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJ
Y2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTA1LDggKzEwNSwxMCBAQCB0
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZH
X09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQz
Ml90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZH
T3BlcmF0aW9uX1cpKFdhdGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNP
YmplY3QqKTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VP
UykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsK
K3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3Rh
dGUqLCBzaXplX3QpOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mg
b3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBK
SVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKQEAgLTEzOCw4ICsxNDAsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxTdHJpCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxO
b25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3Rh
dGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlv
bmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJh
eSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkBAIC0xODUsNiArMTg3LDggQEAgc2l6ZV90IERGR19P
UEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbgogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aElu
aXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBu
ZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAogLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1
bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2Yg
dGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDgsNyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6
IAorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseTogCiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
OSwxMiArMTk5LDEyIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIK
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0R1BSKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9h
ZFB0cihwcm90b09iamVjdC0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHRHUFIp
OworICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3Mo
KSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwgcmVzdWx0R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5P
dXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJl
c3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5
KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Cisg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI1MywxMCArMjUzLDEwIEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CiAgICAgICAgIAotICAgICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2lu
Zm8pKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2g4KE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKLSAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MjMsNyArNDIzLDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRj
aEdQUik7CiAjZWxzZQpAQCAtNDczLDcgKzQ3Myw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0
QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSks
IHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxzZQpAQCAtNjgxLDE3ICs2
ODEsMTcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIGlmIChpc0lubGlu
ZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
KSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGlu
ZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9
CiAjZW5kaWYKICAgICAKQEAgLTgzMCw3ICs4MzAsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIEFTU0VS
VChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMyk7CisgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjEpOwogICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3ViUHRyKE1hY3JvQXNzZW1i
bGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0
Y2hHUFIxKSk7CiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwpAQCAtODQ0LDcgKzg0NCw3IEBAIHN0
YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwog
ICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwogICAgIH0KIApAQCAtODU0LDgg
Kzg1NCw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAgLTg2Myw5ICs4NjMsOSBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAg
fQogI2VuZGlmCiAgICAgICAgICAgICAKQEAgLTEwMjAsNiArMTAyMCwxMSBAQCBzdGF0aWMgYm9v
bCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgJiYgb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNl
IHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCisgICAgICAgICAg
ICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVy
KG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgYmFzZUNlbGwpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNyArNDk4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIEpJVENvbXBpbGVyOjpQ
YXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQucGF0Y2hhYmxlQnJhbmNoUHRyV2l0
aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAg
ICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1faml0Lmxv
YWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBk
b25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
dmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRj
aEdQUik7CiAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlT
dG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1f
aml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVM
YWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC0yNDMyLDIzICsyNDMyLDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3
aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2UgaXMgc29tZSBraW5kIG9m
IGFycmF5LAotICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludC4KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKQEAgLTI1MzgsNiArMjUzMiw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGFs
cmVhZHlIYW5kbGVkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogdGhlIGJhc2UgbWF5IG5vdCBiZSBuZWNlc3NhcnkgZm9yIHNvbWUgYXJyYXkgYWNjZXNz
IG1vZGVzLiBCdXQgd2UgaGF2ZSB0bworICAgICAgICAvLyBrZWVwIGl0IGFsaXZlIHRvIHRoaXMg
cG9pbnQsIHNvIGl0J3MgbGlrZWx5IHRvIGJlIGluIGEgcmVnaXN0ZXIgYW55d2F5LiBMaWtlbHkK
KyAgICAgICAgLy8gbm8gaGFybSBpbiBsb2NraW5nIGl0IGhlcmUuCiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CiAgICAgICAgIApAQCAtMjU0NSw4
ICsyNTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
Y2hpbGQzKTsKIAogICAgICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50
byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KQEAgLTI1NzMsOCArMjU2
OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsK
KyAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCiAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBiZXlvbmRBcnJheUJvdW5kcyk7CiAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNTg3
LDkgKzI1ODMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBo
b2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5n
dGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5n
dGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CiAKICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0
KTsKQEAgLTI1OTgsNyArMjU5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAotICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKQEAgLTI3
NjcsMTcgKzI3NjMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAog
ICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJ
bW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAg
IG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3RvcikpKTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yODAzLDE4ICsyNzk5LDE4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BS
ID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zm
c2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwogICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBz
dG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVk
SW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVHUFIpOwogICAgICAgICAK
LSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkp
KTsKIAogICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCkBAIC0zNDAyLDE0
ICszMzk4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7
CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc1Miw3ICszNzQ4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2VuZGlmCiAgICAgICAg
IG1faml0Lm5lZzMyKHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIocmVzb2x2ZUluZm9HUFIsIHJlc29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNj
YWxlUHRyLCAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NSwxOSArMzE1LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8K
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpT
U3RyaW5nOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgIC8vIFRoaXMg
Y29kZSBkdXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNv
ZGUgYmVpbmcKLSAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUu
CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCB0ZW1wLmdwcigpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hQdHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFn
ZSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlf
U1RPUkFHRV9NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2g4KAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZv
KSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCks
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAg
ICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CkBA
IC0zMTI3LDExICszMTM2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4
ZWRQcgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJl
Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlQoZGVzY3JpcHRvcik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7
CkBAIC0zMjYwLDEzICszMjY0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5
cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFH
RV9NT0RFUzogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwg
cmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CiAgICAgICAgICAgICAKQEAgLTMzNjIsNiArMzM2NSwyMCBAQCBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIGlmIChoYXNJbmRleGlu
Z0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKQEAgLTMzODMs
MTMgKzM0MDAsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAog
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgs
IHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0
eSwgc2NyYXRjaEdQUikpOwogICAgICAgICAKLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAg
ICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5v
ZGUmIG5vZGUpCiB7CisgICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3Ro
RmFjdG9yOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkp
OworCisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5
U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUp
KTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTdG9yYWdlT3BlcmFuZCBv
bGRTdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
MSh0aGlzKTsKQEAgLTM0MDIsOSArMzQzNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWFsbG9jYXRlUHIKICAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7
CiAgICAgICAgIAotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpOwotICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZh
Y3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsK
ICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRh
KCktPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAgICAgICAKICAgICBtX2ppdC5sb2FkUHRy
KCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUjIpOwpAQCAt
MzQxNSwxMyArMzQ0NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpT
VmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpKTsKKyAgICAgICAgc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwg
c2NyYXRjaEdQUjIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAvLyBXZSBoYXZl
IHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0gc2NyYXRjaAogICAgIGZv
ciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgLShvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCAt
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgfQotICAg
IG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BS
MiwgbV9jb21waWxlSW5kZXgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU2
LDYgKzExNTYsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNT
dGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgb2JqZWN0KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKG9iamVjdCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6ZSkp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qg
c2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTEzNjgsNyArMTM3OCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJn
Myk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CkBAIC0xNjY2LDcgKzE2NzYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcz
UGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMjE0
MSw3ICsyMTUxLDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9p
bnRlci4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgQ2xhc3NUeXBlOjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9CiAKICAgICAvLyBJdCBp
cyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRvIHNjcmF0Y2gsIHNvIGxv
bmcgYXMgeW91J3JlIGZpbmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAg
ICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAgICBjYXNl
IEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6ZShzaXpl
X3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNpemVCbG9ja0Zvcih2b2lkKiBwdHIp
OwogCi0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQq
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93
Q2FzZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVPdmVy
c2l6ZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZU92
ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklE
IHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmll
clVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBk
ZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0ZUJhc2lj
SlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3Rv
cmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwg
UmVnaXN0ZXJJRCByZXN1bHQpOworICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFn
ZShzaXplX3QsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmpl
Y3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIp
OwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0
ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNz
VHlwZSwgYm9vbCBkZXN0cgogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoJkNsYXNzVHlwZTo6
c19pbmZvKSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKIAog
ICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlcgot
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBDbGFzc1R5cGU6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cigwKSwgQWRkcmVzcyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0Zp
bmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9p
ZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIGZh
bHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAKLWlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdpc3RlcklEIHJlc3Vs
dCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXpl
LCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KQogewogICAgIENv
cGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5zdG9yYWdlQWxs
b2NhdG9yKCk7CiAKQEAgLTQ0MywzNyArNDQzLDMyIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFs
bG9jYXRlQmFzaWNTdG9yYWcKICAgICBzdG9yZVB0cihyZXN1bHQsICZhbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7CiAgICAgbmVnUHRyKHJlc3VsdCk7CiAgICAgYWRkUHRyKEFic29sdXRl
QWRkcmVzcygmYWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgcmVzdWx0KTsKLSAgICBz
dWJQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOworICAgIHN1YlB0cihUcnVzdGVkSW1t
MzIoc2l6ZSAtIG9mZnNldEZyb21CYXNlKSwgcmVzdWx0KTsKIH0KIAogaW5saW5lIHZvaWQgSklU
OjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBs
ZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBS
ZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IHN0
ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEpTQXJyYXk6
OnN0b3JhZ2VTaXplKGluaXRpYWxMZW5ndGgpOworICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9
IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihp
bml0aWFsTGVuZ3RoKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFja2luZyBzdG9yZSBm
aXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAgICAgLy8gZG9lc24ndCBo
YXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAgZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0KTsKKyAgICBlbWl0QWxsb2Nh
dGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRleGluZ0hlYWRlciksIHN0
b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwgZm9yIHRoZSBhcnJheS4K
ICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIGZhbHNlPihUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSksIGNlbGxS
ZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5m
byBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZzZXQoKSkpOwogICAg
IHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSkp
OworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6aW5kZXhC
aWFzT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0
b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0KCkpKTsKIAogICAgIC8v
IFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRyKHN0
b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSk7CisgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIAotICAgIC8vIFN0b3JlIHRoZSB2ZWN0b3IgbGVu
Z3RoIGFuZCBpbmRleCBiaWFzLgotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjppbmRl
eEJpYXNPZmZzZXQoKSkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc3BhcnNlIHZhbHVlIG1h
cC4KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpT
QXJyYXk6OnNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkpKTsKLQotICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWVzIHdlIGhhdmUuCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lz
dGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7CkBAIC00ODUsMTYgKzQ4
MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnMKICAgICAgICAg
c3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBzaXpl
b2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvLyBaZXJvIG91dCB0aGUgcmVt
YWluaW5nIHNsb3RzLgotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA8IGluaXRpYWxM
ZW5ndGg7IGkrKykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwotI2Vsc2UKLSAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNlbmRpZgotICAgIH0KIH0KIAogI2lmIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OSw3ICsxNjY5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGxl
bmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNw
YWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkpKSB7CisgICAgaWYg
KENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjg4LDcgKzE2ODgsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFsbG9jYXRpb24gd291bGQg
YmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9wZXIgc3R1YiBjYWxsIGFi
b3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGludCBsZW5ndGggPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVy
c2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkKKyAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Igc3RvcmFnZS4KICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gTWFya2VkU3BhY2Ug
Zm9yIGNlbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0
cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOwogICAgIAogICAgIC8vIFRl
c3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aEFuZFR5cGUo
KSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
QWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1f
Y2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0ZvcihpKSwgcmVnVDMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTAgKzExNCwxMCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOwog
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QwKSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIAogICAgIGlmIChmaW5hbE9iamVjdE1vZGUgPT0g
TWF5QmVGaW5hbCkgewogICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4s
IG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOwotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICAg
ICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwpAQCAt
MTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUK
ICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwog
I2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgICAgICBuZWcz
MihvZmZzZXQpOwogICAgIH0KICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7
CkBAIC0yMzksMTAgKzIzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3Ry
dWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3Ry
dWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9y
YWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlZ1QyKTsKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKQEAgLTI1Miwx
MCArMjUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAg
ICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRk
cmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIAogICAg
IGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAg
IHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKICAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgSklUOjpj
b21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBQYXRjaGFibGVKdW1wIHN0cnVjdHVy
ZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1
Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogCi0gICAgQ29udmVy
dGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZl
cnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxvYWRQ
dHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QwLCBwYXRjaEdldEJ5
SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVzdWx0KHRoaXMpOwpA
QCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlv
bioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKIAotICAg
IENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQg
PSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsID0gc3Rv
cmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1
dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShz
ZXF1ZW5jZVB1dEJ5SWQpOwpAQCAtNTA4LDggKzUwOCw4IEBAIHZvaWQgSklUOjpjb21waWxlUHV0
RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFs
dWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7Cisg
ICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0
SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21waWxlIGEgbG9hZCBmcm9t
IGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCkBAIC01
MjAsOCArNTIwLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHQpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZz
ZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNP
YmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZz
ZXQpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQo
SlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoYmFzZS0+
YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAgIGxvYWRQdHIoYmFzZS0+YnV0
dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9m
ZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBi
b29sIGRpcmVjdCkKQEAgLTY1NywxMSArNjU3LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQ
dHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmlsZShzdHViSW5mby0+Ynl0
ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAg
SnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19p
bmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihB
cnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQg
dGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlZ1QyKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxl
bmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaDMyKExlc3NU
aGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0lt
bU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw4ICsxNTE2LDggQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXRfYgogICAgIEFTU0VSVChiYXNlVmFsdWUu
aXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChiYXNlVmFsdWUpOwog
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0g
ICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFn
ZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNlLT5zZXRPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBv
bGRTaXplLCBuZXdTaXplKTsKKyAgICBiYXNlLT5zZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgYnV0
dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIGJhc2U7CiB9CkBAIC0yNTI3LDEy
ICsyNTI3LDEyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKIAog
ICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90
IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFs
dWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUp
OwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAg
ICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRl
eFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmds
b2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBK
U0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBKU09iamVj
dDo6cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBi
YXNlVmFsdWUucHV0QnlJbmRleChjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDEsNyArOTAxLDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICAgICAgICAgIHBj
WzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KCZsbGludF9vcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAg
ICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBw
Y1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk2
Myw3ICs5NjMsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IHBjWzZdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hh
aW4oZXhlYyk7CkBAIC05OTEsNyArOTkxLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KCZsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAgICAg
ICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTA3MCwxMiArMTA3MCwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X2J5X3ZhCiAgICAgCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsK
ICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAo
aXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBh
c0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5kZXgo
aSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdmFs
dWUpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYgKG9i
amVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0
SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGV4ZWMsIGksIHZhbHVl
LCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgICAgIEpT
T2JqZWN0OjpwdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBMTElOVF9FTkQoKTsKICAgICAgICAg
fQogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lv
biAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIxICs5NDEsMjEgQEAgX2xsaW50
X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5v
dEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAg
ICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdl
Q2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAgbG9hZHAgSlNP
YmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3Rv
cmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAq
IDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQ
YXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRT
dG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBKU09iamVjdDo6
bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2Fk
aSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDgg
LSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQs
IDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGJpbHQg
cHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAgbG9h
ZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9y
YWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKICAgICBqbXAg
LnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3Jh
Z2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisg
ICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdl
CiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxv
YWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRpIFRhZ09m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdI
ZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVv
ZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBh
eWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc5NCwyMCArNzk0LDIw
IEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3RvcmFn
ZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0QXNQ
b2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHByb3BlcnR5
T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtv
YmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1Bv
aW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RB
bmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxvYWRQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFn
ZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vb
b2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6
bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBuZWdp
IHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9w
ZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNG
aW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIp
ICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVT
dG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJbmRleGlu
Z0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0lu
dCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAt
IHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFz
SW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBA
IC0xMTI2LDggKzExMjYsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCBDb2Rl
QmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0Fy
cmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3Qz
XSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MF0s
IHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wR2V0QnlW
YWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFl
cSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xlbmd0aFt0
M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9h
ZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5v
cEdldEJ5VmFsU2xvdwpAQCAtMTIxMSw4ICsxMjExLDggQEAgX2xsaW50X29wX3B1dF9ieV92YWw6
CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0MAogICAgIGxvYWRwIEpT
R2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAgYnBuZXEgU3RydWN0dXJl
OjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWFlcSB0MiwgSlNB
cnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0Fy
cmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6IEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlWYWxTdG9y
ZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEyMjMsOSArMTIyMyw5
IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAgIGFkZGkg
MSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgQXJy
YXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBiaWIg
dDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhXb3JkW3Qw
XSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAgc3RvcmVp
IHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBdCiAgICAgam1wIC5v
cFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBlbHNlCiAgICAg
Y29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcg
YWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlwZSBjb25zdGFudHMuCiBj
b25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEzCkBAIC0zMTgsNyArMzIz
LDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFzc0luZAogICAgICAgICBs
b2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgogICAgICAgICBzdG9yZXAg
c2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUsIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fb3V0T2ZMaW5l
U3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
cmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgsNyBAQCBtYWNybyB3aXRoSW5s
aW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0aE91dE9mTGluZVN0
b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkcCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQorICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKICAg
ICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdpc3RlciBub3cgcG9pbnRz
IHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhlIG9iamVjdCByZWdp
c3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgbm90IG5l
ZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVk
ZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5
Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLworLy8gUHJvcGVydGll
cyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRp
b25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vICAgKiBB
IHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgor
Ly8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVu
dGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4gdW5zaWduZWQgaW50
ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVY
CisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVl
IDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdlcikgYXJlIG5vdCBj
b25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVj
dCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRl
bnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKKy8vIHdoZXJl
IChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBz
dG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAu
ICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisvLyBm
YXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRo
ZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAgdW5s
ZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRp
ZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIK
Ky8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2Ug
YXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3b3Vs
ZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBs
ZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdv
dWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRF
WCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVk
CisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0
b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBl
bnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGV4aW5nSGVh
ZGVyOjptYXhpbXVtTGVuZ3RoKSkKKworLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9z
IHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEg
UElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5
MT4uCisjZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAw
eEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRo
b3VnaCBpdCdzIGFuIGludGVnZXIuCisjZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZF
VQorCisvLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBv
ZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdh
cyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIz
KSkKKyNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQg
dG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0
IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgorI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisv
LyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBz
cGFyc2UgbWFwLgorLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRl
ciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0
b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhh
dCwgd2UgdXNlIGEgbWFwLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBs
aWVyID0gODsKKworaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBs
ZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVt
VmFsdWVzOworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJh
eSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGlu
Z0hlYWRlciByZXN1bHQ7CisgICAgcmVzdWx0LnNldEF1eFdvcmQobGVuZ3RoKTsKKyAgICByZXN1
bHQuc2V0TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICByZXR1cm4gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0Vf
VkVDVE9SX0xFTik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlD
b252ZW50aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBl
LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCkBAIC0xMTQsOSArMTE1LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlwZTo6
c19pbmZvID0KIEBlbmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJh
eUJ1dHRlcmZseShleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBlKiBw
cm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4
ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBidXR0
ZXJmbHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5cGU6
OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
KyAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgYnV0
dGVyZmx5KQogewogfQogCkBAIC0yOTIsOCArMzAxLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0
aDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNPYmot
PmNhbkdldEluZGV4KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4
KGspOworICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAgICAg
ICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAg
CkBAIC00MTMsMTAgKzQyMiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAogICAg
ICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5j
YW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2ts
eShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
YXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxl
bWVudC50b1VTdHJpbmdJbmxpbmUoZXhlYykpOwogICAgICAgICAgICAgZWxzZQpAQCAtNjI4LDcg
KzYzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1
bmN0aW9uLCBjYWxsRGF0YSk7CiAKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpT
QXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VNb2RlKCkpIHsKKyAg
ICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJh
eSh0aGlzT2JqKS0+aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICBpZiAoaXNOdW1l
cmljQ29tcGFyZUZ1bmN0aW9uKGV4ZWMsIGNhbGxUeXBlLCBjYWxsRGF0YSkpCiAgICAgICAgICAg
ICBhc0FycmF5KHRoaXNPYmopLT5zb3J0TnVtZXJpYyhleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKQpA
QCAtNzg4LDkgKzc5Nyw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBD
YWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUg
diA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5LT5n
ZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlU
aGlzKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgdik7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKQEAgLTg0NiwxMSAr
ODU1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxs
IGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFl
eGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFy
cmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTkwOSwxMSArOTE4LDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hl
ZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5o
YWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtOTY1LDExICs5NzQsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2Fs
bChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdl
dEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtMTAxNywxMSArMTAyNiwxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4
ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0
aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5k
ZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTEwNzUsOCArMTA4NCw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNl
IGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewotICAgICAgICBydiA9IGFycmF5
LT5nZXRJbmRleCgwKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KDApKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KDApOwogICAg
ICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKQEAgLTEwOTcsOCArMTEwNiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwogICAgICAg
ICAgICAgSlNWYWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0SW5k
ZXgoaSkpKQotICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAg
ICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpKQorICAgICAgICAg
ICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hp
bGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2MSw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxz
ZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKXsKLSAgICAgICAg
cnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYg
YXJyYXktPmNhbkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSl7CisgICAgICAgIHJ2ID0gYXJy
YXktPmdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMTc0LDkg
KzExODMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMCwgcnYpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXgoaWR4KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaWR4KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVl
biBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCi0g
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleChpZHgp
KTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4
UXVpY2tseShpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwganNO
dW1iZXIoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDMsIGFycmF5
KTsKICAgICAgICAgICAgIHJ2ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNjc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgICAg
IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7
CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7Ci0gICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9o
CisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5Lmgi
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVl
TWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAg
QSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisv
LyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5l
ZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRT
dG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5
IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1
aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2lu
dGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4
QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdl
KCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQg
YXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlT
dG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdl
KiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAgSW5k
ZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZy
b20odGhpcyk7IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGlu
ZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBz
ZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQo
bGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQg
bGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYg
b3RoZXIpCisgICAgeworICAgICAgICBtX3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOwor
ICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZh
bHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2lu
aXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBv
dGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAg
IGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NwYXJzZU1hcCAm
JiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAgICAKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsKKyAgICB1
bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4K
KyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OworICAgIHVpbnRwdHJfdCBtX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1aW50
cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVj
dG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1
cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVh
ZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVu
Z3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1faW5kZXhCaWFzKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9zcGFyc2VNYXApOyB9CisgICAgCisgICAgc3RhdGljIHNpemVf
dCBzaXplRm9yKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZs
eV9oCisjZGVmaW5lIEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90Vmlz
aXRvcjsKK3N0cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkg
eyB9IC8vIE5vdCBpbnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIHNpemVf
dCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID8gaGFz
SW5kZXhpbmdIZWFkZXIgOiB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2Fw
YWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyAoaGFz
SW5kZXhpbmdIZWFkZXIgPyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIDogMCkgKyBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFz
ZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlD
YXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJl
dHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZB
dXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1
cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVu
Z3RoKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVk
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0
aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBp
bmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9Cisg
ICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsg
cmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50
IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJ
bmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSk7CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBw
ZXJmb3JtIHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAg
IC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2Nj
dXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1
c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxs
b2NhdGlvbgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0
aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkg
aW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVy
dHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRl
cmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsK
KyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hl
YWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMg
emVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG9sZFByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNp
emVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1By
ZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1
bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhh
cyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5KiBzaGlmdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlu
bGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1
ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsK
KyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoCisgICAgICAgICAg
ICB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyksICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0go
KTsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQorICAgICAg
ICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFz
SW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVy
KCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5
OjpiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7
CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsK
KyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGds
b2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweSgKKyAgICAgICAg
cmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAg
IGJhc2UocHJlQ2FwYWNpdHksIG9sZFByb3BlcnR5Q2FwYWNpdHkpLAorICAgICAgICB0b3RhbFNp
emUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3Rv
cmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
c3RydWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFk
ZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCkt
PmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNp
dHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNF
RChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1
cmUpKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIg
PT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAg
IHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKAorICAgICAgICAgICAgJnRoZUJhc2Us
CisgICAgICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdI
ZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgICAgIHRvdGFs
U2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwg
MCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJl
dHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBv
bGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVh
ZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRl
cigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkUHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0
eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXpl
ZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgbWVtY3B5KAorICAgICAgICByZXN1bHQtPmJhc2UobmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpLAorICAgICAgICBiYXNlKG9sZFByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KSwKKyAgICAgICAgc3RkOjptaW4oCisgICAgICAgICAgICB0b3RhbFNpemUoCisgICAgICAgICAg
ICAgICAgMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgICAgIHRvdGFsU2l6ZSgKKyAgICAgICAg
ICAgICAgICAwLCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KTsKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nSGVhZGVyKCktPmlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAg
ICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
fQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hl
YWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xv
dHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5z
aWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
KyAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMg
YXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdl
J3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVt
bW92ZSBhbmQgKDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9y
eSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAor
ICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNh
bm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAo
cGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJp
YWJsZSksIG5vciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25p
emUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBw
cm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBh
cyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVy
Ojpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5
KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGlu
Z0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdW5zaWduZWQgcHJvcGVy
dHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhN
RTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KKyAgICBtZW1tb3ZlKAorICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3RzLAor
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0
dGVyZmx5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5
SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0
aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKICAgICAgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93
blByb3BlcnR5TmFtZXM7CiAKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBHZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7CisKICAgICAg
ICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAg
ICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKQEAgLTEy
NCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNs
YXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1
ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCisgICAgICAg
ICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFt
ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpoYXNJbnN0YW5jZSwgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcl9oCisjZGVmaW5lIEluZGV4aW5n
SGVhZGVyX2gKKworI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgU3RydWN0dXJlOworc3RydWN0IEFycmF5U3Rv
cmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIC8vIERlZmluZSB0
aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1Zh
bHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJm
bG93LgorICAgIGVudW0geyBtYXhpbXVtTGVuZ3RoID0gMHgxMDAwMDAwMCB9OworICAgIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSW5kZXhpbmdIZWFkZXIsIG1fYXV4V29yZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBt
X2xlbmd0aCk7IH0KKyAgICAKKyAgICAvLyBUaGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4
aW5nSGVhZGVyIGlzIGFsbCB6ZXJvJ3MgaXMgcGFydCBvZiB0aGUKKyAgICAvLyBjb250cmFjdCBv
ZiB0aGlzIGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRl
cGVuZAorICAgIC8vIG9uIGl0LgorICAgIEluZGV4aW5nSGVhZGVyKCkKKyAgICAgICAgOiBtX2F1
eFdvcmQoMCkKKyAgICAgICAgLCBtX2xlbmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2
b2lkIHNldExlbmd0aCh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVu
Z3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9
CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAg
IHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7
IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hl
YWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5k
ZXhpbmdIZWFkZXIqIGZyb20oY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRl
cmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20o
QXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2Ug
cHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9w
ZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENv
bnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7Cisg
ICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAg
ICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhh
dCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hl
YWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90
IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBh
cnJheSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBp
bmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0eXBlLgorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhp
bmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJl
KQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJy
YXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZp
bmUgSW5kZXhpbmdUeXBlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBJ
bmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBh
YmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAg
ICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAg
ICAgICA9IDg7CisKKy8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5
IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91
IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFkQXJy
YXlTdG9yYWdlICAgICAgICAgID0gMTY7IC8vIE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlkIGhh
dmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUgcGFzdC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFy
cmF5IHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAg
ICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5
ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CisK
Ky8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2li
bGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIoSW5kZXhpbmdUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBIYXNB
cnJheVN0b3JhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4
aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBA
QCBjb25zdCBDbGFzc0luZm8gSlNBY3RpdmF0aW9uOjpzX2luZm8gPSB7CiAKIEpTQWN0aXZhdGlv
bjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSkKICAgICA6IEJhc2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCksIGNhbGxG
cmFtZS0+cmVnaXN0ZXJzKCkpCi0gICAgLCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIHRoaXMsIDApCisgICAgLCBtX3JlZ2lzdGVyQXJyYXkoMCkKICAgICAsIG1fbnVt
Q2FwdHVyZWRBcmdzKG1heChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgZnVuY3Rpb25FeGVj
dXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2lzVG9ybk9m
ZihmYWxzZSkKQEAgLTY3LDEyICs2NywxMiBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIAogICAgIC8vIE5vIG5lZWQgdG8gbWFyayBvdXIgcmVnaXN0ZXJzIGlmIHRoZXkncmUgc3Rp
bGwgaW4gdGhlIFJlZ2lzdGVyRmlsZS4KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJh
eSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5nZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3Jh
Z2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheTsKICAgICBpZiAo
IXJlZ2lzdGVyQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHZpc2l0b3IuY29weUFuZEFw
cGVuZChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0
LT5yZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4o
cmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRo
aXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJp
ZXI6OlVuY2hlY2tlZCk7CisgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0
ZXJBcnJheTsKICAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0
aGlzT2JqZWN0LT5yZWdpc3Rlck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVu
dHMgb2JqZWN0LCBzaW5jZSBpdCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzMSw3ICsxMzEs
NyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2Jq
ZWN0KTsKIApAQCAtMTQ2LDggKzE0Niw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBT
a2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5
TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0
IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25z
dDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90
IHJlZ2lzdGVyQXJyYXlTaXplKCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUlu
Qnl0ZXMoKTsKIAotICAgICAgICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIElu
ZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3Qg
Y29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJl
Z2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJz
IG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdz
OwogICAgICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnMgOiAzMDsKICAgICAgICAgYm9vbCBtX2lz
VG9ybk9mZiA6IDE7CkBAIC0xNjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1tp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwogCi0gICAgICAg
IG1fcmVnaXN0ZXJBcnJheS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnaXN0ZXJBcnJheSk7Cisg
ICAgICAgIG1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIG1fcmVnaXN0
ZXJzID0gcmVnaXN0ZXJzOwogICAgICAgICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
bnlwb3AuY29tKQogICoKQEAgLTI0LDEzICsyNCwxNiBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
IAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0FW
TFRyZWUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KQEAgLTQ1LDQ5MSArNDgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1Nf
RklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNB
cnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpT
QXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0v
LyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFn
ZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8g
UHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJz
IHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBv
ciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChz
cGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZG
RkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVy
ZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3Bl
cnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIs
IHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0g
TUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBp
biBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFy
cmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246
Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVl
IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhl
IGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBp
bnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAg
IGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwg
ZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0
b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0v
LyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUg
cG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8
PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAg
ICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6
ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1p
dCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBj
YW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVl
IG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4
KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNo
LU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRF
WCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0
IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVn
ZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUg
QkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMg
d2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBz
ZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9W
RUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwg
Z3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFk
ZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3
aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9y
IGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5
cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMg
aXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3Qg
Q2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2Vl
cCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24u
ICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUg
dG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2Fw
cGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3Rh
dGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNE
ZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykK
LXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3Ro
IC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCi1zdGF0aWMgYm9vbCBy
ZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQotewotICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgbWVzc2FnZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgIUNIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0KLWlubGluZSB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3ko
Q29uc2lzdGVuY3lDaGVja1R5cGUpCi17Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0
aCA9IEJBU0VfVkVDVE9SX0xFTjsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBz
dG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2Ug
PSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFs
U3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBt
X3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBt
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5n
dGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxl
bmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwotI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotSlNB
cnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwot
Ci0gICAgLy8gQ2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRo
IGEgdmVjdG9yLgotICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVu
Z3RoID0gbWF4KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0gICAgdW5zaWduZWQg
aW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0K
LSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdl
Kj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsK
LSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxl
bmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gaW5pdGlhbExlbmd0aDsKLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0g
ICAgbV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwotICAgIG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0
aGlzOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMg
b24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
ayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotfQotCi1pbmxpbmUg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChK
U0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5
OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKLSAgICBzaXplX3QgY2Fw
YWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVk
Q2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5
Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBtX3JlcG9ydGVkQ2Fw
YWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5l
IHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0g
ICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRy
eSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBz
ZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFw
LgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0
eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0
aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJl
bW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoZW50cnkuYXR0cmli
dXRlcyAmIEFjY2Vzc29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFj
Y2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRl
clNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0g
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0g
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0g
ICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwot
fQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRl
KiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAg
ICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0g
ICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQg
dG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlz
IGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2li
bGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUg
YWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxl
KCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBv
biBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9Ci0KLSAgICBlbnRyeS5h
dHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwg
dmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVu
dHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWUg
PSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAgaWYgKExJS0VMWSghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJT
ZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikgewotICAgICAgICBzbG90
LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2xvdC5zZXRH
ZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6Omdl
dChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17Ci0gICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKLX0KLQotaW5saW5lIEpT
VmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJy
YXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NF
UlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRl
clNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBj
YWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJz
ZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewotICAgIEFTU0VSVCghYXR0
cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFy
c2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXQgPSBt
X21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZp
dC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IG5ldyBTcGFyc2VB
cnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmlu
YWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFyc2VNYXAoKQotewotICAg
IGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSAwOwotfQot
Ci12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgaWYgKCFtYXAp
IHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKLQotICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVu
Z3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsK
LSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBz
byBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAgLy8gYW5kIGF0dHJpYnV0
ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAgICAgICAgaWYgKHZhbHVl
KQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQqIG5ld1Jhd1N0b3JhZ2Ug
PSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdl
U2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIEFy
cmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1Jh
d1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3JhZ2UsIHN0b3JhZ2VTaXpl
KDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9z
dG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7Ci0gICAgbV92ZWN0b3JM
ZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKLXsKLSAgICBpZiAo
ZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
dmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUlu
TWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
b2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkp
Ci0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAg
ICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAg
ICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAgICBKU09i
amVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgp
KQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLSAgICAg
ICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAg
ICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLQotICAgICAgICBH
ZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAg
ICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikKLSAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwotCi0gICAgICAg
IGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKLSAg
ICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsK
LSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gRVM1LjEgOC4x
Mi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOwotCi0g
ICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1
dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAgICAvLyBG
SVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVz
IGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAgIC8vIOKA
kyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3NpbmcgYXR0cmli
dXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKLSAgICAgICAgLy8g
c3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQgYSB2YWx1
ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KLSAgICAgICAgaWYg
KCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFkZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRocm93RXhjZXB0aW9uKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZh
bHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0gICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVu
dHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gMi4g
TGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5h
bCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBl
eHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KLSAgICAvLyA0LiBJZiBjdXJyZW50IGlz
IHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCi0gICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAg
IG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24g
b2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihE
ZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQotICAgICAgICAv
LyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0Vu
dW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAg
IC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAg
ICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAg
ICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2Ny
aXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgotICAg
ICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBh
bmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKLSAg
ICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNj
IGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQot
ICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYy4g
UmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOwotICAg
ICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
UmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7Ci0KLSAgICAgICAg
cHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgbV9z
dG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJz
ZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28g
b2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlz
IHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hl
biBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCi0gICAgUHJv
cGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwot
ICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywg
Y3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gNy4gSWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVuCi0gICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgIGlmIChkZXNjcmlw
dG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9m
IGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIu
Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5l
bnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51
bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgfQot
Ci0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5v
IGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIWRlc2NyaXB0b3IuaXNH
ZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQg
cmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0g
ZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDkuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0
aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAg
ICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2
ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAg
ICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVz
IGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAg
ICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgICAgIC8vIDkuYy4gRWxz
ZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vz
c29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIC8vIFByZXNlcnZl
IHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25m
aWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KLSAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMg
YW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIg
ZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlw
dG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8v
IDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KLSAgICAgICAgICAgIC8vIDEwLmEuIElmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgICAg
ICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0p
IGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCi0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJl
c2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNl
bnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2Uu
Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAg
ICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZh
bHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkg
bmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRo
ZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFw
LCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAvLyAxMy4gUmV0dXJuIHRydWUuCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRl
KiBleGVjLCBib29sIHdyaXRhYmxlKQogewogICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkg
fHwgIXdyaXRhYmxlKTsKICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRh
KCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsK
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXA7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgbWFwLT5zZXRMZW5ndGhJc1JlYWRPbmx5KCk7CiB9
CkBAIC02MzAsMzggKzE1OSwxMCBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0CiAgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4
ICsgMS4KICAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3Bl
cnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xk
TGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJl
dHVybiB0cnVlLgogICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIGFy
cmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gTUFYX0FSUkFZ
X0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmpl
Y3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5k
KCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4gYXJy
YXktPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxNzMsNiBAQCBi
b29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwot
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xv
dCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzE4NCw2IEBAIGJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwot
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAg
ICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlz
T2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBt
YXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlw
dG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03
MTQsMTEgKzE5MSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoK
IHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMp
OwpAQCAtNzMzLDE5NCArMjA1LDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNh
c2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0
b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZl
Y3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAg
ICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAg
fSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlz
IGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBh
cyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5E
RVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFw
KSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5
IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2Nh
dGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0g
ICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFy
cmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElz
UmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxl
bmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hl
Y2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwg
Y29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVj
dG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBt
YXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0
ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBD
b3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0
aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmly
c3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7
Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlz
IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9y
TGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJl
IHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFt
YXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hv
dWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBt
YXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVw
ZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1f
bGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAg
ICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9y
LCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAm
JiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAg
ICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVu
IHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBw
cm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAg
IGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlz
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0
aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7
Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhl
IGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0
aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICgh
aXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRo
cm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90
IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVz
aW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgot
ICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9k
ZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24g
ZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwg
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsK
LQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBk
YXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8v
IENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRl
IHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5m
aXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHBy
b3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVl
U2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNl
bGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBp
KTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTI4LDM1ICsyMTUsNiBAQCBib29sIEpTQXJy
YXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpT
QXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBp
ZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVT
bG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRo
aXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5v
dEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250
RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29u
c2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5
c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQg
ZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsKQEAgLTk2NCwxMjcgKzIyMiwy
NiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJu
IChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0
KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50
aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50
IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8g
d2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFBy
b3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVj
dC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlm
IChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5z
aXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQt
PnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBw
ZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNv
bXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRM
ZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQg
bWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAg
IGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAg
ICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAg
ICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAg
ICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNl
aWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUg
dG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRM
ZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAg
fQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAg
IGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7
Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5j
dGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRl
LCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBt
YXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhh
dCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4g
dmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0
b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHBy
ZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYg
KExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9y
YWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxv
Y2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3Jh
Z2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0
b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3Ro
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3Zl
IHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNh
cHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4
QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0g
bmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwg
YWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9y
YWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCog
bmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAg
IAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0
aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBt
X2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAg
ICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRo
ZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgot
ICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgp
KTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2Uu
Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVy
biB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1h
a2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJl
ZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZl
IGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1faW5k
ZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2Uo
Z2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFz
dCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAg
IC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmljczoKQEAgLTEwOTMsOCArMjUw
LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAq
IGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9y
LCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkg
LSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQg
b24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVj
dG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3Ig
bGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYg
KGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBA
IC0xMTAyLDggKzI1OSw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNH
bG8KICAgICB1bnNpZ25lZCByZXF1aXJlZFZlY3Rvckxlbmd0aCA9IHVzZWRWZWN0b3JMZW5ndGgg
KyBjb3VudDsKICAgICBBU1NFUlQocmVxdWlyZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9p
bmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAg
ICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAo
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlh
cyk7Ci0gICAgdW5zaWduZWQgY3VycmVudENhcGFjaXR5ID0gbV92ZWN0b3JMZW5ndGggKyBtX2lu
ZGV4QmlhczsKKyAgICBBU1NFUlQoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPD0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKSA+PSBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CisgICAgdW5zaWduZWQg
Y3VycmVudENhcGFjaXR5ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgKyBzdG9yYWdlLT5tX2lu
ZGV4QmlhczsKICAgICAvLyBUaGUgY2FsY3VsYXRpb24gb2YgZGVzaXJlZENhcGFjaXR5IHdvbid0
IG92ZXJmbG93LCBkdWUgdG8gdGhlIHJhbmdlIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgu
CiAgICAgdW5zaWduZWQgZGVzaXJlZENhcGFjaXR5ID0gbWluKE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgsIG1heChCQVNFX1ZFQ1RPUl9MRU4sIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSA8PCAxKTsK
IApAQCAtMTExNCwxMCArMjcxLDEwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nh
c2UoSlNHbG8KICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAgLy8gSWYgdGhl
IGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9v
IGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0
eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBh
Y2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHN0
b3JhZ2UtPm1fYWxsb2NCYXNlOworICAgICAgICBuZXdBbGxvY0Jhc2UgPSBidXR0ZXJmbHktPmJh
c2Uoc3RydWN0dXJlKCkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2Fw
YWNpdHk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKGRlc2lyZWRDYXBhY2l0eSksICZuZXdBbGxvY0Jhc2Up
KQorICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpLCAmbmV3QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5
OwogICAgIH0KQEAgLTExMzAsNDUgKzI4Nyw0MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gSWYgaXQgZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3Vu
dCB0aGF0IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFuIGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQog
ICAgIC8vIHZlY3RvciB3aXRoIGhhbGYgdGhlIHBvc3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3Vz
bHkuCiAgICAgdW5zaWduZWQgcG9zdENhcGFjaXR5ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgbV92
ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKICAgICAgICAgLy8gQXRvbWljIGRlY2F5LCArIHRoZSBwb3N0LWNhcGFjaXR5IGNhbm5vdCBi
ZSBncmVhdGVyIHRoYW4gd2hhdCBpcyBhdmFpbGFibGUuCi0gICAgICAgIHBvc3RDYXBhY2l0eSA9
IG1pbigobV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRl
bnRzIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWlu
ZyByZWR1Y2VkLgotICAgICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IHN0b3JhZ2UtPm1fYWxs
b2NCYXNlIHx8IHBvc3RDYXBhY2l0eSA8IG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKTsKLSAgICB9
Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFj
aXR5OwotICAgIG1faW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gbV92ZWN0b3JMZW5n
dGg7Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
cmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsg
bV9pbmRleEJpYXMpOwotCi0gICAgLy8gU3RlcCA0OgotICAgIC8vIENvcHkgYXJyYXkgZGF0YSAv
IGhlYWRlciBpbnRvIHRoZWlyIG5ldyBsb2NhdGlvbnMsIGNsZWFyIHBvc3QtY2FwYWNpdHkgJiBm
cmVlIGFueSBvbGQgYWxsb2NhdGlvbi4KLQotICAgIC8vIElmIHRoaXMgaXMgYmVpbmcgbW92ZWQg
d2l0aGluIHRoZSBleGlzdGluZyBidWZmZXIgb2YgbWVtb3J5LCB3ZSBhcmUgYWx3YXlzIHNoaWZ0
aW5nIGRhdGEKLSAgICAvLyB0byB0aGUgcmlnaHQgKHNpbmNlIGNvdW50ID4gbV9pbmRleEJpYXMp
LiBBcyBzdWNoIHRoaXMgbWVtbW92ZSBjYW5ub3QgdHJhbXBsZSB0aGUgaGVhZGVyLgotICAgIG1l
bW1vdmUobV9zdG9yYWdlLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICBtZW1t
b3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotCi0gICAgLy8gQXJlIHdl
IGNvcHlpbmcgaW50byBhIG5ldyBhbGxvY2F0aW9uPwotICAgIGlmIChuZXdBbGxvY0Jhc2UgIT0g
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAgICAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2Nh
dGlvbiwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
ID0gbmV3QWxsb2NCYXNlOworICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJl
ZFZlY3Rvckxlbmd0aCk7CisgICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250ZW50cyB3aXRo
aW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVpbmcgcmVkdWNl
ZC4KKyAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0
dXJlKCkpIHx8IHBvc3RDYXBhY2l0eSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIC0gbGVuZ3Ro
KTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRW
ZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7CisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0g
bmV3U3RvcmFnZUNhcGFjaXR5IC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBu
ZXdJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIG1lbW1vdmUobmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0
b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3
QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVy
dHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgCisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdC
dXR0ZXJmbHk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRp
b24pCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBp
cyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRo
ZSBmb2xsb3dpbmcgJ2lmJy4KLSAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3Bh
cnNlVmFsdWVNYXApOworICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+
bV9zcGFyc2VNYXApOwogCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXApIHsKKyAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFn
ZS0+bV9zcGFyc2VNYXApIHsKICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3
cml0YWJsZS4KICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKQEAgLTExOTUsNyArMzQ3LDcgQEAgYm9vbCBKU0FycmF5Ojpz
ZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8g
ZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKQEAgLTEyMDQsMTQgKzM1NiwxNCBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG1h
cC0+cmVtb3ZlKGtleXNbaV0pOwogICAgICAgICAgICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAg
ICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8g
RGVsZXRlIHByb3BlcnRpZXMgZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0g
dmFsdWVTbG90OwpAQCAtMTIyMCw1MyArMzcyLDY1IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gbmV3TGVuZ3RoOworICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkg
ewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAg
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFs
dWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVl
U2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAg
ICAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBM
ZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdl
dChleGVjLCBpbmRleCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQg
aW5keC4KKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9m
IE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFu
ZCB0cnVlLgorICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAv
LyBSZXR1cm4gZWxlbWVudC4KKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7Cisg
ICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBp
bmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFs
bW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3NCw2MyAr
NDM4LDc3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1
c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBi
dXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNo
IHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVj
dG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChs
ZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5n
dGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwg
dHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAKLSAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMy
LTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlm
IChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAg
bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwg
dmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUu
NC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQg
YXJyYXkgbGVuZ3RoIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0
IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251
bVZhbHVlc0luVmVjdG9yLgorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgg
KyAxKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAg
ICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKLSAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVl
LCB0cnVlKTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIFB1c2hpbmcgdG8g
YW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dz
IGEgcmFuZ2UgZXJyb3IuCisgICAgICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5sZW5ndGgoKSA9
PSAweEZGRkZGRkZGdSkpIHsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
dGhpcywgZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAg
IC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KKyAgICAg
ICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZWQg
dGhlIHNhbWUgYXMgcHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwg
c3RvcmFnZSk7CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAot
ICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJh
eSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAg
ICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBp
ZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VN
b2RlKCkpCisgICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
IHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghb2xkTGVuZ3RoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09
IGNvdW50OworICAgIHN0b3JhZ2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAg
Ci0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9y
TGVuZ3RoLCAodW5zaWduZWQpY291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAg
Y291bnQgPSBtaW4odmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAgICAKLSAg
ICAgICAgbV92ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBj
b3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIq
IG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3Vu
dCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVtbW92ZShu
ZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAgICAgbV9z
dG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3Jh
Z2UpOwotCi0gICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZl
Y3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hp
ZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBj
b3VudDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzMzksNTkgKzUx
NywzMCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNr
LiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5
IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAg
ICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlm
IChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUo
KSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3Rv
cmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICht
X2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAg
ICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9y
YWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1l
bW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAg
bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0
b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFn
ZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdl
LT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2lu
ZGV4QmlhcyAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3Vu
dFNsb3dDYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5j
bGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVj
dHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRo
aXNPYmplY3QtPm1fc3RvcmFnZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTog
IiwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBz
dG9yYWdlLT5tX2FsbG9jQmFzZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmpl
Y3QtPm1fdmVjdG9yTGVuZ3RoICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5t
X3ZlY3Rvci0+c2xvdCgpLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAg
aWYgKGJhc2VTdG9yYWdlICE9IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsK
LSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2Yo
SlNWYWx1ZSkgKiB0aGlzT2JqZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9z
cGFyc2VWYWx1ZU1hcCkKLSAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQot
CiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4o
YSktPmFzTnVtYmVyKCk7CkBAIC0xNDA4LDExMiArNTU3LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBh
cmVCeVN0cmluZ1BhaXJGb3JRU29ydChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUs
IGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBh
bGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAg
ICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
Ym9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5p
c051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1
cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAg
ICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBx
c29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3Qg
cmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNp
YmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVx
dWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBz
aXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29y
dCk7CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNp
c3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAoIWFs
bFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlz
b24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAg
ICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVy
ZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhl
IG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+bV92
ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVy
c0ZvclFTb3J0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2sp
OwogfQogCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEFTU0VS
VCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAo
bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0
IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAg
ZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJh
YmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3Vn
aCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywg
dGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3Rv
bSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVyd2lz
ZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBp
bmNvbnNpc3RlbnQuCi0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogICAgIAotICAgIEhlYXA6Omhl
YXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLQotICAgIGJvb2wgaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBBU1NFUlQoIXZhbHVlLmlz
VW5kZWZpbmVkKCkpOwotICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZh
bHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcg
bG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVu
IGFmdGVyCi0gICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsr
KQotICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lu
bGluZShleGVjKTsKLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBI
ZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcg
dmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhh
dCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KLQorICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9i
YWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZl
cnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3
ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8v
IFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBw
ZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAg
ICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlm
IHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisg
ICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZl
bHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2
YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMg
PSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFs
dWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1
ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMg
YW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5z
ZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQg
Ynkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4
IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9n
IE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNv
cnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIp
LCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBG
SVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0
YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFi
bGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQu
Ci0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhN
RTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJs
ZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3Rh
YmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0
LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZh
bHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQot
ICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhl
IGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8g
aGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3Zl
Y3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
b3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmlu
ZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9y
YWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25h
bCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJz
dCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rv
cigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShT
b3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAog
c3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTUsMjUzICs3NjksMjU2
IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxU
eXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFp
blNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9u
IG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21w
aWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAgIC8v
IGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2xl
bmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgs
IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVu
Z3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAwKTsK
LQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVlPEFW
TFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMg
ZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhl
YzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5j
dGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBl
OwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwot
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2Fj
aGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1v
ZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVk
Ci0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhl
IHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVk
IG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25v
cmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRp
bmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBt
X3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwg
di5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2Vy
dChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYg
KHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURl
ZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhj
ZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGlu
IC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8vIGlm
IGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0
aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3Rv
cmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZM
VHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRo
IDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlv
biA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJl
Q2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJl
Q2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMu
Z3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9w
dFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5j
dGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0
b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQgZnJv
bSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVu
ZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5
LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBp
bnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51
bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAgICAg
ICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUg
PSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZp
bmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
W251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURl
ZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZl
Y3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBl
bm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAgaWYgKChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZh
bHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5l
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24g
Y2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQor
ICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAgICAgICAgCisg
ICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0
ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0KLSAg
ICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVu
ZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VS
VCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAg
IC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2
ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQg
dW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQg
PSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgo
KSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsr
aSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkK
LSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWlu
dDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwot
ICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNp
Z25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7
IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4o
bGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVj
dG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZl
Y3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBj
YWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJh
eTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCghaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICB1bnNpZ25lZCBudW1EZWZp
bmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51
bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNW
YWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0
aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytu
dW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytd
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQot
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwot
Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7
Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJl
dHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9p
ZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFz
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdl
KTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJU
KCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAg
IGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAg
IHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdh
cyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1E
ZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdV
c2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRW
ZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAgICAg
IC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlmICgo
bmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVu
Z3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0
b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVl
c0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAg
IEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5k
ZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsK
LSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAg
ICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7
IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9CiB9CiAKLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yMSwxNDAgKzIxLDI5IEBACiAjaWZuZGVmIEpTQXJy
YXlfaAogI2RlZmluZSBKU0FycmF5X2gKIAorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCi0jZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
IDAKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0FycmF5OwogICAgIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVi
bGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVy
PFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRl
cygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25z
dDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQg
Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNw
YXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07
Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAg
ICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBT
cGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAg
ICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0
b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
LSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAg
ICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBz
cGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFy
c2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwg
U3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHko
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9u
bHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3Mg
fCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhv
ZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChF
eGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKEpTQXJy
YXkqLCB1bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1
cm4gbV9tYXAuZmluZChpKTsgfQotICAgICAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJl
bW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCi0gICAgICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KLSAgICAgICAgdm9p
ZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KLQotICAgICAgICAvLyBU
aGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAuCi0gICAg
ICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLSAgICAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9Ci0gICAgICAg
IGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMo
aSk7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7
IH0KLSAgICAgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgotICAg
ICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7
IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5k
KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1hcCBtX21hcDsKLSAgICAgICAgRmxhZ3Mg
bV9mbGFnczsKLSAgICAgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0g
ICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJh
eS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFn
ZQotICAgIC8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUg
Y29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAK
LSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRo
YXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCi0gICAg
Ly8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVh
bCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6Ci0gICAgLy8gICAgIGdl
dFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCi0gICAgc3RydWN0IEFy
cmF5U3RvcmFnZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIg
cHJvcGVydHkgb24gdGhlIGFycmF5Ci0gICAgICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0
b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxsb2NCYXNlOyAvLyBQb2ludGVyIHRvIGJhc2UgYWRkcmVz
cyByZXR1cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBpbmcgdGhpcyBwb2ludGVyIGRvZXMgZWxpbWlu
YXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBsZWFrIGRldGVjdG9yLgotI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBh
bGlnbm1lbnQgcHVycG9zZXMuCi0gICAgICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5k
ZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOwotI2Vsc2UK
LSAgICAgICAgdWludHB0cl90IG1fcGFkZGluZzsKLSNlbmRpZgotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5n
dGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0gICAgfTsKLQogICAgIGNsYXNzIEpTQXJyYXkg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYWxrZXI7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU0FycmF5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAgICAg
ICAgLCBtX2luZGV4QmlhcygwKQotICAgICAgICAgICAgLCBtX3N0b3JhZ2UoMCkKLSAgICAgICAg
ICAgICwgbV9zcGFyc2VWYWx1ZU1hcCgwKQorICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0
dGVyZmx5KQorICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGggPSAwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheSogdHJ5
RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGgpOwotICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7Ci0K
ICAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ug
c2l6ZSBhbmQKQEAgLTE2NywyNSArNTYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIC8vIFRoaXMg
aXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6OnB1dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAg
Ly8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAt
IGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRl
cyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29u
ZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyA9IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjYW5TZXRJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW5kZXgoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7
Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVzZSBv
biBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4K
ICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhyb3dF
eGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTE5OSwxNDIgKzc0LDgyIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwog
ICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAK
LSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0
b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJ
bmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyBy
ZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0g
ICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNl
cXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVt
VmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVj
ayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHBy
b3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkg
PCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQg
Y29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3Bl
cnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3
TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBw
cm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAg
ICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAg
JiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZz
ZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJy
YXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZl
Y3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERh
dGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAg
ICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlm
ICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKICAgICAgICAg
ICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJs
ZSk7Ci0gICAgICAgIHZvaWQgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVu
dHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAg
ICAgICBib29sIGRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQg
YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0
ZVNwYXJzZU1hcCgpOwotCi0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKLSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVjdG9y
TGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJvb2wg
dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwogICAg
ICAgICAKICAgICAgICAgdW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7
Ci0KLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5
Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9
OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBO
b3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBtX3ZlY3Rvckxlbmd0
aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1bnNpZ25lZCBtX2lu
ZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2NrcyBiZWZvcmUgQXJy
YXlTdG9yYWdlLgotICAgICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsKLQotICAgICAgICAv
LyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUgcHV0IGludG8gaXRz
IG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVN
YXA7Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQotICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KICAgICB9OwogCisgICAgaW5saW5lIEJ1
dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRy
dWUsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7Cisj
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
biA9IDA7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGJ1dHRlcmZseTsKKyAgICB9CisKICAgICBp
bmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+
KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERh
dGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxp
emVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAg
ICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYg
KCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXAp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
QnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1
ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNB
cnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1MywzMCArMTY4LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2Vs
bC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlz
SlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXND
ZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlv
biBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQg
c3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxv
dy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11
c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4K
LSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
KDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVz
ZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkg
d2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywg
c2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VT
aXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JM
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFz
IGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZs
b3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2Vy
IG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxl
LCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMg
Y29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihB
cnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0g
ICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1
Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0
IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5k
RnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBw
ZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFy
Z3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1
bWVudChpKSk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBh
cmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQo
Ym91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhl
Yy0+YXJndW1lbnQoaSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBK
U0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJpbmcgSlNDZWxsOjpjbGFzc05h
bWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIsNyArMTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAgICAgIH0KLQorICAgICAgICAKICNpZiBFTkFCTEUo
R0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgp
IHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgpAQCAtMTYw
LDYgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBEdW1teSBpbXBsZW1lbnRh
dGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1
dCBpbiB0aGVpciBNZXRob2RUYWJsZQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFs
dWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsK
ICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJO
X0RVRV9UT19BU1NFUlQgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMg
VVN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wg
aGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3Rv
dHlwZVByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw3IEBA
IGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9i
amVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQotICAgIEJhc2U6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYs
NyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51
bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw4ICs1MTksOCBA
QCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgaWYgKG1faXNB
cnJheSkgewogICAgICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAgICAgICBKU1ZhbHVlIHZhbHVl
OwotICAgICAgICBpZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNh
bkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5n
ZXQoKSktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG1faXNKU0FycmF5ICYmIGFzQXJy
YXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAg
ICAgdmFsdWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChtX29iamVj
dC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBleGVjLCBpbmRleCwgc2xvdCkp
CkBAIC02ODUsOCArNjg1LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAg
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAg
ICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNr
bHkoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4
UXVpY2tseShpbmRleCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXktPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoYXJyYXksIG1fZXhlYywgaW5k
ZXgsIHNsb3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRl
ci5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsVGhpcy5oIgpAQCAtMzgsMTIgKzQwLDE5IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFt
ZUFycmF5LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3Qg
YXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKKy8vIGFzIGEgc2ltcGxlIGhl
dXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXpl
IDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9S
X0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsK
KwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQogewogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKCk7CkBAIC04NiwyOSArOTUsODAg
QEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNp
emUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNp
dG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQog
ewotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBBU1NFUlQoc3RvcmFnZVNpemUpOworICAgIEFT
U0VSVChidXR0ZXJmbHkpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90
IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNh
cGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVy
d2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5
U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2
aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5Owot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhp
bmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVDYXBhY2l0
eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9Cisg
ICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAorICAgICAg
ICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29w
eUFuZFBpbk90aGVyd2lzZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdD
b2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAg
ICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgUHJvcGVydHlTdG9y
YWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOworICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50
LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdl
dCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVudFRhcmdl
dCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIG1f
b3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tl
ZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3JhZ2UgLSBz
dG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIGlmIChVTkxJ
S0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0
ZS4KKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
KTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykg
eworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKykt
PmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAp
CisgICAgICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUp
OworICAgICAgICAKKyAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIG1hcC0+
dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xMjIsOSArMTgyLDkgQEAg
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3Rv
cmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChz
dG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRv
ciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93
bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkKKyAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CkBAIC0xNDIsOSArMjAyLDkg
QEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5
U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlm
IChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2Uodmlz
aXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JL
bm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkKKyAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CiAKICAgICBzaXplX3Qgc3Rv
cmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktub3duRmlu
YWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVT
dG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwxMCArMjIxLDUwIEBAIFVTdHJpbmcgSlNP
YmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamUKICAgICByZXR1cm4gaW5mby0+Y2xhc3NOYW1l
OwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91
ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZv
ciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92
ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCisgICAgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cisg
ICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5
OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0
ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNs
b3QpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI3NCwxMyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmly
c3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdl
dHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAt
MjM1LDkgKzM0MiwxNDUgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0eU5h
bWUgPj0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChz
aG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlz
T2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVl
LCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0
b3JbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgbGVuZ3RoICYgbV9udW1WYWx1ZXNJ
blZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gbGVuZ3Ro
KSB7CisgICAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0eU5hbWUgKyAxOworICAgICAgICAgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgCisgICAgICAgIHZh
bHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAg
ICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAg
dGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VB
bHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhN
YXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJl
dHVybiBzdG9yYWdlOworCisgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisKKyAgICB1bnNpZ25l
ZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBp
biB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8g
YW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNl
Y29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFycmF5KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCAwLCAwKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIAorICAgIHJl
dHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworfQorCit2b2lkIEpTT2JqZWN0Ojpl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQor
eworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
OworICAgIEFTU0VSVChvbGRUeXBlID09IE5vbkFycmF5IHx8IG9sZFR5cGUgPT0gQXJyYXkpOwor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0
KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVj
dG9yTGVuZ3RoKSk7CisgICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIG9iamVjdCBpcyBub3QgZXh0
ZW5zaWJsZT8gV2Ugc2hvdWxkIHByb2JhYmx5IGRvIHNvbWV0aGluZyBzcGVjaWFsIHRoZW4uCisg
ICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7CisgICAgQXJyYXlTdG9yYWdl
KiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVz
dWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3Ro
KHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
ICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxE
YXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShn
bG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRh
LCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
Y3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAg
ICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMzA0LDYgKzU0NywxMCBAQCBib29sIEpT
T2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwor
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmll
ZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShl
eGVjKTsKQEAgLTMzMiwxMCArNTc5LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFYX0FS
UkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIHZhbHVlU2xv
dC5jbGVhcigpOworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQg
IT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0
cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzQ3LDUxIEBAIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVt
ZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNv
bnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBh
biBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVm
ZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAor
ICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJl
IGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5Ogor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFn
ZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsK
KyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVz
ZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBE
b250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0
Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFt
ZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzg0Miw3IEBAIHZvaWQg
SlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJl
dmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pT
QXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUo
Z2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEp
OwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERh
dGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg5OSwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1v
dmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElO
RSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xv
dCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9p
ZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9u
ID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAo
SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0
KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBn
ZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAg
IHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1
bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTI5LDUzMyBAQCBTdHJ1Y3R1cmUqIEpT
T2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQog
Ci1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBK
U09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJh
eUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3Bl
cnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9s
ZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAg
ICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxz
ZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAg
ZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7
CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
IHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9y
LmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVy
T2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0
KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRl
ck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVj
dCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNy
ZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVy
KQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNl
dHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVy
aWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVm
aW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9
IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAg
ICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSBy
ZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5
IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1
bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5
IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJl
bnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxk
IGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFy
c2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1
ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisgICAg
Ly8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blBy
b3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGlu
ZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRo
ZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4K
KyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVl
LCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Cisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7
CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVz
Yykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24g
ZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFs
dWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBh
dHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhl
IHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJp
YnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8g
aXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFu
IGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3Ig
cHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBb
W1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFs
dWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFu
IGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUg
bmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQg
dmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0g
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdl
dChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJ
bk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBE
ZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4g
RGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQg
aW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBj
dXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIp
LgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChj
dXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVh
bFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAg
IGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBp
ZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1
cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24s
ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51
bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1d
IGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBl
YWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYm
IGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1
ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNj
cmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJ
c0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUg
ZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3Jp
cHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAv
LyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkg
aXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZy
b20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0
eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5
J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0
dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRv
CisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDku
Yy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFu
IGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFBy
ZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtb
Q29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1
dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVp
ciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2Ny
aXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAg
Ly8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2Ny
aXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYg
dGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJs
ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBb
W1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAg
ICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVd
XSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAh
c2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQ
cmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNv
LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVu
CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJl
c2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxz
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVz
Y3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
ICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMg
ZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYm
IGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmli
dXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmds
eSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8g
dGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBl
bnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRh
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKCk7Cit9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVu
Y3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUg
aW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09i
amVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVN
YXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAgIGdsb2Jh
bERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1h
cCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7
CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJh
eSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3Bl
cnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNs
YWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0
eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdl
OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdl
Pih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUg
d2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1h
cCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91
bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1h
cC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVu
Z3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3Is
IGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYm
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAg
IC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4g
cmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHBy
b3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAg
bWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAg
ICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5n
dGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlz
IG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3Ro
ID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKwor
ICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0
aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNl
IGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9v
IHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJ
bkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAg
IGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgs
IG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUs
IHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBt
X3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0lu
VmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZh
bHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwor
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkg
aW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
dmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmICghaXNFeHRlbnNp
YmxlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAg
ICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDAp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEs
IGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAvLyBGaXJzdCwgaGFu
ZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAg
ICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0
ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVh
dGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CisgICAg
CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkg
KyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJl
IHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAg
ICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkp
KSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQg
aGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAg
ICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2
ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRk
IHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGgg
aWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwor
ICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBh
cnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJ
c1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2lu
ZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAg
ICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUg
aXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZh
aWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisK
KyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRh
dGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Cisg
ICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAg
ICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRl
bGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFn
ZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3Rvcltp
dC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0
aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQg
YmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVj
dG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgCi0gICAgbWVtY3B5
KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBv
bGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7
CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5v
bkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAg
ICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cs
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIAorICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
aSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJh
eVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQogCi0gICAgQVNTRVJU
KG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKK0FM
V0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25l
ZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBk
ZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVu
c2lnbmVkIG1heEluaXRMZW5ndGggPSBzdGQ6Om1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsK
KworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVh
c2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxl
bmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwg
bGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVx
dWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAq
IDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0
aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZv
cm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRM
ZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExl
bmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJl
ZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3Ro
LCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVu
Z3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgp
Cit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAg
ICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAg
ICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwg
bGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkg
aW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBm
cm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUg
dG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVu
dGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFz
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOwor
ICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld1Zl
Y3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOworCisgICAgLy8gRmFz
dCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxv
YyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7CisgICAgICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJp
Z2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3
QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRv
bWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVu
c2lnbmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xv
YmFsRGF0YSwKKyAgICAgICAgaW5kZXhCaWFzLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisgICAgICAg
IG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0
aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9pZCBKU09i
amVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUp
Cit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7Cisg
ICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAg
IGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3Jh
Z2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAg
ICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAg
ICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lD
aGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3Ig
PT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZhbHVlc0lu
VmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFw
KSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vj
b25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNr
KQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZp
bmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4K
KyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
CitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NF
UlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlz
IGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CisgICAg
Ly8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1
Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVy
dHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0K
IAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDYzLDQ2IEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0g
MDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9i
amVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVj
dC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ID09
IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCkBAIC03MDQsMjYgKzE1NzMsMjYgQEAgcHJpdmF0ZToKICAgICBK
U0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBUcmFjayBvbiB0
aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJy
ZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMg
d2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBj
aGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZp
Z3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRl
ZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAgICAg
RGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAgIC8vIElmIHdl
IGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
Y3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAgICAgIC8vIHVu
bGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2JqZWN0LT5pc0V4
dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAg
ICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9i
amVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsK
ICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgaWYg
KGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE2MTgsOCBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0b3Ig
aXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5
CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlm
ICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NjIsOCArMTYzMSw4
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
IikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRv
cihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAv
LyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVy
dHkKQEAgLTc4NCw4ICsxNjUzLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChk
ZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVj
LCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9mIGFu
IGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY3MSw3IEBAIGJvb2wgSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2JqZWN0LT5nZXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgYWNj
ZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgxMiwxMiArMTY4
MSwzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAg
IGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0
b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVuc2ln
bmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVu
dCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJl
Y3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVy
LCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwg
dGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRl
eCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAg
ICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVz
Yy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZh
dWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBw
YXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlz
IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVl
LgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywg
aW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAg
ICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3Qp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNCwxNyArMjQsMjEgQEAKICNkZWZpbmUgSlNPYmplY3RfaAogCiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJBcnJheVN0b3Jh
Z2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNp
bmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5U3RvcmFnZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgogI2luY2x1ZGUg
IlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4MywxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMg
YSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJz
dEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUp
OworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwg
UmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9B
U1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRl
IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVy
bmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJu
YWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwor
ICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNj
ZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0Zp
bmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2
LDYgKzEwNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemVB
cnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTEyMCw4
ICsxMzMsMTc2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNz
RnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxh
ciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBl
IGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3Qg
Y2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBh
dHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0
byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0
eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHko
dW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemlu
ZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9
PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRp
YWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0
aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAg
ICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBj
b21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGlu
ayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdM
ZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMg
aW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNr
ZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90
b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5j
ZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVy
dHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNv
bnN0OwpAQCAtMjAzLDggKzM4NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBt
X291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAg
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9Cisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBj
b25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDEyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldElu
SW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2Nh
dGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDU0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQg
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAg
dm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwg
U3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxs
IHRoaXMuCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVT
dG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0
cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdl
SWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCog
YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVu
RGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxE
YXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NzQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0
dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRk
cmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19p
bmZvOwogCkBAIC0zMTYsMTQgKzUwNiw3NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAv
LyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBi
ZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50
IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRv
cklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVt
b3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RW
aXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2
b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3Jh
Z2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2Jq
ZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4g
VGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlT
dG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVy
IG9yIG5vdCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMg
YXJyYXkgc3RvcmFnZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8o
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBt
b2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5
b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0
aGUKKyAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3Jh
Z2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFy
cmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNl
cHRpb24pOworCisgICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5
Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0
ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3Rl
bmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5k
aWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzU4OSwzNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3Ry
aW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFy
cmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAg
ICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAg
ICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclBy
b3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAg
ICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0
b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJl
bnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXRO
ZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFn
ZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkq
IG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZh
dGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCAr
NjQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzI2LDYgQEAgaW5s
aW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNp
emVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxp
bmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBz
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5
MSwxOCArNzU2LDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24K
ICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNU
eXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAg
ICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFTU0VSVCghYnV0dGVyZmx5
ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0cnVjdHVyZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7Cit9CisKK2lubGlu
ZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAK
IGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MDQsOSBAQCBpbmxpbmUgSlNPYmplY3Qq
IGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2Vs
bCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5
KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NTQsMTcgQEAgaW5saW5lIEpTT2JqZWN0
KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAg
ICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAg
ICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5p
c0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMs
IGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3duUHJvcGVy
dHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBtYXkgc2Vl
bSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmly
dHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NTAsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUu
aXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5NzksMTEg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAo
KG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZM
aW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwpAQCAtNzMwLDEzICs5OTcsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3Vy
cmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVydHlTdG9y
YWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5ld1N0b3Jh
Z2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
LSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1
Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBz
dHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2
YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdp
dGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAv
LyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAzLDkgKzEw
NzAsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBn
cm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwgbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTgzOSwx
MSArMTEwNiwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsCiBp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0
ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9m
TGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUo
KS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0
b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUo
KS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgc2V0QnV0
dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAgIHB1dERp
cmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1LDYgKzEy
MDIsMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAogICAgIHJl
dHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8gVGhpcyBp
cyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0IGEgbG9h
ZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZzZXRzOiBh
IHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0MiwxNCAr
MTIxNCwxNCBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVyOjp3aXRoQ2FsCiBpbmxp
bmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJl
dHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpOworICAgIHJldHVy
biBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KG9mZnNldCk7CiB9CiAKIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9m
UHJvcGVydHlTdG9yYWdlKCk7CiAgICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CkBAIC05NTcsNyArMTIyOSw3IEBAIGlubGlu
ZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0
dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihv
YmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29s
IGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTY0MCw3ICs2NDEsMTMgQEAgSlNW
YWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lvbjoKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpLT5wdXREaXJlY3Qo
bV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXJTdGFjay5sYXN0KCksIGxhc3RWYWx1ZSk7
CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iamVjdFN0YWNr
Lmxhc3QoKSk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lIGlkZW50ID0gaWRlbnRpZmll
clN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0gaWRlbnQuYXNJbmRl
eCgpOworICAgICAgICAgICAgICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
KyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGksIGxh
c3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRva0NvbW1hKQogICAgICAg
ICAgICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmplY3RTdGFydEV4cHJlc3Npb247CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogCisjaW5j
bHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQp
OwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMjsK
KyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxp
bmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9y
YWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFnZV9o
CisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
UHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE1hdGNo
ZXNBcnJheTo6c19pbgogCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEsIG1fcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiB9CiAKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJh
eSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlu
cHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgICAgICAgICAgOiBK
U0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0
dXJlKCkpCisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCisgICAg
ICAgICAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVz
QXJyYXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5KQogICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1
bHQpCiAgICAgICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCiAgICAgICAgIHsKQEAgLTQ2
LDcgKzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQpOwogICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1T
dWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxE
YXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7CiAgICAgICAg
ICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICByZXR1
cm4gYXJyYXk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
QEAgLTExNCwxMSArMTE1LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
ewogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJh
c2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVjdF9oCisKKyNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworaW5saW5lIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlv
biwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFy
cmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUg
IlByb3BlcnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8
VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisKKyAg
ICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xv
dCYpIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAg
IEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90Piwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAg
ICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9
IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRk
UmVzdWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFncyhO
b3JtYWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VN
b2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0
YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9v
bCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVu
Z3RoSXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQor
ICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVu
Z3RoSXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXRE
aXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAgICBp
dGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAgICAv
LyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3Vs
dCBvZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVt
b3ZlKGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkp
OyB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQor
ICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29udGFp
bnMoaSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsg
fQorICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAgICBj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitwcml2
YXRlOgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBtX3Jl
cG9ydGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNw
YXJzZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisj
ZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNw
YXJzZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VB
cnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0
KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAg
IGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkg
PSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNp
dHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgo
Y2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkg
PSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMg
JiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkg
eworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nv
ci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0
ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAgIGNh
bGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30KKwor
aW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNw
YXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAv
LyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0
aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMg
YSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwg
dGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fp
bi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkg
eworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9i
amVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJp
YnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6
OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJh
c2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5p
c0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRl
cih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0
VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRl
clNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1
ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkp
IGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQo
cmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNl
dHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxs
RGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFy
cmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmli
dXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+
c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0j
ZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBT
dG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNr
ZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2Vs
bCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGds
b2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJp
ZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAg
IHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0ds
b2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0g
ICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0
KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAg
ICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3Rv
cmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3Qg
eyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3Bl
cmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFn
ZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90
IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFn
ZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyBy
ZXR1cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
bV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9
CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZv
JiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAg
ICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlw
ZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwg
V3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5
cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJ
bmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5m
byA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
ICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91
bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkK
ICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9j
bGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlh
bGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJ
bmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMt
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2Jh
bERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJ
bmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQog
CitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlv
biB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1
dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3
SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0
cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0
aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsK
KyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91
cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJl
dHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24t
Pm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOworICAgIHRyYW5zaXRpb24tPm1f
aW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX2lzUGlubmVkUHJvcGVy
dHlUYWJsZSkKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVj
dHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUucmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1f
cHJldmlvdXMpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICByZXR1cm4gdHJhbnNpdGlv
bjsKK30KKwogLy8gSW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHku
CiBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0cnVjdHVyZV9oCiAKICNp
bmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRl
ICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCkBA
IC02OCw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29u
c3QgQ2xhc3NJbmZvKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
QEAgLTEwMCw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogc2VhbFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNpb25zVHJhbnNp
dGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIE5vblBy
b3BlcnR5VHJhbnNpdGlvbik7CiAKICAgICAgICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEm
KTsKICAgICAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKQEAgLTE0MCw2ICsxNDIs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkg
Y29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOyByZXR1
cm4gbV90eXBlSW5mbzsgfQogICAgICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
dHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAKKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlczsgfQor
ICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlOyB9CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAg
ICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpAQCAtMzM0LDYgKzMzOCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1fY2xhc3NJbmZvKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmRleGluZ1R5cGUpOworICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYpOwogICAgICAgICAKQEAgLTM2Myw3ICszNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNz
SW5mbyopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKICAgICAgICAgU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3Ry
dWN0dXJlKik7CiAKQEAgLTQxNiw2ICs0MjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7
CiAKICAgICAgICAgVHlwZUluZm8gbV90eXBlSW5mbzsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG1f
aW5kZXhpbmdUeXBlOwogICAgICAgICAKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2Jq
ZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJv
dG90eXBlOwpAQCAtNDQ3LDcgKzQ1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNSZWFk
T25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvIDogMTsKICAgICAgICAg
Ym9vbCBtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIDogMTsKLSAgICAgICAgdW5zaWduZWQg
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDc7CisgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRl
c0luUHJldmlvdXMgOiAyMjsKICAgICAgICAgdW5zaWduZWQgbV9zcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQgOiAyOwogICAgICAgICB1bnNpZ25lZCBtX3ByZXZlbnRFeHRlbnNpb25zIDogMTsK
ICAgICAgICAgdW5zaWduZWQgbV9kaWRUcmFuc2l0aW9uIDogMTsKQEAgLTQ2NSwxMSArNDc1LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCisgICAg
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0
cnVjdHVyZVN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVy
ZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEu
aGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlw
ZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlKTsKICAgICAgICAgc3RydWN0dXJlLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gK
ICNkZWZpbmUgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gKIAorI2luY2x1ZGUgIkluZGV4aW5n
VHlwZS5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgpAQCAtMzcsNiArMzgsMzAgQEAgbmFtZXNwYWNl
IEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5z
aXRpb25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5IGFkZGl0aW9ucy4KKwor
Ly8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5v
dCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRo
ZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgorZW51bSBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9OworCitpbmxpbmUgdW5z
aWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorewor
ICAgIHJldHVybiB0cmFuc2l0aW9uICsgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZTsKK30KKworaW5s
aW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgeworICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBvbGRU
eXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gb2xkVHlwZTsKKyAgICB9Cit9CisKIGNsYXNzIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFVzaW5n
U2luZ2xlU2xvdEZsYWcgPSAxOwogCkBAIC00NCw3ICs2OSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUgewogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxSZWZQdHI8U3RyaW5n
SW1wbD4sIHVuc2lnbmVkPiBLZXk7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEtleSYgcCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHAuZmlyc3QtPmV4aXN0aW5n
SGFzaCgpOworICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gcC5zZWNvbmQ7CisgICAgICAg
ICAgICBpZiAocC5maXJzdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gcC5maXJzdC0+ZXhp
c3RpbmdIYXNoKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161142</attachid>
            <date>2012-08-28 23:21:37 -0700</date>
            <delta_ts>2012-08-30 00:48:16 -0700</delta_ts>
            <desc>zero regression on SunSpider</desc>
            <filename>butterflies_patch_27.diff</filename>
            <type>text/plain</type>
            <size>396574</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI2OTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5MSBA
QAorMjAxMi0wOC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBBUEkvSlNPYmplY3RS
ZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpBZGphY2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEFkamFjZW5jeUxp
c3QpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmZyb21PYnNlcnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJh
eU1vZGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bW9kZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQ
dXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpwdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3Rv
Q2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpy
dW4pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNl
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9w
bmFtZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAg
ICAgICAoSlNDOjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUlu
ZGV4aW5nSGVhZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0pvaW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9G
dW5jTWFwKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
U29tZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVBy
b3RvdHlwZS5oOgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3Rv
cmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OmNvcHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppblNw
YXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9y
YWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNwYXJz
ZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCk6CisgICAg
ICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZs
eTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFz
ZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6
CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAg
ICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Oklu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpz
ZXRBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAg
ICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhp
bmdIZWFkZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5
KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpT
QWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2V0TGVuZ3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXk6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3Ap
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OnNvcnROdW1lcmljKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c29ydCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZpbGxBcmdMaXN0KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29t
cGFjdEZvclNvcnRpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpKU0FycmF5
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0
YWJsZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUFycmF5QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwOgorICAg
ICAgICAoSlNDOjpib3VuZEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rp
b25Db25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5o
OgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1
dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRh
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90U2xvdyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNPYmplY3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNh
bkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojppbml0aWFsaXplSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29tcGxldGVJ
bml0aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUluZGV4aW5n
TW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6b3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpv
ZmZzZXRGb3JMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlT3JaZXJvKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3kpOgorICAgICAgICAoSlNDOjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1
Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0
SW5CdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0xp
dGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zm
c2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdF
eHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKFJlZ0V4cE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9SZWplY3QuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpy
ZWplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlFbnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VB
cnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNl
QXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNwYXJz
ZU1vZGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRTcGFyc2VNb2Rl
KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldExlbmd0aElzUmVhZE9ubHkp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6bm90Rm91bmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29udGFpbnMp
OgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzaXplKToKKyAgICAgICAgKEpT
Qzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjplbmQpOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
OjpwdXQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgorICAgICAgICAoSlNDOjpTcGFy
c2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdG9yYWdlQmFy
cmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhhc2gpOgor
CiAyMDEyLTA4LTI4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGRpbmcgc3VwcG9ydCBmb3IgYWRkaW5nIExMSW50IG9wY29kZSBleHRlbnNpb25zLiAgVGhpcyB3
aWxsIGJlIG5lZWRlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFm
QGdtYWlsLmNvbSkKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJJbml0aWFsaXpl
VGhyZWFkaW5nLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBw
cml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpA
QCAtNDg0LDcgKzQ4NCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Q
cm8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDkgQEAKICNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKIAogI2luY2x1
ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTg5LDYgKzE4OSwxNyBAQAogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwICovOyB9OworCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252
ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5NjE1RUQ4RTQ2
MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZC
N0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1
dHRlcmZseS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QzE1
RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk5MTVFRDhFNDYwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZC
N0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVE
OEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlCMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3
RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIg
LyogUHJvcGVydHlTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUz
ODAwRjE2N0IyIC8qIFJlamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlGMTVFRDhF
NDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTMxNUVEOEUzODAw
RjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU2NCw3ICs1NzUs
NiBAQAogCQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUw
RUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVC
MDUgLyogSlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkY1
NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAv
KiBKSVRXcml0ZUJhcnJpZXIuaCAqLzsgfTsKLQkJQTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8q
IFN0b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTEx
RDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxk
ZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3
MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IH07CiAJCUE3QjQ4RjQ5MEVF
ODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsgfTsKQEAgLTk0NSw2ICs5NTUsMTcgQEAKIAkJ
MEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAw
MkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIg
LyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5
U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4QjE1RUQ4RTM4
MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4QzE1RUQ4
RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hlYWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlT
dG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5U3RvcmFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3
QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNDE0
OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVP
cmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9yaWdpbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0MSw3ICsxMzYyLDYgQEAKIAkJQTc2N0ZG
OUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklU
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNlSklULmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBK
SVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUV3Jp
dGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODFFMzU4MTQxOTcw
QzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50
YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bnRheENoZWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMjAsNiArMjA0MCwxNyBAQAog
CQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8q
IEFycmF5Q29udmVudGlvbnMuaCAqLywKKwkJCQkwRkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyog
QXJyYXlTdG9yYWdlLmggKi8sCisJCQkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRl
cmZseS5oICovLAorCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmggKi8sCisJCQkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVyLmggKi8sCisJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJ
bmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggKi8sCisJCQkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5o
ICovLAorCQkJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFw
LmggKi8sCisJCQkJMEZCN0YzOTMxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXBJbmxpbmVNZXRob2RzLmggKi8sCiAJCQkJQzJENThDMzMxNTkxMkZFRTAwMjFBODQ0IC8qIEdD
QWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAwQjlBNjREIC8q
IEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0
LmggKi8sCkBAIC0yMjA0LDcgKzIyMzUsNiBAQAogCQkJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRF
MiAvKiBTY29wZUNoYWluTWFyay5oICovLAogCQkJCTkzMzAzRkU4MEU2QTcyQjUwMDc4NkU2QSAv
KiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVBMEU2QTcyQzAwMDc4NkU2QSAvKiBT
bWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFn
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZh
bEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0MwMEUxNkVFMzMwMEIzNDQ2MCAvKiBT
dHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzYwLDcgKzI3OTAsNiBAQAogCQkJCUU0OURD
MTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVj
aWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzgxRTM1OTE0MTk3MEM3MDAw
OTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5MDgsNiArMjkzNywxNyBAQAogCQkJCTBGNjM5NDg1MTVFNDgx
MUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDc4
MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0VDOEM3QTE1RTZFOTUwMDA1MUU5QTkgLyogT3Bjb2RlRGVmaW5pdGlvbnMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIg
LyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5ODE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTkxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVN
ZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3
QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5RDE1RUQ4
RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5RTE1RUQ4
RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTYg
KzM1LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAKKy8vIFRoaXMgaXMgYSBiaXRmaWVsZCB3aGVyZSBlYWNoIGJpdCByZXByZXNlbnRzIGFuIElu
ZGV4aW5nVHlwZSB0aGF0IHdlIGhhdmUgc2Vlbi4KKy8vIFRoZXJlIGFyZSAxNyBpbmRleGluZyB0
eXBlcyAoMCB0byAxNiwgaW5jbHVzaXZlKSwgc28gMzIgYml0cyBpcyBtb3JlIHRoYW4gZW5vdWdo
LgogdHlwZWRlZiB1bnNpZ25lZCBBcnJheU1vZGVzOwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQg
SXNOb3RBcnJheSA9IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgSXNKU0FycmF5ICA9IDI7Cisj
ZGVmaW5lIGFzQXJyYXlNb2Rlcyh0eXBlKSBcCisgICAgKDEgPDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGUpKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVGcm9tU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09
ICZKU0FycmF5OjpzX2luZm8pCi0gICAgICAgIHJldHVybiBJc0pTQXJyYXk7Ci0gICAgcmV0dXJu
IElzTm90QXJyYXk7CisgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSk7CiB9CiAKIGNsYXNzIEFycmF5UHJvZmlsZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
Lm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMK
ICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTU2LDEwICs5NTUsMTAgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgog
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzg2LDcgKzEzODUsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xNDA0
LDggKzE0MDMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8v
IFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1h
eSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUg
c3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBTaXplID0g
MyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lM
aXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKGtp
bmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21P
YnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAw
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToK
LSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFy
cmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtl
U2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDog
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Ig
d2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUg
YXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9t
CkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZh
bHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9B
UlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6
c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1Nw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0
IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0
T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
ICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUg
ewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8g
ZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBH
ZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5k
cywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAgIEludDhB
cnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07
CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50
cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBp
cyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2Zm
IGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBp
biB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6
TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFy
cmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03
NCw4ICsxMDEsMTcgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlu
bGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3
aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0VfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE0LDI1ICsxNTAsNiBAQCBp
bmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kCiAgICAgfQogfQogCi1pbmxp
bmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBB
cnJheTo6TW9kZSByaWdodCkKLXsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgCi0gICAgYm9vbCBsZWZ0SXNKU0FycmF5ID0KLSAgICAgICAgbGVmdCA9
PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM7Ci0gICAgCi0gICAgYm9vbCByaWdodElzSlNBcnJheSA9Ci0gICAgICAgIHJpZ2h0ID09
IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM7Ci0gICAgCi0gICAgaWYgKGxlZnRJc0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5l
IGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKQEAgLTE0Nyw3ICsxNjQsMTUgQEAgaW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJy
YXk6Ok1vZGUgbQogCiBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUg
bW9kZSkKIHsKLSAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9kZSk7CisgICAgc3dpdGNoICht
b2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQot
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwg
YmFzZSk7CisgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5
LCBiYXNlKTsKICAgICBzZXQoZGVzdGluYXRpb25PcGVyYW5kLAogICAgICAgICBhZGRUb0dyYXBo
KAogICAgICAgICAgICAgR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLApAQCAtMjMwOSw3ICsyMzA5LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVy
dHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgp
KSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CkBAIC0yMzYw
LDEzICsyMzYwLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFn
ZSwgYmFzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgo
R2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0
QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwg
YmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLCBiYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDcgKzU4Myw3IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBHZXRQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hp
bGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgxLDggKzM4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHNo
b3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwotICAgICAgICBO
b2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAg
ICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgIGlmIChtb2RlSXNK
U0FycmF5KGFycmF5TW9kZSkpCisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
ID0gTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAg
ICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAg
ICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAg
IHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5m
byB7CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAK
KyAgICBOb2RlKCkgeyB9CisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRv
IDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDog
Y29kZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5v
ZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBc
Ci0gICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAg
IG1hY3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVj
a0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9k
ZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRl
ICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgpAQCAtMjI0LDE0ICsyMjUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNT
dGF0ZSogZQogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsK
ICAgICAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5k
ZXgoaW5kZXgpKSB7Ci0gICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5k
ZXgsIHZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmIChvYmplY3Qt
PmNhblNldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBp
bmRleCwgdmFsdWUsIHN0cmljdCk7CisgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KG9iamVj
dCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0zMzksMTEgKzM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5
VmFsKEV4CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwog
ICAgIAotICAgIC8vIEZJWE1FOiB0aGUgSklUIHVzZWQgdG8gaGFuZGxlIHRoZXNlIGluIGNvbXBp
bGVkIGNvZGUhCi0gICAgaWYgKGlzSlNBcnJheShiYXNlKSAmJiBhc0FycmF5KGJhc2UpLT5jYW5H
ZXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheShi
YXNlKS0+Z2V0SW5kZXgoaW5kZXgpKTsKKyAgICBpZiAoYmFzZS0+aXNPYmplY3QoKSkgeworICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAgICAgIGlmIChvYmpl
Y3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgfQogCi0gICAg
Ly8gRklYTUU6IHRoZSBKSVRzdHViIHVzZWQgdG8gcmVsaW5rIHRoaXMgdG8gYW4gb3B0aW1pemVk
IGZvcm0hCiAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZSkgJiYgYXNTdHJpbmcoYmFzZSktPmNhbkdl
dEluZGV4KGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1N0cmluZyhi
YXNlKS0+Z2V0SW5kZXgoZXhlYywgaW5kZXgpKTsKIApAQCAtNTMyLDE1ICs1MzQsMTUgQEAgdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogICAgIG9wZXJhdGlvblB1dEJ5
VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFBy
b3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZl
eGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9i
YWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBX
ZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2
ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAg
ICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldElu
ZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwg
ZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTU0OSwxNSArNTUxLDE1IEBAIHZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwg
c2xvdCk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMy
X3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4
ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBv
bmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAg
ICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgSlNBcnJh
eTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4UXVpY2ts
eShpbmRleCkpOworICAgICAgICBKU09iamVjdDo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5k
ZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xMjk0LDIwICsxMjk2LDI5IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlU3QKIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSwgJnJlc3Vs
dCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyBpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKyAxKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAg
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsKIH0KIAogY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCBuZXdTaXplKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihyZXN1bHQpICsgMSkgKyBuZXdTaXplOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmds
b2JhbERhdGEoKSwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsKK30KKworY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+
Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQoreworICAgIEJ1
dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9i
YWxEYXRhKCksIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Np
emUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
IGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQz
Ml90IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdHlwZWRlZiBzaXplX3QgREZH
X09QRVJBVElPTiAoKlNfREZHT3BlcgogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNf
REZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNp
emVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElP
TiAoKlNfREZHT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUFaSikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VD
KShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSop
OwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0pKKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTA1
LDggKzEwNSwxMCBAQCB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0
eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0
ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgY2hh
ciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNp
emVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTyko
RXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBf
REZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QpOwogdHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2
b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0
aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJv
dmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0
b28gY29tcGxleCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2Jq
ZWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKQEAgLTEzOCw4ICsxNDAsOCBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiB2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5Kiwg
aW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkBAIC0xODUsNiArMTg3LDgg
QEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbgogdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5p
dGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlT
dG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRl
ciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRp
b24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRp
b25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDgsNyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRQ
cm9wZXJ0eVN0b3JhZ2U6IAorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseTogCiAgICAgICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5OSwxMiArMTk5LDEyIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFn
ZSgpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1
dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJl
c3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI1Mywx
MCArMjUzLDEwIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAg
ICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CiAg
ICAgICAgIAotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MjMsNyArNDIz
LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZWxzZQpAQCAtNDczLDcgKzQ3Myw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICB9CiAjZW5k
aWYKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxz
ZQpAQCAtNjgxLDE3ICs2ODEsMTcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTgzMCw3ICs4MzAsNyBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAg
ICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMyk7CisgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2Ny
YXRjaEdQUjEpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3Vi
UHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7CiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwpAQCAtODQ0
LDcgKzg0NCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSkpOwogICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwogICAg
IH0KIApAQCAtODU0LDggKzg1NCw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAg
LTg2Myw5ICs4NjMsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIx
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICAKQEAgLTEwMjAsNiArMTAyMCwx
MSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAg
ICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUg
aGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgs
NyArNDk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAg
IEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQucGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRv
Q29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oLTEpKSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHBy
b3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlc3VsdEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQ
YXRjaCA9IG1faml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwogICAgIAogICAgIEpJVENv
bXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtNTM0LDcgKzUzNCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVydGlibGVM
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9y
ZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQ
UiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCiAgICAgSklUQ29tcGls
ZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC0yNDMyLDIzICsyNDMyLDE3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhlIGJhc2Ug
aXMgc29tZSBraW5kIG9mIGFycmF5LAotICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludC4KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNB
cnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKQEAgLTI1
MzgsNiArMjUzMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgaWYgKGFscmVhZHlIYW5kbGVkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogdGhlIGJhc2UgbWF5IG5vdCBiZSBuZWNlc3NhcnkgZm9yIHNv
bWUgYXJyYXkgYWNjZXNzIG1vZGVzLiBCdXQgd2UgaGF2ZSB0bworICAgICAgICAvLyBrZWVwIGl0
IGFsaXZlIHRvIHRoaXMgcG9pbnQsIHNvIGl0J3MgbGlrZWx5IHRvIGJlIGluIGEgcmVnaXN0ZXIg
YW55d2F5LiBMaWtlbHkKKyAgICAgICAgLy8gbm8gaGFybSBpbiBsb2NraW5nIGl0IGhlcmUuCiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CiAgICAg
ICAgIApAQCAtMjU0NSw4ICsyNTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
IAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgLy8gTWFwIGJhc2UsIHByb3Bl
cnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEgc2NyYXRjaCByZWdpc3Rlci4K
QEAgLTI1NzMsOCArMjU2OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9k
ZSkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CiAKICAgICAgICAgICAgIGJhc2Uu
dXNlKCk7CkBAIC0yNTg3LDkgKzI1ODMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2Vz
Tm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZyk7CiAKICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlLmxpbmsoJm1faml0KTsKQEAgLTI1OTgsNyArMjU5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0
byB0aGUgYXJyYXkuCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKIAotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91
bmRzKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewog
ICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5k
cywgdGhpcywKQEAgLTI3NjcsMTcgKzI3NjMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7
CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Ro
cy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5n
dGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAg
ICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0
aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxl
bmd0aCgpKSk7CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yODAz
LDE4ICsyNzk5LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBz
dG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAg
ICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwogICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVH
UFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9m
ZnNldE9mTGVuZ3RoKCkpKTsKIAogICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAg
ICAgCkBAIC0zNDAyLDE0ICszMzk4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFn
ZTogeworICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc1
Miw3ICszNzQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
I2VuZGlmCiAgICAgICAgIG1faml0Lm5lZzMyKHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9q
aXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzb2x2ZUluZm9HUFIsIHJlc29sdmVJbmZvR1BSKTsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwg
SklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAg
ICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxNSwxOSArMzE1LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNr
QXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVk
Q2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0g
ICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBh
dGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKLSAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2Vk
IGluIHRoZSBmdXR1cmUuCisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzog
ewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0
cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAg
ICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdw
cigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2g4KAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigm
SlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICByZXR1cm47CkBAIC0zMTI3LDExICszMTM2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VS
ZWcpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToK
LSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNl
dCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0
KSwgc3RvcmFnZVJlZyk7CkBAIC0zMjYwLDEzICszMjY0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
ZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogCiAg
ICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToK
LSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICBjYXNlIEFSUkFZX1dJ
VEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMzNjIsNiArMzM2NSwyMCBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAg
IGlmIChoYXNJbmRleGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKKworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIpOworICAgICAgICAKKyAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICAKQEAgLTMzODMsMTMgKzM0MDAsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwogICAgICAgICAKLSAgICBtX2ppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNo
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICog
b3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpOworCisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQo
dGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBuZXdTaXplIC8g
c2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBT
dG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKQEAgLTM0MDIsOSArMzQzNyw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGg7CiAgICAgICAgIAotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91
dE9mTGluZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6
ZW9mKEpTVmFsdWUpKTsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZt
X2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAgICAgICAKICAg
ICBtX2ppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2Ny
YXRjaEdQUjIpOwpAQCAtMzQxNSwxMyArMzQ0NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpKTsK
KyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsK
ICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0g
c2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgLShv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIxKTsK
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikp
KSk7CiAgICAgfQotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsK
KyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgCiAgICAgc3RvcmFnZVJl
c3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU2LDYgKzExNTYsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0
ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTEzNjgsNyArMTM3OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdP
cGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CkBAIC0xNjY2LDcgKzE2NzYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklU
X0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJS
ZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFy
ZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOwpAQCAtMjE0MSw3ICsyMTUxLDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0
KCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3Bl
cnR5IHN0b3JhZ2UgcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
Q2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBtX2ppdC5z
dG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9
CiAKICAgICAvLyBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRv
IHNjcmF0Y2gsIHNvIGxvbmcgYXMgeW91J3JlIGZpbmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyAr
OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAg
ICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lv
biAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wg
aXNPdmVyc2l6ZShzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNpemVCbG9j
a0Zvcih2b2lkKiBwdHIpOwogCi0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2Fz
ZShzaXplX3QsIHZvaWQqKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJvb2xlYW4g
dHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4g
dHJ5QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4g
dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93
bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1v
ZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENs
YXNzVHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVt
aXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQs
IFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNT
dG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQpOworICAgICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0
ZXJJRCByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxv
Y2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWdu
ZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cgogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoJkNsYXNzVHlwZTo6c19pbmZvKSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6Y2xhc3NJbmZv
T2Zmc2V0KCkpKTsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0
b3JhZ2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVz
dWx0LCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjpl
bWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwg
UmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpT
RmluYWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAK
LWlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBS
ZWdpc3RlcklEIHJlc3VsdCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9y
YWdlKHNpemVfdCBzaXplLCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVz
dWx0KQogewogICAgIENvcGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+
aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAKQEAgLTQ0MywzNyArNDQzLDMyIEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKICAgICBzdG9yZVB0cihyZXN1bHQsICZh
bGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbmVnUHRyKHJlc3VsdCk7CiAgICAg
YWRkUHRyKEFic29sdXRlQWRkcmVzcygmYWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwg
cmVzdWx0KTsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOworICAgIHN1
YlB0cihUcnVzdGVkSW1tMzIoc2l6ZSAtIG9mZnNldEZyb21CYXNlKSwgcmVzdWx0KTsKIH0KIAog
aW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lz
dGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBz
dG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7CiAgICAgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3Rv
cmFnZSA9IEpTQXJyYXk6OnN0b3JhZ2VTaXplKGluaXRpYWxMZW5ndGgpOworICAgIHNpemVfdCBp
bml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihpbml0aWFsTGVuZ3RoKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUg
YmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAg
ICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAg
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0KTsK
KyAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRl
eGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwg
Zm9yIHRoZSBhcnJheS4KICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIGZh
bHNlPihUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1
Y3R1cmUoKSksIGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAgLy8gU3RvcmUgYWxsIHRo
ZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRyKHN0b3Jh
Z2VSZXN1bHQsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VP
ZmZzZXQoKSkpOwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihs
ZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5W
ZWN0b3JPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwor
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5
U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0
KCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgot
ICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6
c3RvcmFnZU9mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhj
ZWxsUmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIAotICAgIC8vIFN0b3Jl
IHRoZSB2ZWN0b3IgbGVuZ3RoIGFuZCBpbmRleCBiaWFzLgotICAgIHN0b3JlMzIoSW1tMzIoaW5p
dGlhbExlbmd0aCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0
LCBKU0FycmF5OjppbmRleEJpYXNPZmZzZXQoKSkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUg
c3BhcnNlIHZhbHVlIG1hcC4KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNz
KGNlbGxSZXN1bHQsIEpTQXJyYXk6OnNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkpKTsKLQotICAgICAg
ICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3
ZSBoYXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7
CkBAIC00ODUsMTYgKzQ4MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJh
eSh1bnMKICAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvLyBa
ZXJvIG91dCB0aGUgcmVtYWluaW5nIHNsb3RzLgotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0
aDsgaSA8IGluaXRpYWxMZW5ndGg7IGkrKykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICog
aSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
PihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICog
aSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNlbmRpZgotICAg
IH0KIH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OSw3
ICsxNjY5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aQogdm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0g
ICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXplKGxlbmd0
aCkpKSB7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAg
IHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjg4LDcgKzE2ODgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFs
bG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9w
ZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGlu
dCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3Bp
ZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkKKyAgICBp
ZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1
ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBm
b3Igc3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2Ug
aW4gTWFya2VkU3BhY2UgZm9yIGNlbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwgcmVnVDEpOwog
ICAgIAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5OjpvZmZzZXRP
Zkxlbmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5v
dEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRkcmVzc0Zv
cihpKSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTAg
KzExNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwog
I2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6
c19pbmZvKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
IAogICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIAogICAgIGlmIChmaW5h
bE9iamVjdE1vZGUgPT0gTWF5QmVGaW5hbCkgewogICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJh
bmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0
eSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5s
aW5rKHRoaXMpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGlu
ZS5saW5rKHRoaXMpOwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09i
amVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gp
OwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgIH0KICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7CkBAIC0yMzksMTAgKzIzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0
b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJl
c3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0
aGlzKTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
SW5zdHJ1Y3Rpb24KICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtU
byhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0
LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0b3Jl
MzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsK
ICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAtNDAzLDcgKzQwMyw3
IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBQYXRjaGFi
bGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJl
VG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0
QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2sp
OwogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZl
cnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpLCByZWdUMCk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1l
bnRMYWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJl
Z1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0
UmVzdWx0KHRoaXMpOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV9pZChJbnN0cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0
dXJlKSkpKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQg
PSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3Bl
cnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNl
bWVudExhYmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwpAQCAtNTA4LDggKzUwOCw4IEBAIHZvaWQg
SklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFz
ZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNl
dCkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZSk7CisgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21w
aWxlIGEgbG9hZCBmcm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3Zlcndy
aXRlIGJhc2UuCkBAIC01MjAsOCArNTIwLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1
bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0KTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRl
cmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXRE
aXJlY3RPZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9m
ZnNldCBjYWNoZWRPZmZzZXQpCkBAIC01MzEsOCArNTMxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGxvYWRQdHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRP
ZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAgIGxv
YWRQdHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY1NywxMSArNjU3LDExIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklM
RVIpCiAgICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmls
ZShzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkp
OwogI2VuZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cigmSlNBcnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNrcyBv
dXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9y
YWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9
IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVtaXRG
YXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw4ICsx
NTE2LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXRfYgogICAgIEFT
U0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVj
dChiYXNlVmFsdWUpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFja0ZyYW1l
Lmdsb2JhbERhdGE7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBiYXNlLT5ncm93
T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNl
LT5zZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVy
ZSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFn
ZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBiYXNlLT5zZXRCdXR0ZXJmbHko
Z2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIGJhc2U7
CiB9CkBAIC0yNDM0LDcgKzI0MzQsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNW
YWx1ZSgpOwotCisgICAgCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vi
c2NyaXB0LmlzU3RyaW5nKCkpKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpIHsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENF
UFRJT04oKTsKQEAgLTI1MjcsMTIgKzI1MjcsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2J5X3ZhbAogCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkp
IHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkg
PSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5k
ZXgoaSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoKmdsb2JhbERhdGEsIGks
IHZhbHVlKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3Qt
PnNldEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgY2FsbEZyYW1l
LCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICAgICAgICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2
YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFs
dWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2Ug
aWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwMSw3ICs5MDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lk
CiAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBwY1swXS51Lm9wY29kZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50X29wX2dldF9ieV9p
ZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
OworICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtOTYzLDcgKzk2Myw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5v
cGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJh
bmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBv
ZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgcGNbNl0udS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3Ry
dWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKQEAgLTk5MSw3ICs5OTEsNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIHBj
WzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwY1swXS51Lm9w
Y29kZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDcwLDEyICsxMDcwLDEyIEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICAKICAgICBpZiAoTElLRUxZKHN1YnNj
cmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUlu
dDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAg
SlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgIGlmIChq
c0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRl
eChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAg
ICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNB
cnJheSwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICAgICAgSlNPYmplY3Q6OnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2
YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIExM
SU5UX0VORCgpOwogICAgICAgICB9CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMs
IGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05NDEs
MjEgKzk0MSwyMSBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRW
YXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHRhZywgcGF5bG9hZCkKICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlP
ZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXQKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0
b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwg
OF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAor
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcs
IHBheWxvYWQpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5
LCAuaXNJbmxpbmUKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVj
dEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9w
ZXJ0eU9mZnNldAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxP
YmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgs
IG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFn
ZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFk
ZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXls
b2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6
ZSwgc2xvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtNzk0LDIwICs3OTQsMjAgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQ
cm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0QXNQb2lu
dGVyLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0
ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5k
KQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKLSAgICBsb2FkcCBKU09iamVjdDo6
bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0g
ICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAgbG9hZHAgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9h
ZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCiBl
bmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFz
SW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJ
bnQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6
Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQor
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJwIHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJ
bmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5l
U3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0Zp
bmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkg
KiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0g
ICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3Jh
Z2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVH
bG9iYWwoc2l6ZSwgc2xvdykKQEAgLTExMjYsOCArMTEyNiw4IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QyXSwgdDIKICAgICBsb2Fk
cCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDJdLCB0MgogICAgIGJwbmVxIFN0cnVj
dHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MiwgLm9wR2V0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNB
cnJheTo6bV9zdG9yYWdlW3QwXSwgdDMKLSAgICBiaWFlcSB0MSwgSlNBcnJheTo6bV92ZWN0b3JM
ZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJm
bHlbdDBdLCB0MworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fbGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIs
IFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0s
IHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CkBAIC0xMjExLDggKzEyMTEsOCBAQCBf
bGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0
MF0sIHQwCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QwXSwgdDAK
ICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDAsIC5vcFB1dEJ5VmFsU2xv
dwotICAgIGJpYWVxIHQyLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MV0sIC5vcFB1dEJ5VmFs
U2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MV0sIHQwCisgICAgbG9hZHAgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKKyAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwog
ICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVt
cHR5CiAub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgogICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0
MwpAQCAtMTIyMyw5ICsxMjIzLDkgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAKIC5vcFB1dEJ5
VmFsRW1wdHk6CiAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3Jb
dDBdCi0gICAgYmliIHQyLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX2F1eFdvcmRbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAgICAgYWRkaSAx
LCB0MiwgdDEKLSAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBdCisgICAg
c3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4
V29yZFt0MF0KICAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNs
b3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDExIEBAIGVsc2UKICAgICBjb25zdCBQYXlsb2FkT2Zmc2V0ID0gMAogZW5kCiAKKyMgQ29u
c3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KK2NvbnN0IElzQXJyYXkgPSAx
Citjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Citjb25zdCBBbGxBcnJheVR5cGVzID0gMTUKKwog
IyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1CiBjb25zdCBPYmplY3RUeXBl
ID0gMTMKQEAgLTMxOCw3ICszMjMsNyBAQCBtYWNybyBhbGxvY2F0ZUJhc2ljSlNPYmplY3Qoc2l6
ZUNsYXNzSW5kCiAgICAgICAgIGxvYWRwIGNsYXNzSW5mb09mZnNldFtzY3JhdGNoMV0sIHNjcmF0
Y2gyCiAgICAgICAgIHN0b3JlcCBzY3JhdGNoMiwgW3Jlc3VsdF0KICAgICAgICAgc3RvcmVwIHN0
cnVjdHVyZSwgSlNDZWxsOjptX3N0cnVjdHVyZVtyZXN1bHRdCi0gICAgICAgIHN0b3JlcCAwLCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW3Jlc3VsdF0KKyAgICAgICAgc3RvcmVwIDAsIEpT
T2JqZWN0OjptX2J1dHRlcmZseVtyZXN1bHRdCiAgICAgZW5kCiBlbmQKIApAQCAtNDkzLDcgKzQ5
OCw3IEBAIG1hY3JvIHdpdGhJbmxpbmVTdG9yYWdlKG9iamVjdCwgcHJvcGVydHkKIGVuZAogCiBt
YWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5U3RvcmFnZSwgY29udGlu
dWF0aW9uKQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0XSwg
cHJvcGVydHlTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdF0s
IHByb3BlcnR5U3RvcmFnZQogICAgICMgSW5kaWNhdGUgdGhhdCB0aGUgcHJvcGVydHlTdG9yYWdl
IHJlZ2lzdGVyIG5vdyBwb2ludHMgdG8gdGhlCiAgICAgIyBwcm9wZXJ0eSBzdG9yYWdlLCBhbmQg
dGhhdCB0aGUgb2JqZWN0IHJlZ2lzdGVyIG1heSBiZSByZXVzZWQKICAgICAjIGlmIHRoZSBvYmpl
Y3QgcG9pbnRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTI2
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJBcnJheUNvbnN0
cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRl
cmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJy
YXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBDSEVDS19BUlJB
WV9DT05TSVNURU5DWSAwCisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0
aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2Nh
dGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAq
IEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMu
CisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlk
ZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5E
RVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFs
dWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90
IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2Jq
ZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBp
ZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hl
cmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1h
cC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8v
IGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1
bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVy
dGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhl
cgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJz
ZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdv
dWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0
IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMg
d291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9y
ZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisvLyBEZWZpbmUgdGhlIG1heGltdW0g
c3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRv
IGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorI2RlZmluZSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kZXhpbmdI
ZWFkZXI6Om1heGltdW1MZW5ndGgpKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNy
b3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8g
YSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcx
MzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFY
X1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8v
IDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4g
dGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZG
RkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVy
IG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQg
d2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgx
MjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3Vu
ZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmly
c3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisK
Ky8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBh
IHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVh
dGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZl
Y3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0
aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRp
cGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBu
dW1WYWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFy
cmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4
aW5nSGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0QXV4V29yZChsZW5ndGgpOworICAgIHJl
c3VsdC5zZXRMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFT
RV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJh
eUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90
eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
SklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCkBAIC0xMTQsOSArMTE2LDE3IEBA
IGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlwZTo6c19pbmZvID0KIEBlbmQKICovCiAKK0Fy
cmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShleGVjLT5nbG9iYWxE
YXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90
eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIHByb3RvdHlwZS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQor
CiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJh
eShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorQXJyYXlQcm90b3R5cGU6
OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogewogfQogCkBAIC0yOTIs
OCArMzAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7CiAgICAgICAgIEpTVmFs
dWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4KGspKQotICAgICAg
ICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4KGspOworICAgICAgICBpZiAodGhpc09i
ai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmot
PmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZWxlbWVudCA9
IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgCkBAIC00MTMsMTAgKzQyMywxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsg
aysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAg
ICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGsp
OworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShr
KTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVudC50b1VTdHJpbmdJbmxpbmUoZXhl
YykpOwogICAgICAgICAgICAgZWxzZQpAQCAtNjI4LDcgKzYzOCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAKLSAg
ICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJh
eSh0aGlzT2JqKS0+aW5TcGFyc2VNb2RlKCkpIHsKKyAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZv
KCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VJbmRl
eGluZ01vZGUoKSkgewogICAgICAgICBpZiAoaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGV4ZWMs
IGNhbGxUeXBlLCBjYWxsRGF0YSkpCiAgICAgICAgICAgICBhc0FycmF5KHRoaXNPYmopLT5zb3J0
TnVtZXJpYyhleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgZWxz
ZSBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKQpAQCAtNzg4LDkgKzc5OCw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhl
YywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRp
b24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAg
ICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5LT5nZXRJbmRleChrKTsK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgdik7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDEsIGpzTnVtYmVyKGspKTsKQEAgLTg0NiwxMSArODU2LDExIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0Fy
cmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7
CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytr
KSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMo
YXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXkt
PmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJy
YXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MiwgdGhpc09iaik7CiAKQEAgLTkwOSwxMSArOTE5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRo
aXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAg
ICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwg
YXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENh
bGwuY2FsbCgpOwpAQCAtOTY1LDExICs5NzUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09i
aik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAg
Zm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMp
OwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgo
aykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNO
dW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2Jq
KTsKIApAQCAtMTAxNywxMSArMTAyNywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsK
ICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3Ig
KDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFw
cGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5n
ZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIs
IHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwo
KTsKQEAgLTEwNzUsOCArMTA4NSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKIAogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikKICAgICAgICAg
cnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2Fu
R2V0SW5kZXgoMCkpewotICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleCgwKTsKKyAgICBlbHNl
IGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KDApKXsKKyAgICAgICAgcnYg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KDApOwogICAgICAgICBpID0gMTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTEwOTcsOCArMTEw
Nyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwogICAgICAgICAgICAgSlNWYWx1ZSB2OwotICAgICAg
ICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0SW5kZXgoaSkpKQotICAgICAgICAgICAgICAg
IHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5j
YW5HZXRJbmRleFF1aWNrbHkoaSkpKQorICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOyAv
LyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNr
IHRvIHNsb3cgcGF0aAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCB2KTsK
QEAgLTExNTIsOCArMTE2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAgICAgICAg
IHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNh
bkdldEluZGV4KGxlbmd0aCAtIDEpKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgobGVu
Z3RoIC0gMSk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2ts
eShsZW5ndGggLSAxKSl7CisgICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShsZW5n
dGggLSAxKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMTc0LDkgKzExODQsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB1bnNpZ25lZCBpZHggPSBs
ZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaWR4KSkpCisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaWR4KSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBl
bnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCi0gICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleChpZHgpKTsKKyAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4UXVpY2tseShpZHgpKTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwganNOdW1iZXIoaWR4KSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDMsIGFycmF5KTsKICAgICAgICAgICAgIHJ2ID0gY2Fj
aGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE3ICsy
OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFycmF5UHJvdG90eXBlIDogcHVi
bGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAKICAgICBwdWJsaWM6CiAgICAgICAg
IHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFycmF5UHJvdG90eXBl
KiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4o
KmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFy
cmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9
CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFycmF5
U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJBcnJheUNvbnZl
bnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFk
ZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUg
YWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMg
dG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8g
bV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1
c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlz
IGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJy
YXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVy
YXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2lu
ZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQor
c3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9y
YWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3RseSBp
bnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZseS4K
K3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZseSog
YnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRl
cmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVyKiBp
bmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9
CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVh
ZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAgICAv
LyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVu
Z3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3Ro
KSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9Cisg
ICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVy
KCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkxlbmd0aCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVy
Zmx5OjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNv
cHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisgICAgeworICAgICAgICBt
X3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFwOworICAgICAgICBtX2luZGV4QmlhcyA9IG90
aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBt
X2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAg
ICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAorICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3NwYXJzZU1hcCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9k
ZSgpOworICAgIH0KKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsK
KyAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVj
dG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1
aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFs
aXphdGlvbkluZGV4OworICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOwor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlm
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRp
YyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNl
dE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpv
ZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rv
ck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1faW5kZXhCaWFzKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNl
TWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9zcGFy
c2VNYXApOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplRm9yKHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheVN0b3JhZ2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseV9oCisjZGVmaW5lIEJ1dHRlcmZseV9o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKK3N0cnVjdCBBcnJheVN0b3Jh
Z2U7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnV0dGVy
Zmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkgeyB9IC8vIE5vdCBpbnN0YW50aWFibGUu
CitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID8gaGFzSW5kZXhpbmdIZWFkZXIgOiB0cnVlKTsK
KyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyAoaGFzSW5kZXhpbmdIZWFkZXIgPyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpIDogMCkgKyBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICB9
CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVy
biBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVh
ZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRl
cigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0
dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdI
ZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Cisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24o
U2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIq
IGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhp
cyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5k
ZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3Rv
cmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5w
cm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5k
ZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAg
ICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxB
cnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJv
cGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2Uo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lk
KiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0
dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9
CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gVGhl
IGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFsbG9jYXRpb24g
aXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAgIC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8g
cmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNl
dCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRl
ZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgorICAgIC8vIG1vZGVzIG9m
IGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJm
bGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0
b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3Bl
cnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkq
IGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJh
eVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVj
aC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRl
cmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhl
IG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVyLgorICAgIEJ1dHRlcmZseSogdW5zaGlmdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZs
eSogc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19o
CisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHZv
aWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemUsICZ0
ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVtcCwgcHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKGhhc0lu
ZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhp
bmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksCisgICAgICAgIHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSksIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5l
d1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2FwYWNpdHkgPiBv
bGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQcm9wZXJ0eUNh
cGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
ICAgIG1lbWNweSgKKyAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3Bl
cnR5Q2FwYWNpdHksCisgICAgICAgIGJhc2UocHJlQ2FwYWNpdHksIG9sZFByb3BlcnR5Q2FwYWNp
dHkpLAorICAgICAgICB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBy
ZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAg
ICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisgICAg
ICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0
dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVy
ZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVy
ZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpOworICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2Fw
YWNpdHkpOworICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cisg
ICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2Fw
YWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5
UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xk
SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQg
PSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2gg
bW9yZSBlZmZpY2llbnQgaWYgd2UgdXNlZCB0aGUgcHJvcGVydHkgc2l6ZSwKKyAgICAvLyBub3Qg
dGhlIGNhcGFjaXR5LgorICAgIHZvaWQqIHRvID0gcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5Q2FwYWNpdHk7CisgICAgdm9pZCogZnJvbSA9IHByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlDYXBhY2l0eTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWluKAorICAgICAgICB0
b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIG9sZElu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5
Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcykpOworICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNp
dHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBib29sIGhh
c0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKTsKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEs
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAg
ICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVy
ZSksIG5ld1ByZUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQorewor
ICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNp
dHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkg
YmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdo
aWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVl
ZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisgICAgLy8gbW92aW5n
IGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91
Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBj
YWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8K
KyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3Vt
ZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAvLyB3ZSByZWx5IG9u
IHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFy
Z3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBj
b3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KKyAg
ICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBw
cm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5
ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7Cisg
ICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBu
dW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQor
eworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92
ZS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHkgKyBudW1iZXJPZlNsb3RzLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNh
cGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigw
KSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdl
KCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgq
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0T3duUHJvcGVy
dHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAgICAgICAgdHlwZWRl
ZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
ICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlOYW1l
c0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sj
I21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpoYXNJbnN0
YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hl
YWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUgIlByb3BlcnR5U3Rv
cmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQnV0dGVyZmx5OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgU3Ry
dWN0dXJlOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgewor
cHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGgg
dG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0
aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIGVudW0geyBtYXhpbXVtTGVuZ3RoID0g
MHgxMDAwMDAwMCB9OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGlu
Z0hlYWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fYXV4V29yZCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2xlbmd0aCk7IH0KKyAgICAKKyAgICAvLyBUaGUgZmFj
dCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4aW5nSGVhZGVyIGlzIGFsbCB6ZXJvJ3MgaXMgcGFydCBv
ZiB0aGUKKyAgICAvLyBjb250cmFjdCBvZiB0aGlzIGNsYXNzIGFuZCBzaG91bGQgbm90IGJlIGNo
YW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRlcGVuZAorICAgIC8vIG9uIGl0LgorICAgIEluZGV4aW5n
SGVhZGVyKCkKKyAgICAgICAgOiBtX2F1eFdvcmQoMCkKKyAgICAgICAgLCBtX2xlbmd0aCgwKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aCh1aW50MzJfdCBsZW5ndGgpCisg
ICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBt
X2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4V29yZCgpIHsg
cmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJfdCBhdXhXb3Jk
KSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFk
ZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20oY29uc3QgQnV0dGVyZmx5
KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5
U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZy
b21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2Up
OworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhp
cyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFn
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFBy
b3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5
U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4o
dGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3Rh
bmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24g
YSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3Ry
dWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVy
ZSopOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOworICAgIAorICAgIHVpbnQzMl90IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhp
cyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgorICAgIHVpbnQzMl90IG1fbGVuZ3Ro
OyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UgYW5kIGl0cyB0
eXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRl
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAor
I2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6
OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9
CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZpbmUgSW5kZXhpbmdUeXBlX2gKKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0
aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9uYWwgZmxhZ3Mg
Zm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQor
Ly8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KK3N0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAgICAgID0gMTY7IC8vIE1lYW5z
IHRoYXQgdGhpcyBvYmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUgcGFzdC4KKwor
Ly8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9IElzQXJy
YXkgfCBIYXNBcnJheVN0b3JhZ2U7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzLgor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAxNTsK
KworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSAzMTsK
KworaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kZXhpbmdUeXBlIHR5cGUpCit7Cisg
ICAgcmV0dXJuICEhKHR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNBY3RpdmF0aW9uOjpz
X2luZm8gPSB7CiAKIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKICAgICA6IEJhc2Uo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFjdGl2YXRp
b25TdHJ1Y3R1cmUuZ2V0KCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpCi0gICAgLCBtX3JlZ2lz
dGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIDApCisgICAgLCBtX3JlZ2lz
dGVyQXJyYXkoMCkKICAgICAsIG1fbnVtQ2FwdHVyZWRBcmdzKG1heChjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpKSkKICAgICAs
IG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNv
dW50KCkpCiAgICAgLCBtX2lzVG9ybk9mZihmYWxzZSkKQEAgLTY3LDEyICs2NywxMiBAQCB2b2lk
IEpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIC8vIE5vIG5lZWQgdG8gbWFyayBvdXIg
cmVnaXN0ZXJzIGlmIHRoZXkncmUgc3RpbGwgaW4gdGhlIFJlZ2lzdGVyRmlsZS4KLSAgICBQcm9w
ZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5n
ZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1f
cmVnaXN0ZXJBcnJheTsKICAgICBpZiAoIXJlZ2lzdGVyQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnJl
Z2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKSwgcmVp
bnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lz
dGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5zZXQocmVn
aXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7CisgICAgdGhpc09iamVjdC0+
bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlzT2JqZWN0LT5tX3JlZ2lz
dGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rlck9mZnNldCgpOwogCiAg
ICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBpdCBwb2ludHMgYXQgb3Vy
IGJ1ZmZlci4KQEAgLTEzMSw3ICsxMzEsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5
bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTQ2LDggKzE0Niw4IEBAIHZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5n
ZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVu
dGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBT
a2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBib29s
IEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVx
dWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplKCk7CiAgICAgICAgIHNp
emVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAgICBTdG9yYWdlQmFycmll
ciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2Vk
IHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSBy
ZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9yZWdpc3RlckFycmF5OyAv
LyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2Jq
ZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAg
ICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAgICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnMg
OiAzMDsKICAgICAgICAgYm9vbCBtX2lzVG9ybk9mZiA6IDE7CkBAIC0xNjQsNyArMTY0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkK
ICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3Rl
cnNbaV0uZ2V0KCkpOwogCi0gICAgICAgIG1fcmVnaXN0ZXJBcnJheS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIG1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVy
QXJyYXk7CiAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwogICAgICAgICBtX2lzVG9y
bk9mZiA9IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAgLTI0LDEzICsyNCwxNyBA
QAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNl
LmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgog
I2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUmVq
ZWN0LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKICNp
bmNsdWRlIDx3dGYvQVZMVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsNDkxICs0OSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NFUlRfSEFTX1RSSVZJQUxf
REVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQotLy8KLS8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0v
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKLS8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKLS8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCi0v
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAotLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKLS8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8vIFRoZSBkZWZpbml0aW9u
IG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0
aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXpl
IGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlz
IG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0
b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8g
YmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMg
YnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4K
LSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLS8vIDB4RkZG
RkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdo
IGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCi0K
LS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZl
Y3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNy
ZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQot
I2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1cHBlciBib3VuZCB0byB0
aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxl
bWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCi0KLS8vIE91
ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJz
ZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRo
YW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3Rvcgot
Ly8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3
ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIg
PSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU05v
bkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9
OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVy
IGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9y
IGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgotLy8gVGhp
cyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmlu
ZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Ci19Ci0K
LXN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24s
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHRocm93RXhjZXB0aW9uKQotICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNBcnJheTo6Y2hl
Y2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZv
aWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0
aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwotICAgIHVuc2lnbmVkIGluaXRpYWxT
dG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9p
ZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgp
OwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0
b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9z
dG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBp
bml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6
ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBj
YW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGlu
aXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsK
LSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVj
dG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9y
YWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2Fz
dDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
ID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwot
ICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7Ci0g
ICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKLSNlbmRpZgot
Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBt
dWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXpl
KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JD
b25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7
Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFy
cmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVm
aW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwot
ICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5
ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6
ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAg
IG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBl
eGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBT
cGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAg
Ly8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8g
dGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlz
IGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUs
IHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdh
aW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkp
IHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRU
aHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRy
aWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsK
LSAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNl
dHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYg
KCFzZXR0ZXIpIHsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIs
IGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBw
ZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBh
cnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERp
cmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQo
YXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmly
c3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24g
Y2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0g
ICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9u
ZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5
LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVm
aW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0K
LQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxE
YXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBp
ZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZh
bHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7
Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsK
LSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwot
fQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6Omdl
dCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0
dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdl
dHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVy
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRh
OwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5l
IEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlu
bGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChp
dGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlz
aXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3Bh
cnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFw
ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFs
aXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJz
ZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1
ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0K
LSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsK
LSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5z
cGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgp
OwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0
aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5
IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAv
LyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+
c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCog
bmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlT
dG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFn
ZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3Rv
cmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsK
LSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9y
KQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBp
ZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50
cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsK
LSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdl
dHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2Jq
ZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7
Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5z
ZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9i
amVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgp
OwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0
ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRH
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQot
ICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRl
cik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
YWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNE
ZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0
dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5l
ZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhG
RkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3Qg
Y2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5
Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0
IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UK
LSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMg
bWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVl
JwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2Vk
IHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScp
LgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhy
b3dFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShl
eGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQg
Y3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBp
bnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAg
IFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5z
aWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1
bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQu
IElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkg
ewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmlu
ZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0Rh
dGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3Bl
cnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dy
aXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2
YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2Yg
YW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRo
ZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVs
dCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3Ig
UHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBu
YW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtb
RW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRl
c2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRl
IGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVh
dGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAg
ICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
ZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNV
bmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRz
KTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3Is
IGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0g
ICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZp
ZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQg
aW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5
LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5n
ZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3Iu
ZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4K
LSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWpl
Y3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBb
W0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24g
b2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQo
KSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAg
ICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5n
IHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlz
IHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICgh
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwg
aWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBo
YXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAg
ICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJl
bnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJv
cGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9w
ZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJs
ZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJp
YnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAg
ICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAg
ICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3Bl
cnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAg
Ly8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmli
dXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewot
ICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5k
IElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAg
Ly8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxz
ZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJy
ZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0
YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRl
IG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEu
aWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgot
ICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZp
ZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJy
ZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
dmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52
YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVy
dHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMg
YWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3Vy
cmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNz
b3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUg
Ym90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsK
LSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1Nl
dF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVs
ZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQu
W1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVy
UHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9y
IGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNv
cnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Yg
b2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4
ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4g
dHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0
YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCiB7CiAgICAgQVNTRVJUKGlzTGVu
Z3RoV3JpdGFibGUoKSB8fCAhd3JpdGFibGUpOwogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgp
IHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElz
UmVhZE9ubHkoKTsKIH0KQEAgLTYzMCwzOCArMTYwLDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QKICAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1Zh
bHVlXV0gdG8gaW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtb
RGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5n
ICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwg
d2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgotICAg
ICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYg
KGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1
ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9
IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXkt
PmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwor
ICAgIHJldHVybiBhcnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIs
MTAgKzE3NCw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAg
ICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpLCBzbG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4Nywy
NiArMTg1LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0g
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAg
ICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNv
bmQuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7CiB9CiAKQEAgLTcxNCwxMSArMTkyLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAg
ICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUu
dG9VSW50MzIoZXhlYyk7CkBAIC03MzMsMTk0ICsyMDYsOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsK
LQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQot
ICAgIC8vIEZhc3QgY2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBt
X251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
bGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxl
IDJeMzItMSAtIHRoaXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFu
ZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+
IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxk
VGhyb3cpOwotICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2Jq
ZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBp
bmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChp
ID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwot
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxl
IGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBp
ZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5z
aWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVk
IHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0g
ICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsg
MTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVz
aW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBp
ZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7
Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFz
IGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xk
IHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgot
ICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQg
Z3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYg
KG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAg
ICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNp
bmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0g
ICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2Rl
IGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBm
YWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAg
bWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rv
ckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJh
eTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9y
LCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9y
ZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOwotfQotCi1ib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5
IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJU
KGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7
Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5k
bGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAg
IGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRl
bnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0
ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAK
LSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkg
KyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUg
dXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAg
IGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkp
IHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBo
YXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAg
ICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAg
ICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGly
ZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgfQotCi0gICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGli
aXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAg
aWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
LSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmpl
Y3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0g
ICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFy
ZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8g
YmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1h
cCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3Ig
aWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNw
YXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0lu
QXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aCkpCi0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVj
dG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFy
cmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0
b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXRO
b25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0
b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNB
cnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjgsMzUgKzIxNiw2
IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVu
Y3koKTsKLQotICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5t
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAg
ICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYg
KGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0
cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpc09i
amVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMg
aW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsK
ICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpAQCAt
OTY0LDEyNyArMjIzLDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2
b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJyYXk6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5
IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGli
bHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHBy
b2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0
cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5n
dGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlzLnJlc2VydmVD
YXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAg
ICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9m
KHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0K
LQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5z
aWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsK
LSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEw
MDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAg
ICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rv
ckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxh
c3RBcnJheVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVp
dmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAz
ICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGgg
PSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3Jt
IGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5n
dGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRM
ZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxl
bmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNv
bnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20g
c3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBh
Y2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHku
Ci0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VS
VChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0
aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0g
dGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBz
ZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3
U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9y
TGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0g
ICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NF
UlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBu
ZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9t
aWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5z
aWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3Rv
YXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVu
c2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4Qmlh
czsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3
QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9m
IG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0
b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVj
dG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFn
ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8
V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQot
ICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9m
IHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXpl
KHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0
ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNl
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8g
VGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcg
c3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAgIC8vIElmIG5vdCwg
d2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNTRVJU
KGNvdW50ID4gbV9pbmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3Vy
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0
b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUg
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0
aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9pbmRl
eEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNzOgpA
QCAtMTA5Myw4ICsyNTEsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpT
R2xvCiAgICAgLy8gICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBzaXpl
IG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAqIGRl
c2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0
b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxl
bmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJl
cXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFz
aGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZl
Y3Rvckxlbmd0aCkKQEAgLTExMDIsOCArMjYwLDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNl
ZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9y
TGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgp
ID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rv
ckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsK
KyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAr
IHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVk
Q2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JM
ZW5ndGgpIDw8IDEpOwogCkBAIC0xMTE0LDEwICsyNzIsMTAgQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsK
ICAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJn
ZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAo
Y3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3
QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9
IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwg
Jm5ld0FsbG9jQmFzZSkpCisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSksICZuZXdBbGxvY0Jhc2UpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBk
ZXNpcmVkQ2FwYWNpdHk7CiAgICAgfQpAQCAtMTEzMCw0NSArMjg4LDQwIEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyBJZiBpdCBkaWQsIHdlIGNhbGN1
bGF0ZSB0aGUgYW1vdW50IHRoYXQgd2lsbCByZW1haW4gYmFzZWQgb24gYW4gYXRvbWljIGRlY2F5
IC0gbGVhdmUgdGhlCiAgICAgLy8gdmVjdG9yIHdpdGggaGFsZiB0aGUgcG9zdC1jYXBhY2l0eSBp
dCBoYWQgcHJldmlvdXNseS4KICAgICB1bnNpZ25lZCBwb3N0Q2FwYWNpdHkgPSAwOwotICAgIGlm
IChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgeworICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgewogICAgICAgICAvLyBBdG9taWMgZGVjYXksICsgdGhlIHBvc3QtY2Fw
YWNpdHkgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB3aGF0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAg
cG9zdENhcGFjaXR5ID0gbWluKChtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCkgPj4gMSwgbmV3U3Rv
cmFnZUNhcGFjaXR5IC0gcmVxdWlyZWRWZWN0b3JMZW5ndGgpOworICAgICAgICBwb3N0Q2FwYWNp
dHkgPSBtaW4oKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9y
YWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIC8vIElmIHdlJ3Jl
IG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2Fw
YWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KLSAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBz
dG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxl
bmd0aCk7Ci0gICAgfQotCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0
aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIFN0ZXAgNDoKLSAgICAvLyBDb3B5
IGFycmF5IGRhdGEgLyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0
LWNhcGFjaXR5ICYgZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCi0KLSAgICAvLyBJZiB0aGlzIGlz
IGJlaW5nIG1vdmVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJl
IGFsd2F5cyBzaGlmdGluZyBkYXRhCi0gICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+
IG1faW5kZXhCaWFzKS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhl
YWRlci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0
aCk7Ci0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQot
ICAgIC8vIEFyZSB3ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3
QWxsb2NCYXNlICE9IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0
aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKKyAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFz
ZSAhPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKCkpIHx8IHBvc3RDYXBhY2l0eSA8IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpIC0gbGVuZ3RoKTsKICAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bmV3VmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7Cisg
ICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCk7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHkp
OworICAgIAorICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0
b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6
ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Cisg
ICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBu
ZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVu
Z3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFy
c2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KLSAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXApOworICAgIEFTU0VSVChpc0xl
bmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCi0gICAgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKICAgICAgICAgLy8g
RmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAgaWYgKG1hcC0+bGVu
Z3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKQEAgLTExOTUs
NyArMzQ4LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAg
ICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYg
RG9udERlbGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgo
aW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKQEAgLTEy
MDQsMTQgKzM1NywxNCBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGtleXNbaV0pOwogICAgICAgICAg
ICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0
ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhN
YXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChuZXdMZW5n
dGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRlIHByb3BlcnRpZXMgZnJvbSB0aGUgdmVj
dG9yLgotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgbV92
ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxl
bmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAg
ICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90OwpAQCAtMTIyMCw1MyArMzczLDY1
IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVuZ3RoOworICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBKU1ZhbHVl
IEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5t
X2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFi
bGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAg
ICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKLSAgICBpZiAoaW5k
ZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAgaWYgKHZhbHVlU2xv
dCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAgICAgICAgICAgdmFs
dWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAg
ICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5k
ZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOwot
ICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4
LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAvLyBD
YWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGlu
ZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywg
aW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8g
TGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIENhbGwgdGhlIFtb
RGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1
ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgp
KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBzZXRMZW5ndGgoZXhl
YywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICAgICAgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0
cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJuIGVs
ZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBlbGVtZW50OwogfQog
CiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxs
IGRpZmZlcmVuY2VzLgpAQCAtMTI3NCw2MyArNDM5LDc3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9w
KEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJe
MzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lk
IEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUg
bV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgp
OworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBQdXNoaW5n
IHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRo
cm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0aCA9
PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlz
LCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQZXIg
RVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlmICgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFs
d2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvclts
ZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGlu
ZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0
aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0
aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAg
ICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgor
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVu
Z3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAvLyBIYW5kbGVk
IHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCisgICAgICAg
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0b3Jh
Z2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFnZSk7CisgICAgICAgIGNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAotYm9vbCBK
U0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7CiAgICAg
QVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3Jh
Z2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndp
c2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRo
bSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKG9sZExlbmd0aCAhPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghb2xkTGVuZ3RoKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGNvdW50
OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50OworICAgIHN0b3JhZ2UtPnNldExlbmd0
aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0g
ICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOworICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIGlm
ICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBtaW4odmVjdG9yTGVuZ3RoLCAodW5z
aWduZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92ZWN0b3JMZW5ndGggLT0gY291bnQ7
CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pOwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCi0gICAgICAgICAgICBtX2luZGV4Qmlh
cyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9i
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTEzMzksNTkgKzUxOCwzMCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJl
IGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1f
bGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lz
ZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGht
IGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAg
ICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2Us
IHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0
aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAg
ICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1
cmUoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsKKyAgICAgICAgc3Rv
cmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgY291bnQpOwog
ICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Y291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9y
ID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNT
RVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fc3RvcmFnZSkgewotICAgICAg
ICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOwotCi0g
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAg
ICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLQotICAgICAg
ICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYXNlU3Rv
cmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoICsgdGhpc09iamVj
dC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rvci0+c2xvdCgpLCB0aGlzT2JqZWN0LT5t
X3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJhc2VTdG9yYWdlICE9IHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3Rv
cmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNo
YXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzT2JqZWN0LT5tX2luZGV4
Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0g
YmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9zdG9yYWdlLT5t
X2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkKLSAgICAgICAgbWFwLT52
aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9y
UVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBz
dGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVyKCk7CkBAIC0xNDA4LDExMiAr
NTU4LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjCiAKIHZv
aWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVG
dW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsK
LSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogCi0g
ICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRp
bmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAg
ICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0g
ZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21w
YWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAgICAgICAKKyAgICAg
ICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1
ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAg
YWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbFZhbHVlc0Fy
ZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBj
b21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQu
IFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHks
IHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZy
b20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAg
IHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAgIAorICAgICAgICBjaGVja0lu
ZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Ci0KLSAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCi0gICAgICAgIHJl
dHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLQot
ICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZh
c3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vz
b3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQotICAgIC8vIHNp
ZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1
ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKLQotICAgIGNoZWNrQ29uc2lz
dGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgdW5z
aWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBl
bnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4K
LSAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQg
dHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFy
eQotICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5n
IGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJu
Ci0gICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVs
eSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCi0KLSAgICBWZWN0b3I8VmFs
dWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBp
ZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdN
b2RlKCkpOwogICAgIAotICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKLQotICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsr
KSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OwotICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICB2YWx1ZXNb
aV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmlu
ZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAgLy8gYSB0b1N0cmluZyBjYWxs
IHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0g
dmFsdWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lubGluZShleGVjKTsKLQotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgewotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQg
YmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgotICAgIC8v
IHRoYW4gTyhOIGxvZyBOKS4KLQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBj
b21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChz
dG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3Ry
aW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0
IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92
ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVp
cmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBw
cm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0
cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2Ug
Y2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5j
b25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFs
dWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJl
Z2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgYm9v
bCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgdmFsdWVzW2ldLmZp
cnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMg
dG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAg
IC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkr
KykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9VU3Ry
aW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3Jp
dGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRo
ZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdF
U09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2
YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNv
bXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXpl
KCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rp
b24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQt
MjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93
c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24g
aXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0
LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJv
d3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4o
KSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmlu
Z1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlv
biBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAg
IC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBh
Y3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1f
bGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAg
ICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAg
CisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUg
bGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAg
ICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxE
YXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChz
dG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAg
ICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAg
IGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21w
YXJlIHsKQEAgLTE1OTUsMjUzICs3NzAsMjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZv
ckFycmF5Q29tcGFyZSAKIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYg
Y2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFp
c2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhl
IG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNs
ZWFybHkgdXAgdG8gbm8gZ29vZAotICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4K
LSAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1f
bGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25l
ZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3Nw
YXJzZVZhbHVlTWFwLT5zaXplKCkgOiAwKTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJl
ZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2Nv
bXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29t
cGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMu
Z3Jvdyhub2RlQ291bnQpOwotCi0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAg
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRD
YWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0g
ICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01v
ZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6
IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rvciwg
bWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIg
dXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51
bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcg
dW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJl
ZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5l
ZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRd
LmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFs
dWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11
bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1
cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAg
ICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5s
ZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0
aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkg
OiAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcwor
ICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nh
c3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBt
b2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmll
ZAorICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGlu
ZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9
IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAg
ICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291
bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0
aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9y
W251bURlZmluZWRdLmdldCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAg
ICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsr
bnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAg
ICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
ICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFw
LT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2Nh
dGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAg
ICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZl
Y3Rvckxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAg
IAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7
CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0
byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMu
CisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCk7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAg
ICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0g
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpOwotICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAr
K251bURlZmluZWQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJh
eSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3Rv
ciBpbmNvcnJlY3RseS4KKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNr
IGludG8gbV9zdG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJy
YXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9s
ZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsg
KytpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAg
ICAgKytpdGVyOwogICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVj
dG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNp
emUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0
IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBD
b3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5z
dGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5l
ZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAg
KytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAg
ICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBv
dXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxl
bmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQog
CiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1l
bnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3Rv
cjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVu
ZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsK
LSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5k
KHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rv
ckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsr
aSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwor
ICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
YXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
OyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdl
dChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBp
IDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMs
IGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVj
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChs
ZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9z
dG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBt
X3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYu
Z2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAg
ICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChl
eGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMs
IGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xl
bmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7CiAKLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7Cisg
ICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5z
aWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZp
bmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFw
LT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2Nh
dGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90
LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAg
ICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0
aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAg
ICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1V
bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENv
bnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lz
dGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVu
c2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsr
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlw
ZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAg
ICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgp
OworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUg
dG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVz
IC0gaWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2Fs
bGVyLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBu
ZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXRO
b25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisg
ICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3Ro
OworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0
ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0K
LSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3Ro
KTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFy
c2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3Jh
Z2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0
aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAg
ICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3Ry
dWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
fQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMjEsMTQwICsyMSwyOSBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZp
bmUgSlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKIAotI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCi0KIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBC
YXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQot
ICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAg
IHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0
eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkg
Y29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xh
c3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBG
bGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9
IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAg
IHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAg
ICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9y
ZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNS
ZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRh
dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwg
SlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
Ym9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWdu
ZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZp
bmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFs
aWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShp
dGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVu
c2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9k
cyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRv
ciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRh
aW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAg
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAg
IC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0g
ICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMg
c3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJy
YXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBz
dHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBB
cnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0
U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1h
eSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQg
dG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVk
IHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkg
LSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2Ug
ewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9u
IHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQg
YnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBw
b3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1
cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAg
ICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVp
bnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUOwogCisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9pbmRl
eEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlKDApCi0gICAgICAgICAgICAsIG1fc3Bh
cnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAg
ICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
ID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENyZWF0
aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsK
LSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNl
OwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0
YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQg
aXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBA
IC0xNjcsMjUgKzU2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIg
dG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBw
cm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMg
YXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0
eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBh
bGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVy
dHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
ICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5
cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCiAgICAgICAgIGJv
b2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9uID0g
ZmFsc2UpOwogCkBAIC0xOTksMTQyICs3NCw4MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgYm9v
bCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogCi0gICAgICAgIGJv
b2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYm
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1bnNp
Z25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBt
X3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAg
aWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9y
YWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAg
ICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChj
YW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0
b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIEFTU0VSVChz
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KLSAg
ICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7Ci0g
ICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNldCBtX251bVZhbHVlc0luVmVj
dG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90
IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgot
ICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFs
aXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIGNvbXBsZXRlSW5p
dGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdl
IHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3
TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1iZXIgb2YgcHJvcHJldGllcyBp
bml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJU
KG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBib29sIGluU3Bh
cnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1cm4gbWFwICYmIG1hcC0+c3Bh
cnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3Rh
dGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5ndGgpOwogCiAgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9yYWdlT2Zmc2V0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3Jh
Z2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhP
ZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
QXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJik7Ci0KICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIHNp
emVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBib29sIGlz
TGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2Up
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAgICAgICAgICAgICByZXR1cm4g
IW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwotICAgICAg
ICB2b2lkIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3Bl
cnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKLSAgICAgICAgYm9vbCBk
ZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGFsbG9jYXRlU3Bh
cnNlTWFwKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAo
KTsKLQotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwogCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25l
ZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRDb3Vu
dFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAgICAg
ICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOwotCi0gICAgICAg
IGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lz
dGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2
YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8v
IFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4K
LSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1h
eWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxs
PwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGlj
IHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheSwgbV9pbmRleEJpYXMpOyB9CiAgICAgfTsKIAorICAgIGlubGluZSBCdXR0ZXJmbHkqIGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9
IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQorCiAgICAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkq
IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0g
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3Rk
OjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAg
ICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7CisjZW5kaWYK
KyAgICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFzQXJy
YXkoSlNWYWx1ZSk7CkBAIC0zNTMsMzAgKzE2OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlu
bGluZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwpIHsgcmV0dXJuIGNlbGwtPmNsYXNzSW5m
bygpID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNW
YWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlzSlNBcnJheSh2LmFzQ2VsbCgpKTsgfQog
Ci0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVu
ZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0
aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0
aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9m
KEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4
RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZG
VSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhh
dmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50
cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjov
L3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBV
Ci0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0FycmF5OjpzdG9yYWdlU2l6ZSh1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoIDw9IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHByb3ZpZGVkICh2ZWN0b3JMZW5ndGgg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgLy8gLSBhcyBhc3NlcnRlZCBh
Ym92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBkZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBp
biBwcmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSwgcHJvdmlkZWQg
dGhhdAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGNvcnJlY3RseSBk
ZWZpbmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9yYWdl
KSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkpOwotICAgIAotICAgICAgICByZXR1
cm4gc2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5k
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFy
Z3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRl
eFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVu
dENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwog
CkBAIC02NSw3ICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5j
dGkKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQo
Ym91bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+
Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+
YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50
KGkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAor
dm9pZCBKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiBVU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1f
c3RydWN0dXJlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJ
T04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBt
X3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92
ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIg
TWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNT
RVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFVTdHJpbmcgY2xh
c3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNl
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEpTRnVu
Y3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAg
IGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBF
eGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5j
cHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTksOCArNTE5LDggQEAgYm9vbCBTdHJp
bmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIGlmIChtX2lzQXJyYXkpIHsKICAg
ICAgICAgLy8gR2V0IHRoZSB2YWx1ZS4KICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAg
aWYgKG1faXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleChp
bmRleCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJ
bmRleChpbmRleCk7CisgICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0
LmdldCgpKS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHZhbHVlID0g
YXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOwog
ICAgICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChtX29iamVjdC5nZXQoKSwgZXhlYywgaW5kZXgsIHNsb3QpKQpAQCAtNjg1LDgg
KzY4NSw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNKU0Fy
cmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgICAg
ICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkK
KyAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5k
ZXgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5LT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4LCBzbG90KSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlz
aW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAw
OSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0
LDEwICsyNCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMu
aCIKQEAgLTM4LDEyICs0MCwxOSBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgor
I2luY2x1ZGUgIlJlamVjdC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVk
ZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVy
IGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9y
IGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhp
cyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmlu
ZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCog
Z2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkgKzk1LDgwIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRv
ciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NF
UlQoc3RvcmFnZSk7Ci0gICAgQVNTRVJUKHN0b3JhZ2VTaXplKTsKKyAgICBBU1NFUlQoYnV0dGVy
Zmx5KTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUlu
Qnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAg
ICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7
Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9m
U3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3
QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
Y3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJv
cGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJv
cGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBw
cmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkg
eworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMg
PSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBj
YXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhl
cndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2
aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsg
YW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50
VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwog
ICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAg
ICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0
b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0g
ZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUg
LSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5k
ZXhpbmdIZWFkZXIpKSB7CisgICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5jb3B5SGVhZGVyRnJvbSgqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAg
ICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJr
IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE4Miw5IEBAIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAg
ICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2Us
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9i
amVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZs
eSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzIwMiw5IEBAIHZvaWQgSlNG
aW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkK
LSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3Jh
Z2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9i
amVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZs
eSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0g
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7
CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBz
dG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAgKzIyMSw1MCBAQCBVU3RyaW5nIEpTT2JqZWN0OjpjbGFz
c05hbWUoY29uc3QgSlNPYmplCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAotYm9v
bCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiti
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgLy8g
TkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBz
dG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRv
IG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCisg
ICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIAorICAgIGlm
IChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNl
IEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0
b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5v
dEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiAvLyBFQ01BIDguNi4yLjIKQEAgLTE3NCw2ICsyNzQsMTMgQEAgdm9pZCBKU09i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAg
QVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpo
ZWFwKHRoaXNPYmplY3QpKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRo
ZSBwcm90b3R5cGUgY2hhaW4KICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszNDIs
MTQ2IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koKTsKKyAgICAKKyAgICBpZiAoVU5MSUtFTFkocHJvcGVydHlOYW1lID49IE1BWF9B
UlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cp
OworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2Ug
QXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5
TmFtZV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAg
ICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMg
bmVjZXNzYXJ5LgorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgeworICAgICAg
ICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3Qt
PmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKworICAg
IGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERh
dGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gc3RvcmFn
ZTsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwg
c28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAgIC8vIGFuZCBhdHRyaWJ1
dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisgICAgICAgIGlmICh2YWx1
ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7
CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9i
YWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRl
eGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NF
UlRfVU5VU0VEKG9sZFR5cGUsIG9sZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJh
eSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5
UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKTsKKyAgICAvLyBGSVhNRTogd2hhdCBpZiB0aGUgb2JqZWN0IGlzIG5v
dCBleHRlbnNpYmxlPyBXZSBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIHNwZWNpYWwgdGhl
bi4KKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0
b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJU
KCFyZXN1bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkp
OworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICBy
ZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2Jh
bERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXk6CisgICAgY2FzZSBOb25BcnJheTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7
CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworICAgICAgICByZXR1cm4gc3RvcmFnZTsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAt
MzA0LDYgKzU0OCwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4
CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVj
dC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0
YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTgwLDQ1IEBAIGJvb2wg
SlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2Fz
dDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29u
c3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
Ci1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOwor
ICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewor
ICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewor
ICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXNPYmplY3Qt
PmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzQ4
LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVh
cnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcg
UHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisg
ICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVk
IGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVh
bnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0
Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25B
cnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
c3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5
czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShp
dC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtl
eXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+
Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpA
QCAtNTE1LDggKzg0Myw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGds
b2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhp
cyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAg
ICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNU
cmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzkwMCwx
MSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9j
YXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAo
SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgp
KS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0
ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBp
ZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2Fj
aGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24o
bG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlz
LCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xv
dC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiAr
OTMwLDUzMyBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAg
cmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhl
Y1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsK
LSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRv
ci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAm
IH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7
CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdl
dHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9s
ZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAw
OworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBz
ZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGRE
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikK
KyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0
ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFw
LT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xk
RGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAt
PmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGRE
ZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24p
Cit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNwYXJz
ZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBh
IHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0
aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1p
c3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBp
ZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBv
dmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUu
IGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBu
ZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwor
ICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRy
eUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVu
c2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0
eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxl
IGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5l
ZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRo
YXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElm
IElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0
cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQ
IG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVd
XSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBk
ZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBE
ZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3Jl
YXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQu
Yi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28s
IGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBv
YmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25m
aWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8g
RGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2Vu
dCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAv
LyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRy
dWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRy
eUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7
CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhl
ZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAg
ICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4
ICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0
cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4g
dHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0
aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUg
Y29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNh
bWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50
OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0Vt
cHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewor
ICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
RGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3
LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2Vu
dCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0
aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRv
ci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0
b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJp
Y0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMg
cmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewor
ICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0Rh
dGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAg
aWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVu
dC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3Ig
YW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElz
RGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0
eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0
eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBv
ZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxl
XV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUg
cHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZh
bHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFt
ZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9w
ZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhl
IGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
CisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3Bl
cnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNl
IGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3Io
Y3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgor
ICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3Vy
cmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJs
ZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmku
IFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFu
ZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAg
ICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUg
W1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tW
YWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVh
ZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBl
bHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFu
eSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVz
ZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVs
c2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRv
cihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1Nl
dF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwg
Y3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRl
cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0
aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUg
W1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0
XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5n
ZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1
cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50
LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5
IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJ
bmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsK
KyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAg
dGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7Cit9CiAKLSAgICAvLyBJdCdz
IGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNp
bmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCitT
cGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0
ID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwID0gcmVzdWx0OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmlu
YWxpemVBcnJheURhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6
OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1
cm47CisgICAgZGVsZXRlIHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwID0gMDsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8g
aSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1
cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNT
RVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3Rv
cmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAg
UHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRo
aXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9m
IHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0
ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXpl
LCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZp
cnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2Ug
bWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlz
IG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwg
YW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgp
KTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRM
ZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8g
c3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3Iu
CisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEs
IGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBz
aW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVj
dG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
c2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2lu
ZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBt
YXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8g
V2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNl
dCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4K
KyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZl
Y3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5w
dXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5n
dGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJh
eTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9y
LCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
dmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8v
IFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQor
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJy
YXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NF
UlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7
CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlT
dG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkp
OworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXA7CisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRs
eSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8v
IElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBk
aWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VS
VChpc0V4dGVuc2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8g
Z3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJl
cmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQg
c3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxs
b2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFw
LT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisK
KyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAv
LyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgor
ICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBp
ICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAg
Ly8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwg
d2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBz
cGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3Bh
cnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJy
YXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVt
VmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFw
IGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4K
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBp
ZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9J
TkRFWCk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAg
ICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
aSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAw
LCAwKSk7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBp
ICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJu
IG5ld1Byb3BlcnR5U3RvcmFnZTsKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBj
dXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNp
cmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWduZWQg
aW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBzdGQ6Om1pbihj
dXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5p
dExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBl
bHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
c3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5jcmVh
c2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgorICAg
ICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEu
NSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJm
bG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRM
ZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VSVChp
bmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0g
c3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1
cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
K30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3Ro
KHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOwor
ICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKK30KKworYm9v
bCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhl
IGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRv
ZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0
aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5
IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4Qmlh
cyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5n
dGgpOworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChu
ZXdMZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHku
IEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFp
bmRleEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+
YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsK
KyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90
IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92
ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1p
bihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxl
bmd0aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHko
KS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIHN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9y
TGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVu
Z3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5l
d0luZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVu
Y3lDaGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NF
UlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAg
ICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFs
dWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRv
IGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1W
YWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09
IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChu
dW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBB
U1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYg
KG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
aXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkp
OworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAg
ICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qg
d2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9y
YWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGlt
cG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0
aGUgcHJvcGVydHkKKyAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5
IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNp
emUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0NjQs
NDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGlu
dmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwg
YXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAw
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAg
ICAgICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFBy
b3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU3NCwyNiBA
QCBwcml2YXRlOgogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewog
ICAgIC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3Bl
cnR5LgogICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byBy
ZW1vdmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBh
cnRpY3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24n
dCBhbGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVy
dGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtl
IHRoaXMgd29yay4KICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisg
ICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQg
b24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkp
IHsKICAgICAgICAgLy8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAg
aWYgKCFvYmplY3QtPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxl
KCkpIHsKICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBvbGREZXNjcmlwdG9yOwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0
b3IpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsK
ICAgICB9CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTYxOSw4
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdl
bmVyaWMgZGVzY3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4g
ZXhpc3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkg
ewotICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRv
cihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAg
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3Vy
cmVudCksIGN1cnJlbnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTc2Miw4ICsxNjMyLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplYwogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMs
IG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBh
biBleGlzdGluZyBwcm9wZXJ0eQpAQCAtNzg0LDggKzE2NTQsOCBAQCBib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQu
YXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBw
dXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7Cisg
ICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3Nv
ciBmdW5jdGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsx
NjcyLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNz
b3IgPSBvYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7
CisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3Ip
OwpAQCAtODEyLDEyICsxNjgyLDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWMKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1
dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUp
OworICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiAgICAgdW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlk
aW5nQ3VycmVudChjdXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNz
b3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdz
IGFuIGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgor
ICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5k
ZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNj
ZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJv
cGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFu
ZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQg
aXMgZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBl
LmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUu
aWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhv
ZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBh
cyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAg
Ly8gZi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4
ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29s
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVk
IGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
cywgZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhy
b3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewog
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdl
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlz
aW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMSBAQAogI2RlZmluZSBKU09iamVjdF9oCiAK
ICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2lu
Y2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUg
IkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlT
bG90LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgotI2luY2x1ZGUgIlN0b3JhZ2VCYXJyaWVy
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDYg
KzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBY2Nlc3NvciAgICAgPSAxIDw8IDUs
ICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKICAgICB9OwogCisgICAgQ09NUElMRV9B
U1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJ
bnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoUmVhZE9ubHkgPCBGaXJzdElu
dGVybmFsQXR0cmlidXRlLCBSZWFkT25seV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRl
KTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RW51bSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUs
IERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVf
QVNTRVJUKERvbnREZWxldGUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RGVsZXRlX2lz
X2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEZ1bmN0
aW9uIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRnVuY3Rpb25faXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoQWNjZXNzb3IgPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KwogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CiAKICAgICBjbGFzcyBKU09iamVjdCA6IHB1Ymxp
YyBKU0NlbGwgewpAQCAtOTYsNiArMTA3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJs
aWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgICAgIAorICAgICAgICBzdGF0
aWMgdm9pZCBmaW5hbGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpOwogCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIApAQCAtMTIwLDggKzEzMywxNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Ym9vbCBhbGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0ZSopOwogCisgICAgICAgIHVuc2lnbmVkIGdl
dEFycmF5TGVuZ3RoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdl
dFZlY3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CisgICAgICAgIC8v
ICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAorICAgICAgICAvLyAgLSBh
Y2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMg
YSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZp
Z3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cgPSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2FuU2V0SW5k
ZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleFF1aWNr
bHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFs
dWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNh
blNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
aSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAo
IXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkg
KyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxp
emVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAg
ICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAg
ICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZl
Y3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBk
byBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRp
ZXMuCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRl
eCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNT
RVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9w
ZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KHN0b3JhZ2UpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdM
ZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMg
aW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNr
ZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90
b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyOSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5j
ZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVy
dHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNv
bnN0OwpAQCAtMjAzLDggKzM4NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBt
X291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAg
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9Cisg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBj
b25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldElu
SW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2Nh
dGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2OSwxNyArNDU1LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQg
cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAg
dm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwg
U3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdT
aXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5
KiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxs
IHRoaXMuCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVT
dG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0
cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdl
SWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCog
YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVu
RGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxE
YXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0NzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0
dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRk
cmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19p
bmZvOwogCkBAIC0zMTYsMTQgKzUwNyw3NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAv
LyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBi
ZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50
IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRv
cklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVt
b3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RW
aXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2
b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3Jh
Z2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2Jq
ZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4g
VGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlT
dG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVy
IG9yIG5vdCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMg
YXJyYXkgc3RvcmFnZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8o
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBt
b2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5
b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0
aGUKKyAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3Jh
Z2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFy
cmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNl
cHRpb24pOworCisgICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5
Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0
ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3Rl
bmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5k
aWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzU5MCwzNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3Ry
aW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFy
cmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAg
ICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAg
ICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclBy
b3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAg
ICAgIGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIGFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0
b3JhZ2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3
VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJl
bnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXRO
ZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFn
ZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkq
IG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZh
dGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCAr
NjQzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1
dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzI3LDYgQEAgaW5s
aW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNp
emVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxp
bmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBz
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5
MSwxOCArNzU3LDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24K
ICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNU
eXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAg
ICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFTU0VSVCghYnV0dGVyZmx5
ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0cnVjdHVyZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7Cit9CisKK2lubGlu
ZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAK
IGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MDUsOSBAQCBpbmxpbmUgSlNPYmplY3Qq
IGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2Vs
bCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5
KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NTUsMTcgQEAgaW5saW5lIEpTT2JqZWN0
KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAg
ICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAg
ICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5p
c0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMs
IGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3duUHJvcGVy
dHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBtYXkgc2Vl
bSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmly
dHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NTEsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUu
aXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5ODAsMTEg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAo
KG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZM
aW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0
dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwpAQCAtNzMwLDEzICs5OTgsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3Vy
cmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVydHlTdG9y
YWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5ld1N0b3Jh
Z2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
LSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1
Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBz
dHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2
YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdp
dGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAv
LyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAzLDkgKzEw
NzEsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBn
cm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwgbmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVyZmx5KGds
b2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTgzOSwx
MSArMTEwNywxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsCiBp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0
ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9m
TGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUo
KS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0
b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUo
KS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgc2V0QnV0
dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAgIHB1dERp
cmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1LDYgKzEy
MDMsMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAogICAgIHJl
dHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8gVGhpcyBp
cyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0IGEgbG9h
ZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZzZXRzOiBh
IHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0MiwxNCAr
MTIxNSwxNCBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVyOjp3aXRoQ2FsCiBpbmxp
bmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJl
dHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpOworICAgIHJldHVy
biBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KG9mZnNldCk7CiB9CiAKIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9m
UHJvcGVydHlTdG9yYWdlKCk7CiAgICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CkBAIC05NTcsNyArMTIzMCw3IEBAIGlubGlu
ZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0
dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJv
bFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihv
YmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29s
IGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5j
bHVkZSAiTGV4ZXIuaCIKQEAgLTY0MCw3ICs2NDIsMTMgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2Vy
PENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEb1Bh
cnNlT2JqZWN0RW5kRXhwcmVzc2lvbjoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBh
c09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpLT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRh
KCksIGlkZW50aWZpZXJTdGFjay5sYXN0KCksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSk7CisgICAgICAg
ICAgICAgICAgUHJvcGVydHlOYW1lIGlkZW50ID0gaWRlbnRpZmllclN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpID0gaWRlbnQuYXNJbmRleCgpOworICAgICAgICAgICAg
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGksIGxhc3RWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4
ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWRl
bnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5j
dXJyZW50VG9rZW4oKS50eXBlID09IFRva0NvbW1hKQogICAgICAgICAgICAgICAgICAgICBnb3Rv
IGRvUGFyc2VPYmplY3RTdGFydEV4cHJlc3Npb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlPZmZzZXQuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2
YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZz
ZXQpKTsKLSAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RP
dXRPZkxpbmVPZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBv
ZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFByb3BlcnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNs
dWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJ
KHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgY29uc3Qg
Q2xhc3NJbmZvIFJlZ0V4cE1hdGNoZXNBcnJheTo6c19pbgogCiB2b2lkIFJlZ0V4cE1hdGNoZXNB
cnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1fcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiB9CiAKIHZvaWQg
UmVnRXhwTWF0Y2hlc0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBNYXRjaGVz
QXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwTWF0
Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVz
dWx0KQotICAgICAgICAgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkpCisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRj
aFJlc3VsdCByZXN1bHQpCisgICAgICAgICAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5KQogICAgICAg
ICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5v
bmUpCiAgICAgICAgIHsKQEAgLTQ2LDcgKzQ2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0
Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNo
ZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xv
YmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgICAgICBSZWdF
eHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhw
TWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFs
RGF0YSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdF
eHAsIHJlc3VsdCk7CiAgICAgICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKQEAgLTExNCwxMSArMTE2LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQogewogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAg
IEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVjdF9oCisKKyNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2Vw
dGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJz
ZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1
ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7CisK
KyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICBKU1ZhbHVl
IGdldChFeGVjU3RhdGUqLCBKU09iamVjdCopIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5
U2xvdCYpIGNvbnN0OworICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0Owor
ICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCisgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKK307CisKK2NsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgeworICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisK
KyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9k
ZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQg
QWRkUmVzdWx0OworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCisgICAgICAgIDogbV9mbGFn
cyhOb3JtYWwpCisgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCisgICAgeworICAgIH0K
KworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFy
c2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9
IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAg
Ym9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYg
TGVuZ3RoSXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHko
KQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwg
TGVuZ3RoSXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBw
dXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7CisgICAgQWRkUmVzdWx0IGFkZChKU09iamVjdCosIHVuc2lnbmVkKTsKKyAg
ICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KKyAg
ICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJl
c3VsdCBvZiB0aGUgZmluZCkuCisgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAu
cmVtb3ZlKGl0KTsgfQorICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3Zl
KGkpOyB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBtYXAuCisgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQo
KTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9tYXAuY29u
dGFpbnMoaSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUo
KTsgfQorICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlvbi4KKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KKyAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorCitw
cml2YXRlOgorICAgIE1hcCBtX21hcDsKKyAgICBGbGFncyBtX2ZsYWdzOworICAgIHNpemVfdCBt
X3JlcG9ydGVkQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2
MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19o
CisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUg
IlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFy
c2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2Jq
ZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5Owor
ICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNp
dHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2Fw
YWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNp
dHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZv
aWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFy
cmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkm
IGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2Vw
YXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4K
KyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHks
IGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhl
IHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1v
dmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOworICAgIEFTU0VSVChhY2Nl
c3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJT
ZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNldHRlcikgeworICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBz
ZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOworICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodmFsdWUpOworICAg
IGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKK30K
KworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAg
IFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAg
ICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0
byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMg
aXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJs
ZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBh
Z2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUo
KSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0
dHJpYnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50
cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1
ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNl
dHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Qu
c2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdl
dHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0
KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNW
YWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJy
YXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NF
UlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRl
clNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBj
YWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJz
ZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0
cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFy
c2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSBt
X21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZp
dC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9o
Ci0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgot
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFz
cyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNo
ZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJh
cnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAg
ICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChK
U0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7
Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAg
ICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9
Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1f
c3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4g
b3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6
ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlT
dG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3Rv
cmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkg
eyByZXR1cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI2Nzk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUu
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVy
ZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25z
dCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
c3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAg
ICAsIG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGds
b2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0
Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90
eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNv
bnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5
Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERh
dGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1f
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsx
OTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSog
cHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVT
dHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQor
ICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9y
ZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykK
ICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAg
LTUwMiw2ICs1MDUsMzcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAg
aWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJh
bnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAg
QVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBh
dHRyaWJ1dGVzOworICAgIHRyYW5zaXRpb24tPm1faW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBl
OworICAgIAorICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgeworICAgICAgICBp
ZiAoc3RydWN0dXJlLT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSkKKyAgICAgICAgICAgIHRyYW5z
aXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXpl
KCkgKyAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0
eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUucmVsZWFzZSgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJldmlvdXMpCisgICAgICAgICAgICB0cmFu
c2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgIH0KKyAg
ICAKKyAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZChnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uKTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsKK30KKwogLy8gSW4gZnV0dXJlIHdlIG1h
eSB3YW50IHRvIGNhY2hlIHRoaXMgcHJvcGVydHkuCiBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFN0cnVjdHVyZV9oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNs
dWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5
cGUuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCkBAIC02OCw3ICs2OSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4
aW5nVHlwZSA9IDApOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKQEAgLTEwMCw2ICsxMDEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CiAKICAgICAg
ICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmKTsKICAgICAgICAgYm9vbCBpc0Zyb3plbihK
U0dsb2JhbERhdGEmKTsKQEAgLTE0MCw2ICsxNDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09ICZzX2luZm8pOyByZXR1cm4gbV90eXBlSW5mbzsgfQogICAgICAgICBi
b29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAK
KyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXhpbmdUeXBlICYgQWxsQXJyYXlUeXBlczsgfQorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlOyB9
CiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBt
X2dsb2JhbE9iamVjdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpAQCAt
MzM0LDYgKzMzOCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZSwgbV9pbmRleGluZ1R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKQEAgLTM2Myw3ICsz
NzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5
cGUgPSAwKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0dXJlKik7CiAKQEAgLTQxNiw2ICs0MjUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7CiAKICAgICAgICAgVHlwZUluZm8gbV90eXBl
SW5mbzsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwogICAgICAgICAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fcHJvdG90eXBlOwpAQCAtNDQ3LDcgKzQ1Nyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cyA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvIDogMTsKICAgICAgICAgYm9vbCBtX2hhc05vbkVudW1lcmFibGVQcm9w
ZXJ0aWVzIDogMTsKLSAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDc7
CisgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiAyMjsKICAgICAgICAg
dW5zaWduZWQgbV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgOiAyOwogICAgICAgICB1bnNp
Z25lZCBtX3ByZXZlbnRFeHRlbnNpb25zIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9kaWRUcmFu
c2l0aW9uIDogMTsKQEAgLTQ2NSwxMSArNDc1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCisgICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CiAgICAgICAg
IEFTU0VSVChjbGFzc0luZm8pOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0
dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJ
bmZvKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdU
eXBlKTsKICAgICAgICAgc3RydWN0dXJlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gKICNkZWZpbmUgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlX2gKIAorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIlVTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgpAQCAtMzcsNiArMzgsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFz
cyBTdHJ1Y3R1cmU7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmli
dXRlID0gMSA8PCA2OyAvLyBVc2UgZm9yIHRyYW5zaXRpb25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBk
byB3aXRoIHByb3BlcnR5IGFkZGl0aW9ucy4KKworLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1
c2VkIHRvIGluZGljYXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCisv
LyBJZiBhbnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5
IHNob3VsZCBiZSAwLgorZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRl
QXJyYXlTdG9yYWdlCit9OworCitpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHJldHVybiB0cmFuc2l0aW9uICsgRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZTsKK30KKworaW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGlu
Z1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uKQoreworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
b2xkVHlwZTsKKyAgICB9Cit9CisKIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAg
ICAgc3RhdGljIGNvbnN0IGludHB0cl90IFVzaW5nU2luZ2xlU2xvdEZsYWcgPSAxOwogCkBAIC00
NCw3ICs2OSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgICAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxSZWZQdHI8U3RyaW5nSW1wbD4sIHVuc2lnbmVkPiBLZXk7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEtleSYgcCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHAuZmlyc3QtPmV4aXN0aW5nSGFzaCgpOworICAgICAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gcC5zZWNvbmQ7CisgICAgICAgICAgICBpZiAocC5maXJzdCkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161416</attachid>
            <date>2012-08-30 00:48:16 -0700</date>
            <delta_ts>2012-08-30 17:09:54 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>butterflies_patch_28.diff</filename>
            <type>text/plain</type>
            <size>405774</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MTA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwNyBA
QAorMjAxMi0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTT2Jq
ZWN0UmVmLmNwcDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlNb2RlRnJvbVN0cnVjdHVyZSk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGph
Y2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAg
ICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmZyb21PYnNl
cnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAgICAg
KEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9k
ZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFBy
b3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgor
ICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAo
SlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQ
dXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5zaXRpb25TdHVi
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFtZSk6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAgICAgICAoSlND
OjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pv
aW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5o
OgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFn
ZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmNv
cHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppblNwYXJzZU1vZGUp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICogcnVu
dGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJh
c2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omlu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAgICAgICAgKiBy
dW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVh
ZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hl
YWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBdXhXb3Jk
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5KToKKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eSk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6
CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9K
U0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlv
bik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0
ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBvcCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlm
dENvdW50KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlNDOjpK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21wYWN0
Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJyYXkpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojppc0xlbmd0aFdyaXRhYmxl
KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OmJvdW5kRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNv
bnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZmlsbEdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmRl
eGVkRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluYWxpemVBcnJheURhdGEpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb21wbGV0ZUluaXRp
YWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNlSW5kZXhpbmdNb2Rl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om9mZnNl
dEZvckxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nU2hvdWxkQmVT
cGFyc2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFn
ZU9yWmVybyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKEpTQzo6SlNOb25GaW5hbE9iamVjdDo6SlNOb25GaW5hbE9iamVjdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6Om9mZnNldEluQnV0dGVyZmx5
KToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6aW5kZXhSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0
aXZlVG9CYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1R5cGVJbmZvLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChK
U0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpS
ZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6UmVnRXhw
TWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5o
OgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0
Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChS
ZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVqZWN0Lmg6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoU3BhcnNl
QXJyYXlFbnRyeSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5RW50cnk6OlNwYXJzZUFycmF5
RW50cnkpOgorICAgICAgICAoU3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNw
YXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnJlbW92ZSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZvdW5kKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmJlZ2luKToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToKKyAgICAgICAgKiBydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJy
YXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6
Z2V0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6
CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppbmRleGlu
Z1R5cGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6Om5ld0luZGV4aW5nVHlw
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6aGFzaCk6
CisgICAgICAgICogdGVzdHMvbW96aWxsYS9lY21hXzMvUmVnRXhwL3JlZ3Jlc3MtMjIwMzY3LTAw
Mi5qczoKKwogMjAxMi0wOC0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSB1c2Ugb2YgQ2xhc3NJbmZvIGZyb20gY29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMgYW5kIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVzaW5nIFBhcmVudDo6
bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5j
ZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
UGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4IHwgSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFVTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
Kik7CkBAIC0xNzgsNiArMTc4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZh
dWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTg3LDcg
KzE4OCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG8pOwogCi0gICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMiBAQCBib29sIEpTQ2FsbGJh
Y2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+
Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdChjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIHNsb3QpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogSlNWYWx1ZSBK
U0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKICAg
ICBjb25zdCBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTQ2Fs
bGJhY2tPYmplY3QqPihvYmplY3QpOwpAQCAtNDQ5LDcgKzQ1NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4K
LXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
Q2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwogICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9S
ZWYoZXhlYyk7CkBAIC00ODQsNyArNDkwLDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blBybwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFBhcmVudDo6Z2V0T3du
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAg
ICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAogI2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJpdmF0ZS5o
IgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJv
ckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5
ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi87IH07CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAv
KiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdG
Mzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBB
cnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4RTM4MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTkx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVN
ZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0Yz
OUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkwMTVFRDhF
MzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVq
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNw
YXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZC
N0YzOUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5
MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJDMEFF
NzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8q
IERGR0V4aXRQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8q
IERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0
NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmln
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NTY0LDcgKzU3NSw2IEBACiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxl
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4
Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIxM0IyOEFB
QjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9OwotCQlBNzgxRTM1OTE0MTk3MEM3
MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFy
cmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYg
LyogQVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3lu
dGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJ
QTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwpAQCAtOTQ1LDYgKzk1
NSwxNyBAQAogCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3
QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJy
YXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUNv
bnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhBMTVFRDhF
MzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdG
MzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5n
SGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhFMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGlu
Z1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAv
KiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJv
cGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkxMTVF
RDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkyMTVFRDhF
MzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rl
T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzQxLDcgKzEzNjIsNiBA
QAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJ
bnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZh
Y2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4
MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWZQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAv
KiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVB
MTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyMCw2ICsy
MDQwLDE3IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkI3RjM4OTE1RUQ4RTM4
MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovLAorCQkJCTBGQjdGMzhBMTVFRDhFMzgw
MEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3
QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyog
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMEZCN0YzOEYxNUVEOEUzODAw
RjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdC
MiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIg
LyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFy
cmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNl
QXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAy
MUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4
MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIwRTIwM0VGODAwQjlBNjRE
IC8qIEFyZ0xpc3QuaCAqLywKQEAgLTIyMDQsNyArMjIzNSw2IEBACiAJCQkJN0UyQzZDOTgwRDMx
QzZCNjAwMkQ0NEUyIC8qIFNjb3BlQ2hhaW5NYXJrLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJC
NTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAw
Nzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAotCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5
MCAvKiBTdG9yYWdlQmFycmllci5oICovLAogCQkJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAv
KiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8sCiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQy
NUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAw
QjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTI3NjAsNyArMjc5MCw2IEBA
CiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQw
Mjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5
MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJp
bmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjkwOCw2ICsyOTM3LDE3IEBACiAJCQkJMEY2
Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2Mzk0NzgxNURDRTM0QjAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RUM4QzdBMTVFNkU5NTAwMDUxRTlBOSAvKiBPcGNvZGVE
ZWZpbml0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0Iy
IC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhF
NDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3
MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdG
Mzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVF
RDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
QjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
QjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAorLy8gVGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJlcHJl
c2VudHMgYW4gSW5kZXhpbmdUeXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJlIDE3
IGluZGV4aW5nIHR5cGVzICgwIHRvIDE2LCBpbmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1vcmUg
dGhhbiBlbm91Z2guCiB0eXBlZGVmIHVuc2lnbmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBJc05vdEFycmF5ID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pTQXJy
YXkgID0gMjsKKyNkZWZpbmUgYXNBcnJheU1vZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odHlwZSkpCiAKIGlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZyb21T
dHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJheTsK
LSAgICByZXR1cm4gSXNOb3RBcnJheTsKKyAgICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQcm9m
aWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3MCw3ICsxNjcwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFt
ZXMtPnVuZGVyc2NvcmVQcm90byk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKAorICAgICAg
ICBwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
bworICAgICAgICAmJiBQcm9wZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZl
IG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRzCiAgICAgICAg
ICAgICAvLyBjYXNlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKQEAgLTk1NiwxMCArOTU1LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAg
ICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBJ
Tl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQy
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw3ICsxMzg1LDcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJl
KTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTQwNCw4ICsxNDAz
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBUaGlzIGRv
ZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0
byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0
aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9IDMgfTsKICAg
ICAKKyAgICBBZGphY2VuY3lMaXN0KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5k
IGtpbmQpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQo
QXJyYXlNb2RlcyBtb2RlCiAgICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAg
ICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAg
IHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNB
cnJheTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgor
ICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMg
OiBBcnJheTo6QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7Cisg
ICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBX
ZSBrbm93IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0
aG91Z2ggdGhlcmUgaXMgbm8KICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHBy
b2ZpbGUsIHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtMTIw
LDEwICsxMjQsMTQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgog
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRp
b24odmFsdWUubV90eXBlKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsK
KyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworCisgICAgY2FzZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5
U3RvcmFnZSkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlv
bih2YWx1ZS5tX3R5cGUpOwpAQCAtMTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hhciogbW9kZVRv
U3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRz
IjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlT
dG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAg
ICAgcmV0dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFn
ZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
IlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBG
b3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUg
dGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywK
ICAgICBTdHJpbmcsCi0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAg
QXJyYXlTdG9yYWdlLAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0
aEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAg
ICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAg
ICAgSW50MTZBcnJheSwKQEAgLTYxLDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9OwogfSAvLyBu
YW1lc3BhY2UgQXJyYXkKIAorLy8gSGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVudHMuIEZvciBl
eGFtcGxlLCBzYXlpbmcgImNhc2UgQWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8gaXMgdGhlIHNh
bWUgYXMgaGF2aW5nIG11bHRpcGxlIGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9mZiBhbGwgb2Yg
dGhlIG1vZGVzIHRoYXQKKy8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4K
KyNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZTogICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01P
REVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdF
X01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6Ok1vZGUgZnJv
bU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBBcnJheTo6TW9k
ZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAtNzQsOCArMTAx
LDE3IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9v
bCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFy
cmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNB
cnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTUwLDYgQEAgaW5saW5lIEFy
cmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0KIAotaW5saW5lIGJvb2wg
bW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUgbGVmdCwgQXJyYXk6Ok1v
ZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAgIGxlZnQgPT0gQXJyYXk6
OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwot
ICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICByaWdodCA9PSBBcnJheTo6
SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwot
ICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0FycmF5KQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSBib29sIG1v
ZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CkBA
IC0xNDcsNyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2Rl
IG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCiB7
Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Cisg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzQsNyArMTY3NCw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZz
ZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKLSAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwor
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7
CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAg
ICAgICAgIEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNp
emUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMDksNyArMjMwOSw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFn
ZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3Jh
cGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5
T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHByb3Bl
cnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpAQCAtMjM2MCwxMyArMjM2
MCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1dHRl
cmZseSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0
dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YmFzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRC
dXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25E
YXRhKSwgYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBpZiAobm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlT
dG9yYWdlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmlu
ZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
MSw4ICszODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRHZW5l
cmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKLSAgICAgICAgTm9kZSBnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgTm9k
ZSBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOworICAgICAgICBpZiAobW9kZUlzSlNBcnJheShh
cnJheU1vZGUpKQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUo
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBhcnJheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgPSBOb2RlKEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CiAgICAgICAgIGlm
IChzaG91bGRHZW5lcmF0ZSkKICAgICAgICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Uu
cmVmKCk7CiAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXgg
PSBtX2dyYXBoLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDczLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNh
c2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4g
bm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHN0cnVjdCBPcEluZm8gewogc3Ry
dWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAgICAgCisgICAgTm9k
ZSgpIHsgfQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxk
cmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQy
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IGNvZGVPcmln
aW4oY29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0
U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1h
Y3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhH
ZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oQ2hlY2tBcnJheSwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Us
IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRK
UykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKQEAgLTIy
NCwxNCArMjI1LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUK
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0g
ICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
YXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICBpZiAoYXJyYXktPmNhblNldEluZGV4KGluZGV4
KSkgewotICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1
ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2ts
eShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIHZh
bHVlLCBzdHJpY3QpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTMzOSwxMSArMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
Z2V0QnlWYWwoRXgKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhl
Yyk7CiAgICAgCi0gICAgLy8gRklYTUU6IHRoZSBKSVQgdXNlZCB0byBoYW5kbGUgdGhlc2UgaW4g
Y29tcGlsZWQgY29kZSEKLSAgICBpZiAoaXNKU0FycmF5KGJhc2UpICYmIGFzQXJyYXkoYmFzZSkt
PmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0Fy
cmF5KGJhc2UpLT5nZXRJbmRleChpbmRleCkpOworICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAgICAgaWYg
KG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICB9CiAK
LSAgICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byByZWxpbmsgdGhpcyB0byBhbiBvcHRp
bWl6ZWQgZm9ybSEKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlKSAmJiBhc1N0cmluZyhiYXNlKS0+
Y2FuR2V0SW5kZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3Ry
aW5nKGJhc2UpLT5nZXRJbmRleChleGVjLCBpbmRleCkpOwogCkBAIC01MzIsMTUgKzUzNCwxNSBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNv
ZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNB
cnJheSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0
aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsK
LSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2Fu
U2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5w
dXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTQ5LDE1ICs1NTEs
MTUgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBh
cnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAg
ICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhp
c3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkp
OwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+
Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgp
LT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEyOTQsMjAg
KzEyOTYsMjkgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdAogCiBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aElu
aXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5ICogc2l6ZW9mKEpTVmFsdWUpLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4o
cmVzdWx0KSArIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSArIDEpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxz
ZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3Vs
dDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwg
JnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1NpemU7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBuZXdTaXplLCBmYWxz
ZSwgMCkpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0
ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0
LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVz
dWx0KTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdy
b3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTQs
NyArOTQsNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyCiB0eXBl
ZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09w
ZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2Rl
ZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
QVpKKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdf
T1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMDUsOCArMTA1LDEwIEBAIHR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgq
Vl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVyko
V2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwordHlw
ZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUq
LCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7
CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGlt
cGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OwpAQCAtMTM4LDggKzE0MCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVS
TkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVj
U3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKQEAgLTE4NSw2ICsxODcsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNP
YmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2Vk
IHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3
aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0
IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTksMTIg
QEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgICAgICBzdHVi
Sml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIp
OwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2Jq
ZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0
dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1
bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsK
LSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BS
KTsKICNlbmRpZgogICAgIH0KIApAQCAtMjUzLDEwICsyNTMsMTAgQEAgc3RhdGljIGJvb2wgdHJ5
Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICAgICAgCi0gICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhB
cnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbHNl
CkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVj
U3RhdAogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02ODEsMTcgKzY4MSwxNyBAQCBzdGF0
aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAg
IApAQCAtODMwLDcgKzgzMCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigK
ICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBv
bGRTaXplKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKICAg
ICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3It
Pm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04NDQsNyArODQ0LDcgQEAgc3RhdGljIHZvaWQgZW1p
dFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIHNjcmF0
Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBAIC04NTQsOCArODU0LDggQEAgc3Rh
dGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFz
Y3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0
LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODYzLDkgKzg2Myw5IEBAIHN0YXRpYyB2b2lk
IGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
OworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHko
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAg
ICAgICAgICAgIApAQCAtMTAyMCw2ICsxMDIwLDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0
QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVl
ZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5n
IHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2Vs
bCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVD
aGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAg
c3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAg
IG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxl
cjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21w
YWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCks
IHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFs
dWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKIAogICAg
IEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0K
LSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJX
aXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKQEAgLTI0MzIsMjMgKzI0MzIsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczogewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJl
YWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAg
ICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjUzOCw2ICsyNTMyLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUgYmFz
ZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3
ZSBoYXZlIHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28gaXQn
cyBsaWtlbHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3YXkuIExpa2VseQorICAgICAgICAvLyBu
byBoYXJtIGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAgICAgICAgCkBAIC0yNTQ1LDggKzI1NDIsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAg
ICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywg
YWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtMjU3Myw4ICsyNTY5LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAg
aWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5
Qm91bmRzKTsKIAogICAgICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTI1ODcsOSArMjU4Myw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcikp
KTsKIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQg
YmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAogICAg
ICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjU5OCw3
ICsyNTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgICAgICBpZiAoYXJyYXlN
b2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjc2NywxNyArMjc2Mywx
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNl
dE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJl
ZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZm
ZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAg
ICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTI4MDMsMTggKzI3OTksMTggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVu
Z3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgp
KSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhH
UFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNs
b3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAg
ICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCiAgICAgICAg
IHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKQEAgLTM0MDIsMTQgKzMzOTgsMTQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzUyLDcgKzM3NDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYKICAgICAgICAgbV9qaXQubmVnMzIo
cmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXNvbHZl
SW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRl
eChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIsIChpbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpT
VmFsdWUpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMjgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5m
bzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0
ZXMgdGhlIGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAg
ICAgICAvLyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5P
Tl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3By
KCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpaZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAogICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxMjcsMTEgKzMx
MzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5n
SW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9y
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMyNjAsMTMg
KzMyNjQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2Ny
aXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJl
c3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwog
ICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAg
ICAgIApAQCAtMzM2Miw2ICszMzY1LDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3VsdC5n
cHIoKSwgYmFzZUdQUik7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMzM4MywxMyArMzQwMCwzMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BS
KSk7CiAgICAgICAgIAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkp
OworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAKICAgICBzdG9y
YWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKIHsK
KyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2
aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAg
ICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CisgICAg
QVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICBpZiAo
aGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCByZXN1
bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICAK
KyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpAQCAt
MzQwMiw5ICszNDM3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQ
cgogICAgICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKICAgICAgICAgCi0g
ICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlv
dXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAg
c2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAgIEFT
U0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIENvcGllZEFs
bG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zdG9y
YWdlQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMik7CkBAIC0zNDE1LDEzICszNDQ3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBtX2pp
dC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3Jh
dGNoR1BSMik7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBz
bG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwg
bmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjIg
PSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3JhdGNoCiAgICAgZm9yIChwdHJkaWZmX3Qg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zm
c2V0ICs9IHNpemVvZih2b2lkKikpIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNp
emVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsgc2l6
ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJ
bmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExNTYsNiArMTE1NiwxNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3Qp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c2l6ZSkpOwpAQCAtMTM2OCw3ICsxMzc4LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTE2NjYs
NyArMTY3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmcz
VGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09w
ZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcg
YXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMy
QklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0yMTQxLDcgKzIxNTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAgICAg
ICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIH0KIAogICAgIC8vIEl0IGlzIGFjY2VwdGFibGUg
dG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3UncmUg
ZmluZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAg
IGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAgICAgc3Rh
dGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7CiAKLSAgICBDaGVj
a2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwg
dm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVfdCwg
dm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9pZCoq
LCBzaXplX3QsIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lz
dGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3IsIHR5
cGVuYW1lIFN0cnVjdHVyZVR5cGU+IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1
Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKLSAg
ICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBSZWdpc3RlcklEIHJl
c3VsdCk7CisgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgcHRy
ZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCk7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVy
ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIHZv
aWQgZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQg
bGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwg
UmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyNiw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRl
c3RyCiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBBZGRy
ZXNzKHJlc3VsdCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogCiAgICAgLy8gaW5pdGlh
bGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyCi0gICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNz
KHJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBz
dHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00MzQs
NyArNDM0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQogICAg
IGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0cnVj
dHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2Nh
dGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVySUQgcmVzdWx0KQoraW5saW5lIHZv
aWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIHB0cmRpZmZfdCBv
ZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKIApA
QCAtNDQzLDM3ICs0NDMsMzIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0
b3JhZwogICAgIHN0b3JlUHRyKHJlc3VsdCwgJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
KTsKICAgICBuZWdQdHIocmVzdWx0KTsKICAgICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZhbGxv
Y2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVzdGVk
SW1tMzIoc2l6ZSksIHJlc3VsdCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0gb2Zm
c2V0RnJvbUJhc2UpLCByZXN1bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0
ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0
ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3Rv
cmFnZVB0cikKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3Ro
LCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gSlNBcnJheTo6c3RvcmFnZVNpemUo
aW5pdGlhbExlbmd0aCk7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5ndGgp
KTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3Vy
ZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcg
SlNBcnJheSBpbml0aWFsaXphdGlvbi4KLSAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5p
dGlhbFN0b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFn
ZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7
CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3RvcmFn
ZVB0cik7CiAKICAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBBcnJh
eVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0z
MihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgc3RvcmUz
MihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkp
OworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwg
QXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5l
d2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwg
QWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBzdG9y
ZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGluZGV4
IGJpYXMuCi0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxsUmVz
dWx0LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNldCgp
KSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3BhcnNl
VmFsdWVNYXBPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2
ZS4KKyAgICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0b3Jh
Z2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkp
KTsKICNlbmRpZgogICAgIH0KLQotICAgIC8vIFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xvdHMu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsrKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOwotI2VuZGlmCi0gICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY5LDcgKzE2NjksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNp
emUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkpIHsKKyAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKQEAgLTE2ODgsNyArMTY4OCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJy
YXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwg
d2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAg
Ly8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6
OnN0b3JhZ2VTaXplKGxlbmd0aCkpKQorICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVu
Z3RoKSkpKQogICAgICAgICByZXR1cm47CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3Qg
ZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NSw2ICsx
MDY1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVt
aXRMb2FkUGF5bG9hZChpdGVyLCByZWdUMSk7CiAgICAgCiAgICAgLy8gVGVzdCBiYXNlJ3Mgc3Ry
dWN0dXJlCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1
cmUpKSkpOwogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMCArMTE0LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAg
c3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihCYXNlSW5kZXgocmVn
VDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDApKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNl
dChSZWdpc3RlCiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFsKSB7
CiAgICAgICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVz
dGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2gpOwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CkBAIC0xNzQsNyArMTc0LDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBicmVh
a3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAg
ICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKQEAgLTIzOSwxMCAr
MjM5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAj
ZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5Ojpz
X2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwog
ICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjUyLDEwICsyNTIsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIGVtcHR5
LmxpbmsodGhpcyk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAg
IGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICBi
cmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgc3RvcmUzMihyZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1
bHQsIHRoaXMpOwogCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlk
SG90UGF0aChpbnQgYmFzZQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsKICAg
ICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJl
bCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBDb252
ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAg
ICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZFB0cldpdGhDb21wYWN0
QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZz
ZXQpLCByZWdUMCk7CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CkBAIC00NzAsNyArNDcw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERhdGFM
YWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCi0gICAgQ29udmVydGlibGVM
b2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7Cisg
ICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxl
TG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJ
ZCk7CkBAIC01MDgsOCArNTA4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQo
UmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKLSAg
ICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJ
bk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKKyAgICBzdG9yZVB0cih2
YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShj
YWNoZWRPZmZzZXQpKSk7CiB9CiAKIC8vIENvbXBpbGUgYSBsb2FkIGZyb20gYW4gb2JqZWN0J3Mg
cHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgYmFzZS4KQEAgLTUyMCw4ICs1MjAsOCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
c3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9m
ZnNldCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNp
emVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1bHQp
OwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjdCogYmFzZSwg
UmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKQEAgLTUzMSw4
ICs1MzEsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZPdXRP
ZkxpbmVTdG9yYWdlKCksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRyZXNz
KCksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJm
bHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQpA
QCAtNjU3LDExICs2NTcsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMywgbV9j
b2RlQmxvY2stPmdldE9yQWRkQXJyYXlQcm9maWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1cmVD
YXNlczEgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAgICBK
dW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZy
b20gdGhlIHN0b3JhZ2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZWdU
Mik7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoMCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdU
MiwgcmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJl
dmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTE2LDggKzE1MTYsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihKU09iamVjdCosIG9wX3B1dF9iCiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
ICAgICBKU09iamVjdCogYmFzZSA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEs
IG9sZFNpemUsIG5ld1NpemUpOwotICAgIGJhc2UtPnNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1Np
emUpOworICAgIGJhc2UtPnNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5ld1N0
cnVjdHVyZSk7CiAKICAgICByZXR1cm4gYmFzZTsKIH0KQEAgLTI0MzQsNyArMjQzNCw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0KKyAgICAKICAgICBpZiAoTElL
RUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKICAgICAg
ICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJv
cGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkg
ewogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjUyNywxMiArMjUyNywx
MiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAKICAgICBpZiAo
TElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vi
c2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewot
ICAgICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAg
ICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0Fy
cmF5LT5zZXRJbmRleCgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dChiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5
KGkpKQorICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxEYXRh
LCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJheTo6
cHV0QnlJbmRleChqc0FycmF5LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2UgaWYgKGlzTmFtZShzdWJz
Y3JpcHQpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Miw3ICs4ODIsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAgICBMTElOVF9DSEVD
S19FWENFUFRJT04oKTsKICAgICBMTElOVF9PUCgxKSA9IHJlc3VsdDsKLQorICAgIAogICAgIGlm
ICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGJhc2VWYWx1ZS5pc0NlbGwo
KQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTkwMSw3ICs5MDEsNyBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgICAgICAgICAgcGNb
NV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IGJp
dHdpc2VfY2FzdDx2b2lkKj4oJmxsaW50X29wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIHBj
WzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTYz
LDcgKzk2Myw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KQogICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
cGNbNl0udS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFp
bihleGVjKTsKQEAgLTk5MSw3ICs5OTEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSAr
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IGJpdHdpc2VfY2FzdDx2
b2lkKj4oJmxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcGNbNV0u
dS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xMDcwLDEyICsxMDcwLDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfYnlfdmEKICAgICAKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChp
c0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFz
QXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChp
KSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2YWx1
ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2Jq
ZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJ
bmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgZXhlYywgaSwgdmFsdWUs
IGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGV4
ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBMTElOVF9FTkQo
KTsKICAgICAgICAgfQogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChleGVjLCBpLCB2YWx1
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIxICs5NDEs
MjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVP
ZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcs
IHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0g
ICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwg
b2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcK
LSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICog
OFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3Jh
Z2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4
IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0
LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJp
YWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2Fk
KQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5s
aW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9y
YWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtv
YmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZz
ZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0Ojpt
X2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RB
bmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmpl
Y3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0s
IHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAg
IGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXpl
b2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0
YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEp
ICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc5
NCwyMCArNzk0LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlB
dFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2Jq
ZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3Bl
cnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBu
ZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZM
aW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRw
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0
QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1h
Y3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2Jq
ZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxp
bmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9m
TGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3Jh
Z2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNl
dEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgot
ICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVj
dDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNp
emVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRw
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9w
ZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNp
emUsIHNsb3cpCkBAIC0xMTI2LDggKzExMjYsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNHbG9i
YWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1f
Y2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1f
c3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3Qw
XSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwg
dDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVy
OjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0s
IHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAg
IGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIxMSw4ICsxMjExLDggQEAgX2xsaW50X29w
X3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0MAog
ICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAgYnBu
ZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAgICBi
aWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cKLSAg
ICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIg
KyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9w
UHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEy
MjMsOSArMTIyMyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5
OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAg
IGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1
bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQx
Ci0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0
MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBd
CiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBA
QCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZv
ciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3Qg
SGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlwZSBj
b25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEzCkBA
IC0zMTgsNyArMzIzLDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFzc0lu
ZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgogICAg
ICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUs
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6
Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6
bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgsNyBAQCBt
YWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0
aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikK
LSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3BlcnR5
U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0
eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdpc3Rl
ciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhl
IG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50
ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5o
IgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252
ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
KgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVu
dGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLworLy8gUHJvcGVydGllcyBvZiBK
U0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgor
Ly8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vICAgKiBBIHN0b3Jh
Z2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgorLy8KKy8v
IFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVy
cyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwg
b3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCisvLyAo
c3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZG
RkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRl
cmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9w
ZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVy
LCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKKy8vIHdoZXJlIChpIDw9
IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQg
aW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBh
cnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisvLyBmYXNoaW9u
OgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1
ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAgdW5sZXNzIHRo
ZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28g
aW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkg
PD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKKy8vICAg
ICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXks
IGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBz
dG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAor
Ly8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJl
IHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkg
PD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCisvLyAg
ICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2Ug
dmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUg
dGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUgTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGV4aW5nSGVhZGVyOjpt
YXhpbXVtTGVuZ3RoKSkKKworLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJl
IHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJy
YW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisj
ZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZG
RkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBp
dCdzIGFuIGludGVnZXIuCisjZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisv
LyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0
b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVh
dGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNk
ZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhl
IHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1l
bnQKKy8vIGlzIGFkZGVkLgorI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIg
cG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2Ug
bWFwLgorLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFu
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8v
IGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2Ug
dXNlIGEgbWFwLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0g
ODsKKworaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIG51bVZhbHVlcykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVz
OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ0hlYWRl
ciByZXN1bHQ7CisgICAgcmVzdWx0LnNldEF1eFdvcmQobGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0
TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIElu
ZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICByZXR1cm4gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9S
X0xFTik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlDb252ZW50
aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQs
MTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgog
CisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENh
bGwuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgog
I2luY2x1ZGUgIkpTU3RyaW5nQnVpbGRlci5oIgpAQCAtMTE0LDkgKzExNiwxNyBAQCBjb25zdCBD
bGFzc0luZm8gQXJyYXlQcm90b3R5cGU6OnNfaW5mbyA9CiBAZW5kCiAqLwogCitBcnJheVByb3Rv
dHlwZSogQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCAw
KTsKKyAgICBBcnJheVByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwogLy8gRUNN
QSAxNS40LjQKLUFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKK0FycmF5UHJvdG90eXBlOjpBcnJheVBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtMjkyLDggKzMwMiw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQ7Ci0gICAgICAgIGlmICh0aGlzT2JqLT5jYW5HZXRJbmRleChrKSkKLSAgICAgICAgICAgIGVs
ZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleChrKTsKKyAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdl
dEluZGV4UXVpY2tseShrKSkKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRl
eFF1aWNrbHkoayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgayk7CiAgICAgICAgIApAQCAtNDEzLDEwICs0MjMsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGFzQXJyYXkodGhpc09iaik7CiAKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewot
ICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCisgICAgICAgICAgICBpZiAo
IWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAg
ICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAg
ICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1lbnQudG9VU3RyaW5nSW5saW5lKGV4ZWMpKTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogCi0gICAgaWYgKHRo
aXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09i
aiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZK
U0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihleGVjLCBjYWxsVHlw
ZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJheSh0aGlzT2JqKS0+c29ydE51bWVyaWMo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIGVsc2UgaWYgKGNh
bGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4OCw5ICs3OTgsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMp
OwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsr
aykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCisgICAgICAgICAg
ICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXgoayk7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBq
c051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1NiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAg
ICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhp
cyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRl
eChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJ
bmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBq
c051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNP
YmopOwogCkBAIC05MDksMTEgKzkxOSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsK
ICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3Ig
KDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFw
cGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5n
ZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIs
IHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwo
KTsKQEAgLTk2NSwxMSArOTc1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAg
ICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBr
IDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2ts
eShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGsp
KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAg
LTEwMTcsMTEgKzEwMjcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAg
IENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBs
ZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMp
OwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgo
aykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNO
dW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2Jq
KTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC0x
MDc1LDggKzEwODUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhl
Yy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4
KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgoMCk7CisgICAgZWxzZSBpZiAoYXJy
YXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseSgwKSl7CisgICAgICAgIHJ2ID0gYXJyYXkt
PmdldEluZGV4UXVpY2tseSgwKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMDk3LDggKzExMDcsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDAsIHJ2KTsKICAgICAgICAgICAgIEpTVmFsdWUgdjsKLSAgICAgICAgICAgIGlm
IChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4KGkpKSkKLSAgICAgICAgICAgICAgICB2ID0gYXJy
YXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGkpKSkKKyAgICAgICAgICAgICAgICB2ID0gYXJyYXktPmdldEluZGV4UXVpY2ts
eShpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBicmVhazsgLy8gbGVuZ3Ro
IGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBmYWxsYmFjayB0byBzbG93
IHBhdGgKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgdik7CkBAIC0xMTUy
LDggKzExNjIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4
ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRl
eChsZW5ndGggLSAxKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4KGxlbmd0aCAtIDEp
OworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkobGVuZ3Ro
IC0gMSkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkobGVuZ3RoIC0gMSk7
CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdW5zaWduZWQgaWR4ID0gbGVuZ3RoIC0g
aSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKLSAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlkeCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGlkeCkpKQogICAgICAgICAgICAgICAg
IGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRl
IGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaWR4KSk7CiAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlkeCkpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAgICAgICAgICBydiA9IGNhY2hlZENhbGwu
Y2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKU0Fy
cmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheVByb3RvdHlwZSogcHJvdG90
eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5o
ZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBBcnJheVByb3Rv
dHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CkBAIC00Nyw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlT
dG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheVN0b3JhZ2Vf
aAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5o
IgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisj
aW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBk
YXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3Mg
Y29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9y
LiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBn
ZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRh
bnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFn
ZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0aW9uLiAg
VGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAg
ICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBB
cnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citw
cml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlh
YmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6
CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9
CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdI
ZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0
ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsg
cmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3Rl
YWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQg
bGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCkt
PmF1eFdvcmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRl
eGluZ0hlYWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgoKTsgfQorICAgIHZvaWQg
c2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRM
ZW5ndGgobGVuZ3RoKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5n
dGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb3B5SGVhZGVy
RnJvbShjb25zdCBBcnJheVN0b3JhZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VN
YXAgPSBvdGhlci5tX3NwYXJzZU1hcDsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2lu
ZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVz
SW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFs
aXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsK
KyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAg
ICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VNYXA7CisgICAgdW5z
aWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90
IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25J
bmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5nSGVh
ZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZM
ZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2luZGV4Qmlhcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZU1hcE9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fc3BhcnNlTWFwKTsg
fQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgp
CisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZl
Y3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5j
bHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2lu
Y2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNH
bG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitj
bGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citw
cml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGlj
OgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyA/IGhhc0luZGV4aW5nSGVhZGVyIDogdHJ1ZSk7CisgICAgICAg
IEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikp
OworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICsgKGhhc0luZGV4aW5nSGVhZGVyID8gc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSA6IDApICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAg
c3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkg
KyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsg
SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIElu
ZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisgICAgc3RhdGljIEJ1dHRl
cmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNp
dG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAg
ICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGlu
Z0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9Cisg
ICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVh
ZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlT
dG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5
bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9y
YWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3Rv
cmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hl
YWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZv
aWQqIGJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0ZXJm
bHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBi
dXQgZG8gbm90IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3Qg
dGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAg
ICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5j
YXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0ZXJm
bGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkg
Y2FsbGluZworICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgor
ICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFj
aXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNz
dW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAg
QnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJm
bHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJl
c2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3
UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFz
c3VtZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3Qg
aGFzIGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5
SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5j
bHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAi
Q29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIHNpemVfdCBzaXpl
ID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7Cisg
ICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKKyAgICAgICAgKnJl
c3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGNyZWF0
ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAw
KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
RHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFz
ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxE
YXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJlc3Vs
dC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBiYXNl
KHByZUNhcGFjaXR5LCBvbGRQcm9wZXJ0eUNhcGFjaXR5KSwKKyAgICAgICAgdG90YWxTaXplKDAs
IG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90
IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
CisgICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVj
dHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAor
ICAgICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVF9VTlVTRUQob2xk
U3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkob2xkU3RydWN0dXJlKSk7
CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4aW5nSGVhZGVyID09IGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB2b2lk
KiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzaXplX3Qgb2xkU2l6
ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwgb2xk
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHNpemVfdCBuZXdTaXplID0gdG90YWxT
aXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmdGhl
QmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBm
cm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRh
LCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAgICAg
ICAgaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisgICAg
ICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKG9sZFN0cnVj
dHVyZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9v
bCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgLy8g
RklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtdWNoIG1vcmUgZWZmaWNpZW50IGlmIHdlIHVzZWQg
dGhlIHByb3BlcnR5IHNpemUsCisgICAgLy8gbm90IHRoZSBjYXBhY2l0eS4KKyAgICB2b2lkKiB0
byA9IHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHZv
aWQqIGZyb20gPSBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAgc2l6
ZV90IHNpemUgPSBzdGQ6Om1pbigKKyAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNp
dHksIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyks
CisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hl
YWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICBtZW1jcHkodG8sIGZy
b20sIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFz
SW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgcmV0dXJuIHJl
c2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIGhhc0luZGV4aW5nSGVhZGVyLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKKyAgICAg
ICAgaGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhpbmdIZWFk
ZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChudW1iZXJPZlNsb3Rz
IDw9IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHVuc2ln
bmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlzIGFz
IGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaAorICAgIC8vIGRpcmVjdGlvbiB3ZSdy
ZSBtb3ZpbmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIGNoZWNrIG9mIG1lbW1v
dmUgYW5kICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkg
aW4gdGhlIGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdocHV0IG9mIG1lbW1vdmUgd29uJ3QKKyAg
ICAvLyBhbW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBpdC4gQW5kIG5vLCB3ZSBjYW5u
b3QgcmVseSBvbiB0aGUgQysrIGNvbXBpbGVyIHRvCisgICAgLy8gaW5saW5lIG1lbW1vdmUgKHBh
cnRpY3VsYXJseSBzaW5jZSB0aGUgc2l6ZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8gYmUgdmFyaWFi
bGUpLCBub3IgY2FuCisgICAgLy8gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gcmVjb2duaXpl
IHRoZSBvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhcmd1bWVudHMgKHNpbmNlCisgICAgLy8gcHJv
cGVydHlDYXBhY2l0eSBpcyB2YXJpYWJsZSBhbmQgY291bGQgY2F1c2Ugd3JhcC1hcm91bmQgYXMg
ZmFyIGFzIHRoZSBjb21waWxlciBrbm93cykuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJvcGVy
dHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAg
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRlcikg
KyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRlcjo6
ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZseSgp
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6
IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAgICAg
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywKKyAg
ICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hl
YWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1dHRl
cmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseUlu
bGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3BlcnR5TmFtZXNGdW5jdGlv
blB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Q
cm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOworCiAgICAgICAg
IHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAg
IEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCkBAIC0xMjQs
NiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAgICZDbGFz
c05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0VmFsdWUs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAorICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjbGFzc05hbWUs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGluZ0hl
YWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFN0cnVjdHVyZTsKK3N0cnVjdCBBcnJheVN0b3Jh
Z2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBEZWZpbmUgdGhl
IG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1
ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxv
dy4KKyAgICBlbnVtIHsgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDAgfTsKKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEluZGV4aW5nSGVhZGVyLCBtX2F1eFdvcmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9s
ZW5ndGgpOyB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRleGlu
Z0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qgb2Yg
dGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBkZXBl
bmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9hdXhX
b3JkKDApCisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVp
bnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9p
ZCBzZXRMZW5ndGgodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0
aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAgfQor
ICAgIAorICAgIHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAgICB2
b2lkIHNldEF1eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3JkOyB9
CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVy
Zmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFk
ZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IEluZGV4
aW5nSGVhZGVyKiBmcm9tKGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5kZXhpbmdIZWFkZXIqPihidXR0ZXJm
bHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJvcGVydHlTdG9yYWdlIHBy
b3BlcnR5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PElu
ZGV4aW5nSGVhZGVyKj4ocHJvcGVydHlTdG9yYWdlKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBDb25z
dFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAg
IH0KKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7CisgICAg
fQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQg
dGhleSBjYW5ub3QgYmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFk
ZXIuCisgICAgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOworICAgIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICAKKyAgICB1aW50MzJfdCBt
X2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJy
YXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5k
ZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiQXJy
YXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAm
IEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4g
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4aW5n
SGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5
U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nVHlwZV9oCisjZGVmaW5l
IEluZGV4aW5nVHlwZV9oCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3QgSW5k
ZXhpbmdUeXBlOworCisvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2FwYWJp
bGl0aWVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAg
ICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAgICAg
ICAgPSA4OworCisvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBv
ZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKKy8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBh
c2sgZm9yIHRoZW0gZGlyZWN0bHkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFycmF5
U3RvcmFnZSAgICAgICAgICA9IDE2OyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBoYXZl
IGFycmF5IHN0b3JhZ2UgaW4gdGhlIHBhc3QuCisKKy8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJh
eSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAg
ICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheSAg
ICAgICAgICAgICAgICAgICAgPSBJc0FycmF5Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOworCisv
LyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
QWxsQXJyYXlUeXBlcyAgICAgICAgICAgID0gMTU7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxl
IHR5cGVzIGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkgID0gMzE7CisKK2lubGluZSBib29sIGhhc0luZGV4aW5n
SGVhZGVyKEluZGV4aW5nVHlwZSB0eXBlKQoreworICAgIHJldHVybiAhISh0eXBlICYgSGFzQXJy
YXlTdG9yYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGlu
Z1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAg
Y29uc3QgQ2xhc3NJbmZvIEpTQWN0aXZhdGlvbjo6c19pbmZvID0gewogCiBKU0FjdGl2YXRpb246
OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgOiBCYXNlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKS5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpLCBjYWxsRnJh
bWUtPnJlZ2lzdGVycygpKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNh
cHR1cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlv
bkV4ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYo
ZmFsc2UpCkBAIC02NywxMiArNjcsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKICAgICAvLyBObyBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxs
IGluIHRoZSBSZWdpc3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkg
PSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdl
IHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFy
ZWdpc3RlckFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBl
bmQocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZyZWdpc3RlckFycmF5KSwgdGhpc09iamVjdC0+
cmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJl
Z2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZSgpKTsKLSAgICB0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJyYXksIFN0b3JhZ2VCYXJyaWVy
OjpVbmNoZWNrZWQpOworICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVy
QXJyYXk7CiAgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5ICsgdGhp
c09iamVjdC0+cmVnaXN0ZXJPZmZzZXQoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYXJndW1lbnRz
IG9iamVjdCwgc2luY2UgaXQgcG9pbnRzIGF0IG91ciBidWZmZXIuCkBAIC0xMzEsNyArMTMxLDcg
QEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVj
dCk7CiAKQEAgLTE0Niw4ICsxNDYsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9Ci0gICAgLy8gU2tp
cCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5h
bWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBp
bXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKKyAgICBKU09iamVj
dDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxl
UHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBy
ZWdpc3RlckFycmF5U2l6ZSgpOwogICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRl
cGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNv
cGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgUHJv
cGVydHlTdG9yYWdlIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdp
c3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBv
dXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIGludCBtX251bUNhcHR1cmVkQXJnczsK
ICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzIDogMzA7CiAgICAgICAgIGJvb2wgbV9pc1Rv
cm5PZmYgOiAxOwpAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBm
b3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAgICAgICAgICAgICByZWdpc3RlcnNbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKIAotICAgICAgICBt
X3JlZ2lzdGVyQXJyYXkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ2lzdGVyQXJyYXkpOworICAg
ICAgICBtX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBtX3JlZ2lzdGVy
cyA9IHJlZ2lzdGVyczsKICAgICAgICAgbV9pc1Rvcm5PZmYgPSB0cnVlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55
cG9wLmNvbSkKICAqCkBAIC0yNCwxMyArMjQsMTcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAK
ICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
KyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ1
LDQ4MCArNDksMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8v
IE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0
cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJl
Z3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0v
LyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3
aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5v
dCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUg
dmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHks
IHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4g
dW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5k
aWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8v
Ci0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFi
bGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lO
REVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhl
Ci0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkg
d2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAq
IFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3Rv
cmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGlu
IFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAu
Ci0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBp
biB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9u
IHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUg
dmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBt
aW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4K
LS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3Bh
cnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rp
b24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVk
IHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZs
b3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBt
dXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCku
Ci0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhl
c2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigp
IHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMs
IHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlz
IG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5l
IE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1Jf
TEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2Nh
dGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVu
Z3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRV
Ci0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8g
bGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmlu
ZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBh
IHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBp
bmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0
b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
YXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1
bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpT
QXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0
aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhp
cwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUg
bmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBj
b25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVk
IGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZv
clZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1
cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0
eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCi1zdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0
YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewot
ICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgbWVz
c2FnZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCi0KLWlubGluZSB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lD
aGVja1R5cGUpCitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKIHsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVO
OwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxW
ZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0
b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwogICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19j
YXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7
Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgSW5kZXhp
bmdIZWFkZXIoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpbml0aWFsTGVuZ3RoKTsKKyAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoMCk7Cisg
ICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOwogI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAgc3RvcmFnZS0+bV9pbml0aWFs
aXphdGlvbkluZGV4ID0gMDsKKyAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gMDsKICNlbmRpZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBK
U0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAv
LyBDaGVjayBmb3IgbGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0
b3IuCi0gICAgaWYgKGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBt
YXgoaW5pdGlhbExlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFs
U3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZv
aWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdT
dG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1f
c3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0g
aW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSBpbml0aWFsTGVuZ3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0
b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19
Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUg
c2FtZSBvYmplY3QuCi12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAg
ICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlz
T2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAg
ICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VB
cnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkq
IGFycmF5LCB1bnNpZ25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAg
ZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9
IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0
eSkgewotICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChj
YXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9
IGNhcGFjaXR5OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBT
cGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRS
ZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRl
IGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAg
Ly8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQg
dGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdo
dCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJl
c3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYg
QWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsK
LSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpT
VmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQoYWNjZXNzb3Iu
aXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVy
KGFjY2Vzc29yKS0+c2V0dGVyKCk7Ci0gICAgCi0gICAgaWYgKCFzZXR0ZXIpIHsKLSAgICAgICAg
aWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVy
LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxs
KGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlu
bGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJz
ZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBU
byBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUg
c3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBu
ZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhp
cyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4K
LSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewot
ICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVj
dCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0
ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6Omdl
dChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6
OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2
YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNs
b3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29u
c3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1
bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVy
KHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRh
KTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJy
YXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlF
bnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVz
KTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5
VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRl
cmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNv
bmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFs
dWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7
Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRl
IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQg
SlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAg
ICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAg
ICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5l
ZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUg
ZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAg
ICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDAp
LCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9y
YWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFn
ZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwot
ICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2Ug
PSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNw
YXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
KQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
ZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0
dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNj
cmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdl
dHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAg
ICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdl
dHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBz
ZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAg
ICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNl
IGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBz
ZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNl
dHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYg
KGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3It
PnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJ
bk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJv
b2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAo
IWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBh
IHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0
aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1p
c3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2
ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdp
bGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAo
aS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhv
dXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2Ny
aXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNB
Y2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgo
ZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwot
ICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7
Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJzZUFycmF5RW50cnkqIGVu
dHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0
ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3Bl
cnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2li
bGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZp
bmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgbWFwLT5y
ZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3Qg
dGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuYS4g
SWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlz
IHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0gICAgICAgIC8vIG5hbWVk
IFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJs
ZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJl
IGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9m
IERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQotICAgICAgICAvLyBj
cmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8g
NC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBz
bywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCi0gICAgICAgIC8v
IG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0Nv
bmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQotICAgICAgICAv
LyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJz
ZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5Ci0gICAgICAg
IC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5jLiBSZXR1cm4g
dHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQotICAgICAgICBwdXREZXNj
cmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKLSAgICAgICAg
aWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0g
ICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMg
aW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNh
bWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBh
cmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KLSAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7Ci0gICAgaWYg
KGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBpZiAoIWN1cnJlbnQuY29u
ZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3VycmVu
dCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1lcmFi
bGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxl
IGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAv
LyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVydGhl
ciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVyaWNE
ZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1bHRz
LCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gOS5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCi0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2Vz
cyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAg
ICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4gY29u
dmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKLSAgICAgICAgICAg
IC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRoZSBl
eGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMKLSAgICAgICAgICAg
IC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNl
dCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8KLSAgICAgICAgICAg
IC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252
ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJv
cGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4
aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJs
ZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0
IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0
IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAm
JiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8gMTAuIEVs
c2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVz
YykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAg
aWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2Mg
aXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgICAgIC8vIDEw
LmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2Vu
dCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFs
c2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVl
KGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkp
OwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQp
IGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAx
MS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
U2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KLSAgICAg
ICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5z
ZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNl
dHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAgICAv
LyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQg
YW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0g
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0
b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRo
ZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxk
IG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBh
dHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVl
IG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2Ny
aXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCiB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdy
aXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKQEAgLTUyNyw5ICs3NCw5IEBA
IHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXQKICAgICBpZiAoIWlzTGVu
Z3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZW50ZXJE
aWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgbWFw
LT5zZXRMZW5ndGhJc1JlYWRPbmx5KCk7CiB9CkBAIC02MzAsMzggKzE3NywxMCBAQCBib29sIEpT
QXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0CiAgICAgICAgIC8vIGUuaS4gU2V0IG9s
ZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KICAgICAgICAgLy8gZS5paS4gQ2FsbCB0
aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkp
IG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50
cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgogICAgICAgICAvLyBmLiBSZXR1
cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHko
ZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7
Ci0gICAgICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVj
LCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIGlmIChp
IDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNP
YmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKKyAgICByZXR1cm4gYXJyYXktPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRl
eFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24p
OwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQpAQCAtNjcyLDEwICsxOTEsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCkBAIC02ODcsMjYgKzIwMiw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0g
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzIwOSw2IEBAIGJvb2wgSlNBcnJheTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAg
ICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xl
bmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMzLDE5NCArMjIzLDkgQEAgdm9pZCBK
U0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNB
cnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAg
IGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRl
IG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlm
IChpID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xv
dC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVT
NS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYg
KFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBz
bG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2Fz
ZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5w
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7
Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEg
dmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4K
LSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FS
UkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8g
Rmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJz
ZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkg
aXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2Rl
LCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxl
KCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAg
ICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
bGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0
byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rv
ci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0
YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdl
IHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2
ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2
ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRk
IHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhl
YywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUu
Ci0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkp
IHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAg
ICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUg
Y3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJl
IGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAg
aWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlm
IGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFy
c2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFy
cmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgp
KSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVy
aW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51
bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGlu
dG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwot
Ci0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1
ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1
ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUg
YSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9y
LgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhf
QVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAv
LyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3Bh
cnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJh
eSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1v
ZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2li
bGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0g
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+
bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxl
IHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVj
dG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxE
YXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3Jh
Z2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhl
IHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3Qg
dXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1h
cCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVy
biBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAg
IH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAg
ICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFi
bGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJv
cGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIGxlbmd0
aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0K
LSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBz
dGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVz
ZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRv
byBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVz
SW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAg
ICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3Ro
LCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0
ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAg
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
bnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAg
aW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7
Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZh
bHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZh
bHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
LSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
OTI4LDM1ICsyMzMsNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5j
aGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVl
U2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsK
LSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7
Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0
IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQqPihhKTsKQEAgLTk2NCwxMjcgKzI0MCwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9y
UVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAot
dm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9w
ZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAv
LyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBk
aWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBh
IGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3Qt
Pm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAg
IH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAg
a2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAg
ICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0p
KQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+
Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5z
aXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0K
IAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVj
dG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRM
ZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNy
ZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExl
bmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNl
IGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNp
cmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVt
YXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAo
bmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5j
cmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAg
IC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSAr
IChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0
aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2Vk
TGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExl
bmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGlu
dGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55
IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxs
ZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3Jl
IGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0
aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBu
ZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8v
IEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJl
YWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAg
ICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYg
KCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3Jh
Z2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3
U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsK
LSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVj
dG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVj
YXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVu
Z3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxj
dWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBh
Y2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGgg
KyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWds
b2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNh
cGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ly8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBl
eGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxl
bmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsK
LSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWlu
dGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2lu
ZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVu
dCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdl
LCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxv
Y2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9
IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxl
YXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAg
ICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRo
LgotICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQg
cHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBo
YXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0
b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBr
ZXkgbWV0cmljczoKQEAgLTEwOTMsOCArMjY4LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhl
IGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4K
ICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8g
Z3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJU
KHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8g
Q2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVy
Zmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTAyLDggKzI3Nyw4IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCByZXF1aXJlZFZlY3Rv
ckxlbmd0aCA9IHVzZWRWZWN0b3JMZW5ndGggKyBjb3VudDsKICAgICBBU1NFUlQocmVxdWlyZWRW
ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gVGhlIHN1
bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1f
dmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0gICAgdW5zaWduZWQgY3VycmVudENhcGFj
aXR5ID0gbV92ZWN0b3JMZW5ndGggKyBtX2luZGV4QmlhczsKKyAgICBBU1NFUlQoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSA+PSBzdG9yYWdlLT5t
X2luZGV4Qmlhcyk7CisgICAgdW5zaWduZWQgY3VycmVudENhcGFjaXR5ID0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkgKyBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICAvLyBUaGUgY2FsY3VsYXRp
b24gb2YgZGVzaXJlZENhcGFjaXR5IHdvbid0IG92ZXJmbG93LCBkdWUgdG8gdGhlIHJhbmdlIG9m
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCiAgICAgdW5zaWduZWQgZGVzaXJlZENhcGFjaXR5
ID0gbWluKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgsIG1heChCQVNFX1ZFQ1RPUl9MRU4sIHJl
cXVpcmVkVmVjdG9yTGVuZ3RoKSA8PCAxKTsKIApAQCAtMTExNCwxMCArMjg5LDEwIEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCBuZXdTdG9y
YWdlQ2FwYWNpdHk7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZm
aWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcg
aXQuCiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBhY2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7
Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOworICAgICAgICBu
ZXdBbGxvY0Jhc2UgPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKCkpOwogICAgICAgICBuZXdT
dG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKGRlc2ly
ZWRDYXBhY2l0eSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpLCAmbmV3
QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFn
ZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KQEAgLTExMzAsNDUgKzMwNSw0MCBA
QCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gSWYgaXQg
ZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3VudCB0aGF0IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFu
IGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQogICAgIC8vIHZlY3RvciB3aXRoIGhhbGYgdGhlIHBv
c3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3VzbHkuCiAgICAgdW5zaWduZWQgcG9zdENhcGFjaXR5
ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgbV92ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobGVuZ3Ro
IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAgLy8gQXRvbWljIGRlY2F5LCAr
IHRoZSBwb3N0LWNhcGFjaXR5IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gd2hhdCBpcyBhdmFpbGFi
bGUuCi0gICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigobV92ZWN0b3JMZW5ndGggLSBsZW5ndGgp
ID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkg
Pj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWlyZWRWZWN0b3JMZW5ndGgpOwogICAgICAg
ICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24s
IHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVjZWQuCi0gICAgICAgIEFTU0VSVChuZXdB
bGxvY0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jhc2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0
b3JMZW5ndGggLSBsZW5ndGgpOwotICAgIH0KLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWly
ZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9y
YWdlQ2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6
Ci0gICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9u
cywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgotCi0gICAg
Ly8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBt
ZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQotICAgIC8vIHRvIHRoZSByaWdodCAo
c2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0
cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291
bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVz
ZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdl
U2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/
Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAg
ICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAg
ICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7CisgICAgICAgIEFTU0VS
VChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSgpKSB8fCBwb3N0Q2Fw
YWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCk7CiAgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9z
dENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0
eSAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0FsbG9jQmFzZSwgbmV3SW5kZXhCaWFzLCBwcm9w
ZXJ0eUNhcGFjaXR5KTsKKyAgICAKKyAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1
ZSkgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKKyAgICBtZW1tb3ZlKG5ld0J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsIGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsIHNpemVvZihKU1ZhbHVlKSAqIHByb3BlcnR5U2l6ZSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIAorICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5n
dGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3
SW5kZXhCaWFzOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OwogCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogewotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKIAotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJh
eVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBsZW5ndGggaXMgcmVhZCBvbmx5IHRoZW4g
d2UgZW50ZXIgc3BhcnNlIG1vZGUsIHNvIHNob3VsZCBlbnRlciB0aGUgZm9sbG93aW5nICdpZicu
Ci0gICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBtX3NwYXJzZVZhbHVlTWFwKTsKKyAg
ICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKIAot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Cisg
ICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7
CiAgICAgICAgIC8vIEZhaWwgaWYgdGhlIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCiAgICAgICAg
IGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CkBAIC0xMTk1LDcgKzM2NSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAtPmZpbmQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXQg
IT0gbWFwLT5ub3RGb3VuZCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4i
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBtYXAtPnJlbW92
ZShpdCk7CkBAIC0xMjA0LDE0ICszNzQsMTQgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShrZXlzW2ld
KTsKICAgICAgICAgICAgICAgICBpZiAobWFwLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBpZiAobmV3TGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICAgICAgIC8vIERlbGV0ZSBwcm9wZXJ0aWVz
IGZyb20gdGhlIHZlY3Rvci4KLSAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihsZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwogICAgICAgICAgICAgYm9vbCBoYWRWYWx1ZSA9IHZhbHVlU2xvdDsKQEAgLTEy
MjAsNTMgKzM5MCw2NSBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IG5ld0xlbmd0aDsK
KyAgICBzdG9yYWdlLT5zZXRMZW5ndGgobmV3TGVuZ3RoKTsKIAotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Cisg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgaWYgKCFp
c0xlbmd0aFdyaXRhYmxlKCkpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxl
bmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0
aFdyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7
Ci0gICAgaWYgKGluZGV4IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAg
IGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAg
ICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxl
bmd0aCAtIDE7CisgICAgICAgIGlmIChpbmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2luZGV4XTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAg
ICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVl
U2xvdC5jbGVhcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhX
cml0YWJsZSgpKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAg
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXgpOworICAgICAgICAgICAgICAgIGNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRo
IGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5h
YmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tH
ZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAv
LyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRz
IGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMs
IGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAg
c2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQu
CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gZWxl
bWVudDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KLSAgICAvLyBDYWxs
IHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgi
LCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOwotICAg
IC8vIFJldHVybiBlbGVtZW50LgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4g
ZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3
aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTEyNzQsNjMgKzQ1Niw3NyBAQCBKU1ZhbHVl
IEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFycmF5
IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdl
IGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBh
bHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwgbV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVu
Z3RoICsgMTsKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgMCwgdmFsdWUsIHRydWUsIGNyZWF0ZUluaXRp
YWxBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIGJyZWFrOwogICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCi0g
ICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJv
cGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KLSAgICBpZiAoVU5MSUtFTFkoc3RvcmFn
ZS0+bV9sZW5ndGggPT0gMHhGRkZGRkZGRnUpKSB7Ci0gICAgICAgIG1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAg
ICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgot
ICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRo
aW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4K
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlm
IChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICBjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHBy
b3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCisgICAgICAgIGlmIChVTkxJS0VMWShz
dG9yYWdlLT5sZW5ndGgoKSA9PSAweEZGRkZGRkZGdSkpIHsKKyAgICAgICAgICAgIG1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0
cnVlKTsKKyAgICAgICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUu
MSBzdGVwIDMuZC4KKyAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZh
bGlkIGFycmF5IGxlbmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0g
ICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dElu
ZGV4LgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUsIHN0b3JhZ2UpOworICAgICAg
ICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CiB9CiAKLWJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3Vu
dCkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNv
dW50KQogewogICAgIEFTU0VSVChjb3VudCA+IDApOwogICAgIAotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICAKLSAgICB1bnNpZ25lZCBvbGRM
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKICAgICAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMg
b3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2Vu
ZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKG9sZExlbmd0aCAhPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQorICAgIGlmIChv
bGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZUluZGV4
aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW9sZExlbmd0aCkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciAtPSBjb3VudDsKLSAgICBzdG9yYWdlLT5tX2xlbmd0aCAtPSBjb3VudDsKKyAgICBzdG9y
YWdlLT5zZXRMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOwogICAgIAotICAgIGlmIChtX3ZlY3Rv
ckxlbmd0aCkgewotICAgICAgICBjb3VudCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwgKHVuc2lnbmVk
KWNvdW50KTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICBpZiAodmVjdG9yTGVuZ3RoKSB7CisgICAgICAgIGNvdW50ID0gbWluKHZlY3Rv
ckxlbmd0aCwgKHVuc2lnbmVkKWNvdW50KTsKICAgICAgICAgCi0gICAgICAgIG1fdmVjdG9yTGVu
Z3RoIC09IGNvdW50OworICAgICAgICB2ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHN0
b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwogICAgICAgICAKLSAgICAgICAg
aWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpICsgY291bnQgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0
b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLQotICAgICAgICAg
ICAgbV9pbmRleEJpYXMgKz0gY291bnQ7CisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAg
ICAgICAgICAgIG1fYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgpLCBj
b3VudCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzM5LDU5ICs1MzUsMzAgQEAgYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVucwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB1
bnNoaWZ0IGNhbiBiZSBoYW5kbGVkLCBmYWxzZSB0byBmYWxsYmFjay4gICAgCiBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGNvdW50KQogewotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5tX2xlbmd0aDsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBv
ciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5l
cmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAobGVuZ3RoICE9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKGxlbmd0
aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IHN0b3JhZ2UtPmluU3BhcnNlTW9k
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9pbmRleEJpYXMgPj0gY291
bnQpIHsKLSAgICAgICAgbV9pbmRleEJpYXMgLT0gY291bnQ7Ci0gICAgICAgIGNoYXIqIG5ld0Jh
c2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgLSBjb3VudCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9y
YWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgIG1fc3RvcmFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KG5ld0Jhc2VTdG9yYWdlKTsKLSAgICAgICAg
bV92ZWN0b3JMZW5ndGggKz0gY291bnQ7CisgICAgaWYgKHN0b3JhZ2UtPm1faW5kZXhCaWFzID49
IGNvdW50KSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVu
c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7
CisgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aChzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSArIGNvdW50KTsKICAgICB9IGVsc2UgaWYgKCF1bnNoaWZ0Q291bnRTbG93Q2FzZShleGVjLT5n
bG9iYWxEYXRhKCksIGNvdW50KSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaV0uY2xlYXIoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTsKLSAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0Zs
YWcpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVy
cmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0gICAgSlNOb25GaW5hbE9iamVjdDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2UpIHsKLSAgICAgICAgTUFSS19MT0dfTUVTU0FHRTEoIlsldV06ICIsIHRoaXNPYmplY3QtPmxl
bmd0aCgpKTsKLQotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2U7Ci0gICAgICAgIHZvaWQqIGJhc2VTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jh
c2U7Ci0KLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmYmFzZVN0b3JhZ2UpLCBzdG9yYWdlU2l6ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0
aCArIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKSwgc3RvcmFnZS0+bV92ZWN0b3ItPnNsb3QoKSwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotCi0gICAgICAgIGlmIChiYXNlU3RvcmFnZSAh
PSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgICAgICB0aGlz
T2JqZWN0LT5tX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihz
dGF0aWNfY2FzdDxjaGFyKj4oYmFzZVN0b3JhZ2UpICsgc2l6ZW9mKEpTVmFsdWUpICogdGhpc09i
amVjdC0+bV9pbmRleEJpYXMpOwotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlLT5t
X2FsbG9jQmFzZSA9IGJhc2VTdG9yYWdlOwotICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApCi0g
ICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKLX0KLQogc3RhdGljIGludCBjb21w
YXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAg
ZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT5hc051bWJlcigpOwpA
QCAtMTQwOCwxMTIgKzU3NSwxMzcgQEAgc3RhdGljIGludCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQoYwogCiB2b2lkIEpTQXJyYXk6OnNvcnROdW1lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYg
Y2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5n
TW9kZSgpKTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNv
bXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFs
dWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5
OgogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGJvb2wgYWxsVmFsdWVzQXJlTnVtYmVy
cyA9IHRydWU7Ci0gICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICgh
c3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgYWxsVmFsdWVz
QXJlTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOzsKKyAg
ICAgICAgCisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGJvb2wgYWxsVmFsdWVzQXJl
TnVtYmVycyA9IHRydWU7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkgeworICAg
ICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29t
cGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICAKKyAgICAgICAgLy8g
Rm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRo
YW4gbWVyZ2Vzb3J0LiBXZQorICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0
J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQorICAgICAgICAvLyBz
aWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRpdmUgdmFs
dWVzLgorICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgICAgICAKKyAg
ICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJz
KQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0
LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxzbyBkb24ndCBy
ZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2li
bGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBw
cmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0Fy
cmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgp
KTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RG
b3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFsdWVNYXAp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5n
cyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJh
c2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBv
dmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBs
YXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMg
ZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9k
cyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0
cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgotCi0g
ICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKCFpblNw
YXJzZUluZGV4aW5nTW9kZSgpKTsKICAgICAKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0KLSAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVl
cyA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAg
ICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgIGlzU29ydGluZ1ByaW1pdGl2
ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1pdGl2ZSgp
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRv
IGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAgIC8vIGEg
dG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAgdmFsdWVz
W2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1VTdHJpbmdJbmxpbmUoZXhlYyk7Ci0KLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+
cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxn
b3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSBy
YXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQg
dmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBm
cm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lk
ZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRo
b3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgICAgICAvLyBidWZmZXIuIEJl
c2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2
ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgICAgICAvLyByYW5kb20g
b3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJl
IGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZVN0
cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBp
ZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykg
eworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAg
IHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxv
b3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBh
ZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAg
ICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ld
LmZpcnN0LnRvVVN0cmluZ0lubGluZShleGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVt
cFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwg
YSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxk
IGJlIE8oTikgcmF0aGVyCisgICAgICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KKyAgICAgICAgCiAj
aWYgSEFWRShNRVJHRVNPUlQpCi0gICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAg
ICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwotICAgIGVsc2UKLSAgICAg
ICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVT
dHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgaWYgKGlz
U29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigp
LCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5n
UGFpckZvclFTb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCi0gICAgLy8gRklYTUU6IFRoZSBxc29ydCBs
aWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KLSAgICAv
LyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBw
cmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgotICAgIHFzb3J0KHZhbHVl
cy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJy
YXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUgc29ydC4KKyAgICAgICAg
Ly8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJsZSBzb3J0LCBidXQgaW4g
cHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4KKyAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCi0KLSAgICAvLyBJZiB0aGUgdG9T
dHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Ig
c3RvcmFnZSwKLSAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25h
bCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICBpZiAobV92ZWN0b3JMZW5ndGggPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAo
bV9zdG9yYWdlLT5tX2xlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAg
ICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsKLQot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQot
ICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZXNbaV0uZmlyc3QpOwotCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVj
ayk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdl
ZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKKyAgICAgICAgLy8g
aW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVh
bCB2YWx1ZXMuCisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkgeworICAgICAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOworICAgICAgICAKKyAg
ICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAg
ICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hl
Y2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9k
ZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk1LDI1MyArNzg3LDI1NyBAQCBzdHJ1Y3QgQVZMVHJl
ZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29u
c3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwot
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBl
eGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4K
LQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4gLSBidXQgdGhl
IGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAvLyBpZiBhIGxhcmdlciBhcnJh
eSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9sZW5ndGggPD0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKLSAgICBpZiAo
bV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7
Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChtX3NwYXJzZVZh
bHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgpIDogMCk7Ci0KLSAgICBpZiAoIW5vZGVD
b3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZv
ckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBp
dGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7Ci0gICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247Ci0gICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKLSAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQotICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0
cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlv
biksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7
Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICBBU1NFUlQoIWluU3Bh
cnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXks
IHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAotICAgIC8vIHJpZ2h0IG91
dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCi0KLSAg
ICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAw
OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1
ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVz
IGludG8gdGhlIHRyZWUuCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251
bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0g
ICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVl
ID0gdjsKLSAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAg
ICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGlu
IHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVy
IGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBp
cyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOworICAgICAgICBp
ZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVz
ZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJz
ZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGVDb3VudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRyZWU8QVZMVHJlZUFic3Ry
YWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9y
IDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKKyAg
ICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rp
b247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5
cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxE
YXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQorICAgICAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENh
bGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rpb24pLCAyKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewor
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBh
cmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291
bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUg
d2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOworICAg
ICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3JpbmcgbWlzc2lu
ZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhl
ciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9y
YWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAg
IHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAg
aWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAg
ICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxl
bmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9y
TGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3Np
YmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50
cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRh
KCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZp
bmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0
b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9
IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQg
aXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxs
IHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVj
LT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmlu
ZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAg
IH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKTsKLSAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwot
ICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURlZmluZWQpOworICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0
aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUKKyAgICAgICAgLy8gbW9kaWZ5
aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHRo
ZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJz
dHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOworICAgICAgICBpdGVy
LnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bURlZmluZWQ7ICsraSkgeworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVl
KTsKKyAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQotCi0gICAgICAgIGRlYWxsb2NhdGVT
cGFyc2VNYXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1dCB1bmRlZmluZWQgdmFsdWVzIGJh
Y2sgaW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRV
bmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1
ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAg
ICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVj
ayk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhl
IGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZv
bGxvd2luZyBtaWdodCBiZQotICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5
LgotCi0gICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgQVZM
VHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVy
OwotICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bURlZmluZWQ7ICsraSkgewotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1
ZSk7Ci0gICAgICAgICsraXRlcjsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMg
YmFjayBpbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVm
aW5lZCgpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9y
IGFyZSB6ZXJvZWQgb3V0LgotICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5n
dGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0
b3JbaV0uY2xlYXIoKTsKLQotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5l
d1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMs
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG1fc3RvcmFnZTsKLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPm1f
bGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yICg7
IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoOyBpIDwg
dmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9
IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBh
cmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0K
LSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGFyZ3MuYXBw
ZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsK
ICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKLSAgICBVTlVTRURfUEFSQU0o
bGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVjdG9yRW5kID0g
bWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyAr
K2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAg
ICAgICBpZiAoIXYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRB
cmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB1bnNpZ25lZCBpID0g
MDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3Zl
Y3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Cisg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAg
ICAgICBpZiAoIXYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYWxsRnJh
bWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1
bWVudChpLCBnZXQoZXhlYywgaSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAg
ICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50
KGksIGdldChleGVjLCBpKSk7CiB9CiAKIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9k
ZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKKyAgICBBU1NFUlQoIWluU3BhcnNl
SW5kZXhpbmdNb2RlKCkpOwogCi0gICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgdW5z
aWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQotICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVm
aW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikg
ewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251
bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7
CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICBm
b3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxl
bmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9y
TGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3Np
YmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50
cmllcyAtIGlmIG5vdCwKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2Fs
bGVyLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1Vz
ZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAg
ICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
dikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAg
ICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKHYpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5l
ZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0gICAgfQotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkK
LSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotCi0gICAgY2hlY2tDb25z
aXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICByZXR1cm4gbnVtRGVmaW5lZDsK
LX0KLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0KLXZvaWQgSlNBcnJheTo6Y2hlY2tD
b25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQotewotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBh
Y3RJbml0aWFsaXphdGlvbik7Ci0KLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgaWYgKHR5cGUg
PT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgIEFTU0VSVCghbV9zcGFyc2VWYWx1ZU1h
cCk7Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgewotICAgICAgICAgICAgQVNT
RVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5l
ZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0g
ICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAg
QVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVm
aW5lZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCAr
PSBtYXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFs
bCB0aGUgZW50cmllcyAtIGlmIG5vdCwKKyAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMg
dGhyb3duIGJ5IGNhbGxlci4KKyAgICAgICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+
ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7
CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNl
ZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVm
aW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9y
YWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFw
LT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0g
bV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9J
TkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAo
dHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jh
c2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KIH0KIAotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDE0MCArMjEsMjkgQEAKICNpZm5kZWYgSlNB
cnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBw
dWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1
dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJheSopIGNv
bnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUgZ2V0Tm9u
U3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
fTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOwotCi0g
ICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgICAg
IFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCi0gICAg
ICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVy
YXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwpCi0gICAg
ICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICBib29s
IHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNw
YXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3Mg
fCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25s
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFk
T25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFn
cyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0
aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZvaWQgcHV0
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25l
ZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBhZGQoSlNB
cnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJl
dHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUg
cmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAgICAgICAg
dm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAgICAgICB2
b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAgICAgIC8v
IFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KLSAg
ICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotICAgICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KLSAgICAg
ICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlu
cyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUo
KTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCi0g
ICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4o
KTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5l
bmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAgICBGbGFn
cyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAgIH07Ci0K
LSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFy
cmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9y
YWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRo
ZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5k
IAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUg
dGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKLSAg
ICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0
dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAvLyAgICAg
Z2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBzdHJ1Y3Qg
QXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAibGVuZ3Ro
IiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFzZSBhZGRy
ZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9lcyBlbGlt
aW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9y
IGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25J
bmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247Ci0jZWxz
ZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxl
bmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KLSAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3MgSlNBcnJh
eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTQXJy
YXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAg
ICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQotICAgICAg
ICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiB0
cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsK
LQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVV
bmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9z
ZSBzaXplIGFuZApAQCAtMTY3LDI1ICs1NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhy
b3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhp
cyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAg
ICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8g
IC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVh
dGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBj
b25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhblNl
dEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93
KTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3N0b3JhZ2UtPm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIGdldEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sgdG8gdXNl
IG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5
LgogICAgICAgICBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9vbCB0aHJv
d0V4Y2VwdGlvbiA9IGZhbHNlKTsKIApAQCAtMTk5LDE0MiArNzQsODQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7
CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsK
IAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3Zl
Y3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpTVmFsdWUg
Z2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhbkdl
dEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25lZCBpKSB7
IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRleChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsK
LSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0g
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9yYWdlICpz
dG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAg
ICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5kZXggaW4g
c2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9u
dW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAgIC8vIGNo
ZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2Yg
cHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBBU1NFUlQo
aSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9p
ZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJv
cGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChu
ZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9m
IHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KLSAgICAg
ICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0dXJuIG1h
cCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQgZmlsbEFy
Z0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAgdm9pZCBj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVuZ3RoKTsK
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RvcmFnZU9m
ZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpTR2xvYmFs
RGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgICAgICAgICAg
aWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOwogICAgICAg
ICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRh
YmxlKTsKLSAgICAgICAgdm9pZCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5
RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7Ci0g
ICAgICAgIGJvb2wgZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgdm9p
ZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmKTsKLSAgICAgICAgdm9pZCBkZWFsbG9j
YXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLQotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9v
bCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAg
ICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEm
KTsKKyAgICB9OwogCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxD
b25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3Rl
bmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92
ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5z
aWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3Mg
YmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0K
LSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1
dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3Nw
YXJzZVZhbHVlTWFwOworICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAg
ICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJh
eShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikp
OworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7CisgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgICAgIHJldHVy
biBidXR0ZXJmbHk7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFs
dWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VW
YWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9Ci0gICAgfTsK
KyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAK
ICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAg
ewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
LSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgp
OworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGds
b2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwg
JnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZs
eS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0
aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAgPSAwOwor
ICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAg
ICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1MywzMCArMTcwLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1
cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBi
b29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5
KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBm
dW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRl
ZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBv
dmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6
ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0v
LyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQg
bWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5h
cmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0
b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2
ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAg
IC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlk
ZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAv
LyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qg
b3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBp
bnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBv
c3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVv
ZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNp
emVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0g
ICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBj
b25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUs
IGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGJvdW5kRnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFy
Z3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChi
b3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVj
LT5hcmd1bWVudChpKSk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAg
ICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5h
cHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBl
bmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAg
dm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFVTdHJpbmcgSlNDZWxsOjpj
bGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEyNjc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAgICAgIH0KLQorICAgICAgICAKICNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVj
dHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgpA
QCAtMTYwLDYgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBEdW1teSBpbXBs
ZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2Vz
IHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJsZQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZh
dWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVU
eXBlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBz
dGF0aWMgVVN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVl
IHByb3RvdHlwZVByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMx
Nyw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlv
bjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMjksNyArMzI5LDcgQEAg
dm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQotICAgIEJh
c2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVE
b250RW51bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw4ICs1
MTksOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgaWYg
KG1faXNBcnJheSkgewogICAgICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAgICAgICBKU1ZhbHVl
IHZhbHVlOwotICAgICAgICBpZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQo
KSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29i
amVjdC5nZXQoKSktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG1faXNKU0FycmF5ICYm
IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAg
ICAgICAgICAgdmFsdWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXhRdWlja2x5
KGluZGV4KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCht
X29iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fb2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBleGVjLCBpbmRleCwg
c2xvdCkpCkBAIC02ODUsOCArNjg1LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3
YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRleChpbmRleCkp
Ci0gICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdl
dEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgICAgICAgICBpZiAoYXJy
YXktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoYXJyYXksIG1fZXhl
YywgaW5kZXgsIHNsb3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
ICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsVGhpcy5oIgpAQCAtMzgsMTIgKzQwLDE5IEBACiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlByb3Bl
cnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhl
IGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKKy8vIGFzIGEgc2lt
cGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJv
bSBzaXplIDAuCisvLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1Rf
VkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KK3N0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXpl
ID0gMDsKKwogSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQogewog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKCk7CkBAIC04NiwyOSAr
OTUsODAgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0K
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdE91dE9mTGluZVN0b3JhZ2Uo
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBzaXplX3Qgc3Rv
cmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNs
b3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VT
aXplKQogewotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBBU1NFUlQoc3RvcmFnZVNpemUpOwor
ICAgIEFTU0VSVChidXR0ZXJmbHkpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAg
c2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFn
ZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBp
bk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFBy
b3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9y
YWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAg
IFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFj
aXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQg
KyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAx
OworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgCisg
ICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGlu
Z0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFz
SW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVD
YXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAg
ICB9CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAor
ICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weUFuZFBpbk90aGVyd2lzZSgKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKKyAgICAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWRE
dXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBo
YXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgICAgICAK
KyAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
OworICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7
IGNvdW50LS07KSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJj
ZSktPmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwogICAgICAgICAgICAgKC0tY3VycmVu
dFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICB9Ci0gICAg
ICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQobmV3U3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVu
Y2hlY2tlZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHN0b3Jh
Z2UgLSBzdG9yYWdlU2l6ZSAtIDEsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgICAgICpuZXdCdXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHBy
b3ByaWF0ZS4KKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJGcm9tKCpidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRU
YXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3Vu
dC0tOykgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3Vy
Y2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApCisgICAgICAgICAgICAgICAgICAgIG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFn
ZVNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlh
dGUuCisgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAg
IG1hcC0+dmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0xMjIsOSArMTgy
LDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAg
IEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3Bl
cnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAg
IGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2Uo
dmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVG
b3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhp
c09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkKKyAgICAgICAgdGhpc09i
amVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CiAKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CkBAIC0xNDIsOSAr
MjAyLDkgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAog
ICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFBy
b3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwot
ICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91dE9mTGluZVN0b3Jh
Z2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNp
emVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhp
c09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkKKyAgICAgICAgdGhpc09i
amVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CiAKICAgICBzaXpl
X3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktu
b3duRmluYWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5p
bmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwxMCArMjIxLDUwIEBAIFVTdHJp
bmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamUKICAgICByZXR1cm4gaW5mby0+Y2xh
c3NOYW1lOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0
aW5nIG91ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAorICAgIC8vIGxl
Z2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBh
bHNvIG92ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCisgICAg
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAgCisgICAgc3dpdGNo
ICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5v
bkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGkg
PCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAg
aWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQu
Z2V0KHNsb3QpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI3
NCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNT
RVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBw
dXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJz
IG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMjM1LDkgKzM0MiwxNDUgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3Qt
PmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIGlmIChVTkxJS0VMWShwcm9w
ZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25B
cnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHByb3BlcnR5TmFt
ZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZh
bHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb3BlcnR5TmFtZSArIDE7CisgICAgICAg
ICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAKKyAgICAg
ICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsK
KyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsK
KyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKK30KKworQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9z
cGFyc2VNYXA7CisKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChnbG9iYWxEYXRhKTsKKworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHN0b3JhZ2U7CisKKyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVu
dHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAg
ICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgor
ICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRv
ci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIDApOworICAgIGlmICghbmV3QnV0dGVyZmx5KQor
ICAgICAgICBDUkFTSCgpOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5Owor
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgCisg
ICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmpl
Y3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCit7CisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCBvbGRUeXBlID09IE5vbkFycmF5IHx8
IG9sZFR5cGUgPT0gQXJyYXkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkp
CisgICAgICAgIENSQVNIKCk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKCFyZXN1bHQtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChs
ZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAg
cmVzdWx0LT5tX3NwYXJzZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFs
aXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJh
eVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZF
Q1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1v
ZGUoKTsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTMwNCw2ICs1NDcsMTAgQEAgYm9vbCBKU09i
amVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAg
ICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQo
KSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhl
Yyk7CkBAIC0zMzIsMTAgKzU3OSw0NSBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShF
eGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJB
WV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwor
ICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAK
KyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3Qu
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9
IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQpAQCAtNDY1LDYgKzc0Nyw1MSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAKIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgLy8gQWRkIG51bWVy
aWMgcHJvcGVydGllcyBmaXJzdC4gVGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252
ZW50aW9uLgorICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4g
aWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgorICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZp
Y2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKKyAg
ICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBm
b3IgUHJvcGVydHlOYW1lQXJyYXkuCisgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2Ut
Pmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
dG9yYWdlLT5tX3ZlY3RvcltpXSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7Cisg
ICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGtleXM7CisgICAgICAgICAgICBrZXlzLnJlc2Vy
dmVDYXBhY2l0eShtYXAtPnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9u
dEVudW0pKQorICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaXQtPmZpcnN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCkpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewogICAgIGdldENs
YXNzUHJvcGVydHlOYW1lcyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlLCBvYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CiAgICAgb2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KQEAgLTUxNSw4ICs4NDIsNyBAQCB2b2lkIEpT
T2JqZWN0OjpmcmVlemUoSlNHbG9iYWxEYXRhJiBnbG9iCiAKIHZvaWQgSlNPYmplY3Q6OnByZXZl
bnRFeHRlbnNpb25zKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoaXNKU0Fy
cmF5KHRoaXMpKQotICAgICAgICBhc0FycmF5KHRoaXMpLT5lbnRlckRpY3Rpb25hcnlNb2RlKGds
b2JhbERhdGEpOworICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsK
ICAgICBpZiAoaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUoKSkpOwogfQpAQCAtNTczLDExICs4OTksMTEgQEAgYm9vbCBKU09iamVjdDo6cmVtb3Zl
RGlyZWN0KEpTR2xvYmFsRGF0YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUg
dm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKQorTkVWRVJfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0gICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9
IGFzR2V0dGVyU2V0dGVyKGxvY2F0aW9uLT5nZXQoKSktPmdldHRlcigpKSB7CisgICAgaWYgKEpT
T2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdE9mZnNldChv
ZmZzZXQpKS0+Z2V0dGVyKCkpIHsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9u
YXJ5KCkpCi0gICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0
dGVyRnVuY3Rpb24sIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBz
bG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5j
dGlvbik7CiAgICAgfSBlbHNlCkBAIC02MDMsMjYgKzkyOSw1MzMgQEAgU3RydWN0dXJlKiBKU09i
amVjdDo6Y3JlYXRlSW5oZXJpdG9ySUQoSgogICAgIHJldHVybiBpbmhlcml0b3JJRDsKIH0KIAot
UHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3ZvaWQgSlNP
YmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlF
bnRyeSogZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7Ci0gICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGVu
dHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7
CisgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9i
amVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OworICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKKworICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUoZXhlYyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0
R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikK
KyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0
ZXIpOworCisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGFjY2Vzc29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmlj
RGVzY3JpcHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmlu
ZWQgaW4gRVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAw
eEZGRkZGRkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAg
ICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVn
dWxhciBhcnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBh
c3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0
IHRvIGZhbHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBl
eGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50
ICd0cnVlJworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBi
ZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNl
TW9kZScpLgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUo
KSwgdGhyb3dFeGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgfQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8v
IDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9w
ZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRl
eCk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUg
W1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJy
ZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisg
ICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwg
dGhlbgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5z
aWJsZSgpKSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2Mp
IG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRh
dGEgcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVl
XV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0
cmlidXRlIHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2
YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1
dGUgb2YgdGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0
cyBkZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBh
Y2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHBy
b3BlcnR5IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tT
ZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVl
cyBhcmUgZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5l
d2x5IGNyZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZh
bHVlLgorICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFy
cmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERv
bnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQo
ZGVmYXVsdHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5N
YXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChpbmRleCArIDEpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERl
c2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3Vy
cmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4K
KyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3Vy
cmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxU
byhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0
aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYg
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBm
aWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFj
aCBvdGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBj
dXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNE
YXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRp
ZmZlcmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0
b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8g
OS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlz
IHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGEKKyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHku
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
CisgICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bwor
ICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMu
IEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBh
Y2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0Nv
bmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRl
cyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIg
ZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlw
dG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8v
IDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAg
ICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlz
IHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0p
IGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJl
c2VudCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihj
dXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNl
bnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2Uu
CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2Ny
aXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAg
ICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZh
bHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0
ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkg
bmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRo
ZSB2YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEpTT2JqZWN0OjpmaW5hbGl6ZUFycmF5RGF0YShK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koRGVz
dHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOworICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOworfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0
aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdlIG1pZ2h0IGJlIGlu
IHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorU3BhcnNlQXJyYXlWYWx1ZU1hcCogSlNPYmpl
Y3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFw
OworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemVBcnJheURh
dGEpOworICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCA9IHJlc3VsdDsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEpTT2JqZWN0OjpkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAo
KQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOwor
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIGRlbGV0ZSBzdG9yYWdlLT5t
X3NwYXJzZU1hcDsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkg
aW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQo
aSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0g
bV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0
eVN0b3JhZ2UgPSAwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwOwogCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFr
ZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlw
ZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsK
LSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBDUkFTSCgp
OwotICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4o
dGVtcCkgKyBuZXdTaXplICsgMTsKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXAp
KSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxk
IGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAu
CisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAv
LyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBh
bmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAv
LyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJl
YWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9w
ZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1h
cCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
bWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3Ro
KSB7CisgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBu
b3Qgd3JpdGFibGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNF
eHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9
IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAg
ICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGls
bCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBh
IHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBz
cGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5B
cnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBp
ZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBu
dW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBsZW5ndGgpKSB7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJlYWQgbV9z
dG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZl
Y3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1
ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGlu
dG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZl
Y3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
K3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisK
KyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBv
ZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoaW5kZXhpbmdTaG91
bGRCZVNwYXJzZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7Cisg
ICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRh
LCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRl
IG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmly
c3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBt
YXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMg
bm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBh
bmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkp
OworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
KyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3Qg
dXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1h
cCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2lu
ZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91
bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBp
cyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50
bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcg
c28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFy
c2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2Nh
dGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUo
KSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0
aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5
OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3Is
IGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2
ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkg
c2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJy
ZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAotICAg
IG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9s
ZFNpemUpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkpCisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywg
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGds
b2JhbERhdGEpKTsKKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8
IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOwor
ICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsK
KyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVybiBuZXdQcm9w
ZXJ0eVN0b3JhZ2U7CitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0
b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExl
bmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNl
ZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gc3RkOjptaW4oY3VycmVudExl
bmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgp
CisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7CisgICAgZWxzZSBpZiAo
IWN1cnJlbnRWZWN0b3JMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4
KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBN
YXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0
aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8g
ICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAg
ICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+
IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2Vk
TGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IHN0ZDo6bWlu
KGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisgICAgcmV0dXJuIHN0ZDo6
bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25l
ZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKKyAgICB1bnNp
Z25lZCBsZW5ndGg7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHZlY3Rv
ckxlbmd0aCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0
aCh2ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmpl
Y3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgbmV3TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBp
biBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBt
b3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rv
ci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8g
aXQgbW9yZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9y
YWdlLT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAg
ICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3Ro
KTsKKworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVz
ZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFz
KSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JM
ZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAg
IGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2Yg
dGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBh
cnJheSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhC
aWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6
ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCks
CisgICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1Zl
Y3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJp
YXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
dm9pZCBKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlIHR5cGUpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3Ja
ZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
IXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3Jh
Z2UpOworICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NF
UlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVj
dG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQor
ICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBp
ZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5W
ZWN0b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29u
c2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVz
SW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51
bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJz
ZVZhbHVlTWFwKSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJz
dDsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VS
VChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sK
KyAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQg
dGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3Bl
cnR5CisgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVk
IHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5n
cm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdT
aXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDYzLDQ2IEBAIGJv
b2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zm
c2V0KQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0
ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Cisg
ICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAg
aWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC03MDQsMjYgKzE1NzMsMjYgQEAgcHJpdmF0
ZToKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBU
cmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAg
ICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHBy
b3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFy
bHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cg
bm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8g
YmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdv
cmsuCiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAg
IC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1h
bGx5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAg
ICAgIC8vIHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2Jq
ZWN0LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAg
ICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVz
Y3JpcHRvcjsKICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsK
LSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAg
ICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CiAgICAgfQog
CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE2MTgsOCBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8gQSBnZW5lcmljIGRl
c2NyaXB0b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5n
IHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CiAg
ICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAg
ICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092
ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIG1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBj
dXJyZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NjIs
OCArMTYzMSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUg
cHJvcGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0
RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9
CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3Rp
bmcgcHJvcGVydHkKQEAgLTc4NCw4ICsxNjUzLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0
ZXNFcXVhbChkZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3Jp
cHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBt
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQp
LCBjdXJyZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rp
b25zIG9mIGFuIGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY3MSw3IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2Jq
ZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpT
VmFsdWUgYWNjZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOwogICAgIGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0
ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgx
MiwxMiArMTY4MSwzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
CiAgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVz
Y3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFs
KGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBt
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIHVuc2lnbmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQoY3VycmVudCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAg
ICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0
dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJh
eSBpbmRleCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNp
Z25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2Ug
YXMgYXJndW1lbnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNl
LgorICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQg
b2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxs
IHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIu
OSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJl
dHVybiB0cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMs
IGksIHNsb3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNCwxNyArMjQsMjEgQEAKICNkZWZpbmUgSlNPYmplY3RfaAogCiAjaW5jbHVk
ZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgorI2lu
Y2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5oIgog
I2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4MywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJv
cGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5v
bmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAg
Q09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51
bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChE
b250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19G
aXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJp
YnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBj
bGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxs
IHsKQEAgLTk2LDYgKzEwNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAg
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQg
ZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
QEAgLTEyMCw4ICsxMzMsMTc3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxs
b3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxl
bmd0aCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JM
ZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMg
aXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUg
cHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3Jz
IGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVy
dHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUg
YWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93ID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGlu
aXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAg
ICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8g
dGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRy
eSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAg
ICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2lu
aXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBh
cyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxp
emVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0
b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsK
IAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lv
biBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNo
YWluIGlzIG5vdCBjb25zdWx0ZWQKQEAgLTE0Nyw2ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKQEAg
LTIwMyw4ICszODYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5s
aW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFBy
b3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxp
bmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9y
YWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0
IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAg
ICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAg
ICAgICAgewpAQCAtMjI3LDcgKzQxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
aWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3Rv
cmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0
b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZM
aW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAo
aW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChy
ZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjUsMjEgKzQ1MSwxOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0
dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxlZChnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlz
RnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlz
RnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyByZXR1
cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5zaWJsZSgpOyB9CisgICAgICAgIGJvb2wgaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpIHsgcmV0dXJuICFpc0V4dGVuc2libGUoKSB8fCBzdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCk7IH0KIAogICAg
ICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5j
dGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxp
bmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAg
dm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7
CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRl
cmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAg
IAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAg
ICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZM
aW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVT
dG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVj
dHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAg
LTI5Myw3ICs0NzYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYs
MTQgKzUwOCw3OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0
ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAg
Ly8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmpl
Y3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
KyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9
IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVy
dHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVy
Zmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAg
ICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2Vy
dCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhh
c0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91
IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAg
ICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4K
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhh
cyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8g
cGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8g
b2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4n
dCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5z
dXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAg
ICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAh
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0K
KyNlbHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3Ro
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChKU0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzU5MiwzMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5n
KCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5
U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAg
Ym9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAg
IGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBs
b2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNH
bG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2ln
bmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgo
dW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRP
ZkxpbmVTdG9yYWdlOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3Bl
cnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5Owor
ICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZv
aWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjQ0LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
SlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisg
ICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAg
ICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzI4LDYgQEAgaW5saW5lIHNpemVfdCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5h
bE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVj
dDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzU4LDE3IEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7
CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTU0MCw5ICs4MDYsOSBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFs
dWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5s
aW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsK
IH0KIApAQCAtNTkwLDE1ICs4NTYsMTcgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1Ro
aXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
bG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJl
KCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigp
KQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQo
KSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxp
bmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwK
QEAgLTY4NCw2ICs5NTIsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFT
U0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7
CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5ODEsMTEgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9k
ZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOwor
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBp
ZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAg
ICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlv
bik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwg
c3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMw
LDEzICs5OTksMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
RnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2Ug
PSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUpOworICAgICAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwogICAg
ICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAg
IC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFs
dWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUg
c2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAzLDkgKzEwNzIsOSBAQCBpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3Rv
cmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0
b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1
dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAgLTgzOSwxMSArMTEwOCwxMSBAQCBp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xvYmFsCiBpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJp
YnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0
T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkK
LSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3
T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgp
KTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdl
dENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxE
YXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERh
dGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAgIHB1dERpcmVjdE9mZnNldChnbG9i
YWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1LDYgKzEyMDQsMTEgQEAgQUxXQVlT
X0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAogICAgIHJldHVybiByOwogfQogCitp
bmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6
OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8gVGhpcyBpcyBhIGhlbHBlciBmb3Ig
cGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0IGEgbG9hZCBvciBzdG9yZSBhbmQK
IC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZzZXRzOiBhIHBvaW50ZXIgdG8gdGhl
IG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0MiwxNCArMTIxNiwxNCBAQCBBTFdB
WVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVyOjp3aXRoQ2FsCiBpbmxpbmUgc2l6ZV90IG9mZnNl
dFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAg
aWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0
dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpOworICAgIHJldHVybiBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkgKyBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CiAK
IGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdl
KCk7CiAgICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKG9mZnNldCk7CiB9CkBAIC05NTcsNyArMTIzMSw3IEBAIGlubGluZSBpbnQgaW5kZXhSZWxh
dGl2ZVRvQmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQp
KQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5
bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5lbmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXRE
aXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNT
RVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBib29sIGlzRHluYW1pY1Njb3Bl
KGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlID0gMSA8PCAzOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3JkID0gMSA8PCA0OwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgPSAxIDw8IDU7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDY7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPSAx
IDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3MgVHlw
ZUluZm8gewogICAgIHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGJvb2wgb3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MxKE92ZXJyaWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QpOyB9CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVuKTsg
fQotICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAgIGJv
b2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czIoT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1By
b3BlcnR5Q2FjaGluZyk7IH0KIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zmc2V0
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1ZGUg
IkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNp
bmNsdWRlICJMZXhlci5oIgpAQCAtNjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJz
ZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIERv
UGFyc2VPYmplY3RFbmRFeHByZXNzaW9uOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERh
dGEoKSwgaWRlbnRpZmllclN0YWNrLmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAgICAg
ICAgICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAgICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1f
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdv
dG8gZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyAr
MTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9m
ZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJz
dE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6ZV90
IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3Jh
Z2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKworI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNw
cAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDM3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAKKyNp
bmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoUmVnRXhwTWF0Y2hlc0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZvIFJl
Z0V4cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5KX07CiAKK1JlZ0V4cE1h
dGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICA6IEpT
QXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1
cmUoKSwgYnV0dGVyZmx5KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgICwgbV9zdGF0ZShS
ZWlmaWVkTm9uZSkKK3sKKyAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7
CisgICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Cit9CisKK1JlZ0V4
cE1hdGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCit7
CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAg
UmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJl
Z0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGds
b2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwg
cmVnRXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRjaGVz
QXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNo
ZXNBcnJheS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjggKzI4LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVi
bGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICAg
ICAgICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNB
cnJheVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgICAg
ICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5w
dXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsKLSAgICAgICAgICAgIG1fcmVnRXhwLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOwotICAgICAgICB9CisgICAgICAgIFJlZ0V4cE1h
dGNoZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCosIEpT
U3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIGVudW0gUmVpZmllZFN0
YXRlIHsgUmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwogCiAgICAgcHVi
bGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgUmVn
RXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQs
IFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBh
cnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xv
YmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFy
cmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJh
eTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUo
RXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAg
SlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwogICAgICAgICBKU1N0cmluZyogcmln
aHRDb250ZXh0KEV4ZWNTdGF0ZSopOwpAQCAtNTgsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xMTQsMTEgKzExNiwxMSBAQCBi
b29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6
OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVn
RXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBS
ZWplY3RfaAorI2RlZmluZSBSZWplY3RfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5j
bHVkZSAiRXJyb3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIHJlamVjdChF
eGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit7CisgICAgaWYgKHRocm93RXhjZXB0aW9uKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBtZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gUmVqZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUg
U3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIK
KyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJz
ZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVm
IFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDog
YXR0cmlidXRlcygwKSB7fQorCisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdl
dChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1v
ZGUoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFy
c2VBcnJheVZhbHVlTWFwIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFy
cmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAg
IE5vcm1hbCA9IDAsCisgICAgICAgIFNwYXJzZU1vZGUgPSAxLAorICAgICAgICBMZW5ndGhJc1Jl
YWRPbmx5ID0gMiwKKyAgICB9OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv
cjsKKyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAoKQorICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQorICAgICAgICAsIG1fcmVw
b3J0ZWRDYXBhY2l0eSgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VN
b2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFn
cyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQor
CisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3Mg
PSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0K
KworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cAorICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEFkZFJlc3Vs
dCBhZGQoSlNPYmplY3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRo
ZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZv
aWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJl
bW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0
aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9y
IG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNv
bnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7Cisg
ICAgRmxhZ3MgbV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3Bh
cnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisK
KyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBT
cGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
anNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVu
dHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChj
YXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJh
eSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkp
ICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwor
ICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkp
OworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlz
IGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0
IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0
ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJl
bW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVu
c2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYg
KHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVu
dHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6
OmdldCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09i
amVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAK
KyAgICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KHNldHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAg
YXJncy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFk
ZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUg
dW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkg
aXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRv
IGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkg
JiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJh
dG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRp
bmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIp
OworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0
Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7
CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBz
bG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICgh
Z2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZv
aWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikg
Y29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJp
YnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJl
c3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpT
T2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBp
ZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywg
Z2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9
CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBj
b25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgp
OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwor
ICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFn
ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0
eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0
UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9y
YWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAg
ICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVu
Y2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBV
bmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAg
IH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
b3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsg
fQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQot
ICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJp
dmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCisjaW5j
bHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkg
KzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAK
LVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0
eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxs
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwg
bV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkK
ICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3Jp
dGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUo
Z2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZv
KQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9
IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAg
ICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRU
eXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAg
ICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFz
c0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6
ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZv
KHByZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERh
dGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZv
KHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
SW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTI1MSw2ICsyNTQsOCBAQCB2b2lkIFN0cnVjdHVyZTo6
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKCiAKICAgICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0
dXJlcy5zaXplKCkgLSAyOyBpID49IDA7IC0taSkgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVzW2ldOworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2Jh
bERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJl
LT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUt
Pm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCkpOwogICAgICAgICBtX3Byb3BlcnR5VGFi
bGUtPmFkZChlbnRyeSk7CiAgICAgfQpAQCAtNTAyLDYgKzUwNywzOCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAK
K1N0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHRyYW5zaXRpb25LaW5kKQoreworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0
ZXModHJhbnNpdGlvbktpbmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJ
bmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRy
YW5zaXRpb25LaW5kKTsKKyAgICAKKyAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRp
b24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkgewor
ICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3Vz
ID09IGF0dHJpYnV0ZXMpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0
dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+
bV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICB0
cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFu
c2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bp
bm5lZFByb3BlcnR5VGFibGUpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+
bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNp
dGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5t
X3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJu
IHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlz
IHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1
cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgi
CiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNW
YWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0ds
b2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5z
aW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogCiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNH
bG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0x
NDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0
eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19p
bmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0KICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCisgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5
VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZTsgfQogCiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQo
KTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGds
b2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0KQEAgLTMzNCw2ICszMzgsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsK
KyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBAIC0zNjMsNyArMzcyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5
cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAgICAgICAgIFN0
cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYs
IGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00MTYsNiArNDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNo
Q291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJbmZvIG1fdHlwZUluZm87CisgICAgICAgIEluZGV4
aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxK
U0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgOiAxOwogICAgICAgICBib29s
IG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA6IDE7
CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0gICAgICAg
IHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiA3OworICAgICAgICB1bnNpZ25lZCBt
X2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7CiAgICAgICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNG
dW5jdGlvblRocmFzaENvdW50IDogMjsKICAgICAgICAgdW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5z
aW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBAIC00NjUs
MTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xv
YmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbyk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihn
bG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSk7CiAgICAgICAgIHN0cnVj
dHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRl
ICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vha0dD
TWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTM3LDYgKzM4LDMwIEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNl
IGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRp
dGlvbnMuCisKKy8vIFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFu
c2l0aW9ucyBub3QgcmVsYXRlZCB0byBwcm9wZXJ0aWVzLgorLy8gSWYgYW55IG9mIHRoZXNlIGFy
ZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KK2VudW0g
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZQorfTsKKwor
aW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNp
dGlvbikKK3sKKyAgICByZXR1cm4gdHJhbnNpdGlvbiArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7
Cit9CisKK2lubGluZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBv
bGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2gg
KHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICBy
ZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQor
CiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRw
dHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsKIApAQCAtNDQsNyArNjksMTAgQEAgY2xhc3Mg
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVm
UHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZD4gS2V5OwogICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBLZXkmIHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwLmZpcnN0
LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IHAuc2Vjb25k
OworICAgICAgICAgICAgaWYgKHAuZmlyc3QpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHAu
Zmlyc3QtPmV4aXN0aW5nSGFzaCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5
JiBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvZWNtYV8zL1Jl
Z0V4cC9yZWdyZXNzLTIyMDM2Ny0wMDIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL21vemlsbGEvZWNtYV8zL1JlZ0V4cC9yZWdyZXNzLTIyMDM2Ny0wMDIuanMJ
KHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxh
L2VjbWFfMy9SZWdFeHAvcmVncmVzcy0yMjAzNjctMDAyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw2ICs1Niw3IEBAIHZhciByZSA9IC8oYSl8KGIpLzsKIHJlLnRlc3QoJ2EnKTsKICAgc3RhdHVz
ID0gaW5TZWN0aW9uKDEpOwogICBhY3R1YWwgPSBSZWdFeHAuJDE7CisgIHByaW50KCJhY3R1YWwg
PSAiICsgYWN0dWFsKTsKICAgZXhwZWN0ID0gJ2EnOwogICBhZGRUaGlzKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161593</attachid>
            <date>2012-08-30 17:09:54 -0700</date>
            <delta_ts>2012-08-31 17:23:27 -0700</delta_ts>
            <desc>passes run-javascriptcore-tests</desc>
            <filename>butterflies_patch_29.diff</filename>
            <type>text/plain</type>
            <size>410486</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3MjE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxMyBA
QAorMjAxMi0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQ2FsbGJhY2tPYmplY3QpOgor
ICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTT2Jq
ZWN0UmVmLmNwcDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6YXJyYXlNb2RlRnJvbVN0cnVjdHVyZSk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGph
Y2VuY3lMaXN0OjpBZGphY2VuY3lMaXN0KToKKyAgICAgICAgKEFkamFjZW5jeUxpc3QpOgorICAg
ICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmZyb21PYnNl
cnZlZCk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAgICAg
KEpTQzo6REZHOjptb2RlVG9TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9k
ZVN1cHBvcnRzTGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFBy
b3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgor
ICAgICAgICAoTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwdXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAo
SlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQ
dXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5zaXRpb25TdHVi
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFtZSk6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAgICAgICAoSlND
OjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pv
aW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5o
OgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFn
ZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmNv
cHlIZWFkZXJGcm9tKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppblNwYXJzZU1vZGUp
OgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCk6CisgICAgICAgIChK
U0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRl
eEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2l6ZUZvcik6CisgICAgICAgICogcnVu
dGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpCdXR0ZXJmbHkpOgorICAgICAgICAoSlND
OjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJh
c2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgor
ICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCk6CisgICAgICAgIChKU0M6
OkJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omlu
ZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhP
ZlByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAg
ICAgICogcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QnV0
dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6cmVzaXplQXJyYXkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAgICAgICAgKiBy
dW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Om9m
ZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OkluZGV4aW5nSGVh
ZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Omxlbmd0aCk6CisgICAgICAgIChK
U0M6OkluZGV4aW5nSGVhZGVyOjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hl
YWRlcjo6YXV4V29yZCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBdXhXb3Jk
KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVyZmx5KToKKyAgICAg
ICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eSk6Cisg
ICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk6
CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9K
U0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlv
bik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3RpdmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0
ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnBvcCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpzaGlm
dENvdW50KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50KToKKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAgICAgICAoSlNDOjpK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpjb21wYWN0
Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OkpTQXJyYXkpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojppc0xlbmd0aFdyaXRhYmxl
KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OmJvdW5kRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNv
bnN0cnVjdCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZmlsbEdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRJbmRl
eGVkRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmluYWxpemVBcnJheURhdGEpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3VmVj
dG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmluaXRpYWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb21wbGV0ZUluaXRp
YWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNlSW5kZXhpbmdNb2Rl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om9mZnNl
dEZvckxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nU2hvdWxkQmVT
cGFyc2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFn
ZU9yWmVybyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKEpTQzo6SlNOb25GaW5hbE9iamVjdDo6SlNOb25GaW5hbE9iamVjdCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVh
bGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6Om9mZnNldEluQnV0dGVyZmx5
KToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6aW5kZXhSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0
aXZlVG9CYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1R5cGVJbmZvLmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6aW50ZXJzZWN0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyk6CisgICAgICAgIChK
U0M6OlR5cGVJbmZvOjpvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50
aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6OnBhcnNlKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0Mp
OgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToK
KyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwT2JqZWN0Lmg6CisgICAgICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cmVqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoU3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5RW50cnk6OlNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OlNwYXJzZUFycmF5VmFs
dWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAg
ICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6Om5vdEZvdW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0
eSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6ZW5kKToKKyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlW
YWx1ZU1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlF
bnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OlN0cmluZ09iamVjdDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKFN0cmluZ09iamVjdCk6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGlu
Z1R5cGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhh
c2gpOgorICAgICAgICAqIHRlc3RzL21vemlsbGEvanMxXzYvQXJyYXkvcmVncmVzcy0zMDQ4Mjgu
anM6CisKIDIwMTItMDgtMzAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUcnkgdG8gZml4IHRoZSBRdCBidWlsZDogYWRkIHNvbWUgI2luY2x1ZGVzIHRoYXQs
IGZvciBzb21lIHJlYXNvbiwgb25seSB0aGUgUXQgbGlua2VyIHJlcXVpcmVzLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAi
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gMTI2
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUGFyZW50
OjptZXRob2RUYWJsZTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3Rh
bmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVyc2VjdHNPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgVVN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgCiAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNlbGws
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7
CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVj
dCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0
OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5
IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2
ICsxODksMTcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0
NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAq
LzsgfTsKKwkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzg5MTVF
RDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8q
IEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk3MTVFRDhF
NDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5
ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEMxNUVEOEUzODAwRjE2
N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5k
ZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlBMTVFRDhF
NDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhFMzgwMEYxNjdC
MiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyog
SW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUMxNUVEOEU0
NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAv
KiBSZWplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVE
OEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICov
OyB9OwogCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3
QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NjQsNyArNTc1LDYgQEAKIAkJQTc2
NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZGNTRBMzEzQjI4QUFC
MDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi87IH07Ci0JCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFy
cmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4
MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3
NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07
CiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2
NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05NDUsNiArOTU1LDE3IEBACiAJCTBGQjU0Njc4MTRG
NUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3Rv
cmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheVN0b3JhZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8q
IEJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0Iy
IC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRl
eGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eVN0b3JhZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFy
cmF5VmFsdWVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MzE1RUQ4
RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDEsNyArMTM2Miw2IEBACiAJCUE3NjdGRjlGMTRGNDUwMjkw
MDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAg
LyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5RURCMDgxMTUz
MUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDIwLDYgKzIwNDAsMTcgQEAKIAkJN0VGNkUwQkIw
RUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZl
bnRpb25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFn
ZS5oICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywK
KwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
ICovLAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICov
LAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBl
LmggKi8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5o
ICovLAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKKwkJCQkw
RkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovLAorCQkJ
CTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0
aG9kcy5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNw
cCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLApAQCAt
MjIwNCw3ICsyMjM1LDYgQEAKIAkJCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogU2NvcGVD
aGFpbk1hcmsuaCAqLywKIAkJCQk5MzMwM0ZFODBFNkE3MkI1MDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCAqLywKIAkJCQk5MzMwM0ZFQTBFNkE3MkMwMDA3ODZFNkEgLyogU21hbGxTdHJpbmdz
LmggKi8sCi0JCQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmgg
Ki8sCiAJCQkJQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCAqLywKIAkJCQlBNzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2
YXRpb24uaCAqLywKIAkJCQlCQzE4QzNDMDBFMTZFRTMzMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwICovLApAQCAtMjc2MCw3ICsyNzkwLDYgQEAKIAkJCQlFNDlEQzE2QzEyRUYyOTRF
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5
REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVu
a0pJVC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8qIFN0
b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTA4LDYgKzI5MzcsMTcgQEAKIAkJCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0Mg
LyogREZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2
QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdFQzhDN0ExNUU2RTk1MDAwNTFFOUE5IC8qIE9wY29kZURlZmluaXRpb25zLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1
dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8q
IEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk5MTVF
RDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
N0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3Bl
cnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0Iy
IC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0Iy
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlGMTVF
RDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9m
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5
UHJvZmlsZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlz
IGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUg
dGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8g
MTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYg
dW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkg
PSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0Fy
cmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkK
IAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6
c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5
OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDcgKzE2
NzAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHBy
b3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsK
KyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3BlcnR5
TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5
NCw4ICs4OTQsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFu
ZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTU2LDEw
ICs5NTUsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUu
Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xMzg2LDcgKzEzODUsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xNDA0LDggKzE0MDMsNyBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcg
bWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8g
Q0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2
ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGlj
OgogICAgIAogICAgIGVudW0geyBTaXplID0gMyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3Qo
KSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgIDogbV9raW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDgg
KzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBz
d2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVj
aWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2Fm
ZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
cmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
IDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBv
c3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAg
ICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUg
dG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1v
ZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAg
ICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
LSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhh
c0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Npbmds
ZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2lu
Z2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAg
JiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5
cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAg
ICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0x
NzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9k
CiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAg
ICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAg
ICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoK
LSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
T3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1
cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUgewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0
aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ug
c2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBHZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0Fy
cmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5kcywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMs
CiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEs
NiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBI
ZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBB
bGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUg
Y2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2
ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5
U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisg
ICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwor
I2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2Rl
ZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
CisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBt
b2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0
dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03NCw4ICsxMDEsMTcgQEAgY29uc3QgY2hhciogbW9k
ZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGlu
ZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3
aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTE0LDI1ICsxNTAsNiBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChB
cnJheTo6TW9kCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9y
YWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKLXsKLSAgICBpZiAo
bGVmdCA9PSByaWdodCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgYm9vbCBsZWZ0
SXNKU0FycmF5ID0KLSAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCBs
ZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9vbCByaWdodElz
SlNBcnJheSA9Ci0gICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8IHJp
Z2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYgKGxlZnRJc0pT
QXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1v
ZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKQEAgLTE0Nyw3ICsxNjQsMTUgQEAgaW5s
aW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbQogCiBpbmxpbmUgYm9vbCBtb2Rl
U3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gbW9kZUlzU3Bl
Y2lmaWMobW9kZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmlj
OgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlP
ZmZzZXQoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRU
b0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICBzZXQoZGVzdGluYXRpb25P
cGVyYW5kLAogICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgR2V0QnlPZmZzZXQsIE9w
SW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rp
b24pLApAQCAtMjMwOSw3ICsyMzA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3Rh
dHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFz
ZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2Up
OwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBo
Lm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEg
c3RvcmFnZUFjY2Vzc0RhdGE7CkBAIC0yMzYwLDEzICsyMzYwLDEzIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBh
ZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRU
b0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY3OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgzLDcgKzU4Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0g
ICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9y
YWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDggKzM4MSwxMSBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgbV9n
cmFwaC5yZWYoYXJyYXkpOwotICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Uo
Ci0gICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcElu
Zm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U7CisgICAgICAgIGlmIChtb2RlSXNKU0FycmF5KGFycmF5TW9kZSkpCisgICAgICAgICAg
ICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0gTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmln
aW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJ
bmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAg
ICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZS5yZWYoKTsKICAgICAgICAgTm9kZUlu
ZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI2Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5mbyB7CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBW
YXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAKKyAgICBOb2RlKCkgeyB9CisgICAgCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1
ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRl
eCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05v
dEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8o
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90
RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdl
LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3Vs
dFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwK
ICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAKICNpbmNs
dWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpAQCAtMjI0LDE0ICsyMjUsMTQgQEAgc3RhdGlj
IGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VW
YWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0g
ICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgICAgICBhcnJh
eS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpIHsK
KyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2
YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBKU0FycmF5
OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CisgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCB2
YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzM5LDExICszNDAs
MTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeAogICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICAvLyBGSVhN
RTogdGhlIEpJVCB1c2VkIHRvIGhhbmRsZSB0aGVzZSBpbiBjb21waWxlZCBjb2RlIQotICAgIGlm
IChpc0pTQXJyYXkoYmFzZSkgJiYgYXNBcnJheShiYXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzQXJyYXkoYmFzZSktPmdldEluZGV4KGlu
ZGV4KSk7CisgICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1
aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3Qt
PmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgIH0KIAotICAgIC8vIEZJWE1FOiB0aGUgSklU
c3R1YiB1c2VkIHRvIHJlbGluayB0aGlzIHRvIGFuIG9wdGltaXplZCBmb3JtIQogICAgIGlmIChp
c0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJhc2UpLT5jYW5HZXRJbmRleChpbmRleCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmcoYmFzZSktPmdldEluZGV4KGV4
ZWMsIGluZGV4KSk7CiAKQEAgLTUzMiwxNSArNTM0LDE1IEBAIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNl
PihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZh
bHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBp
bmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAg
ICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0
IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBB
U1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAgICAgICBKU0FycmF5OjpwdXRC
eUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHRydWUpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCkBAIC01NDksMTUgKzU1MSwxNSBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3Qp
OwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJv
dW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBpbnQzMl90IGlu
ZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsK
ICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBn
ZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAg
IEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1
dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4
ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI5NCwyMCArMTI5NiwyOSBAQCB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZShpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSks
ICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9m
TGluZUNhcGFjaXR5ICsgMSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAor
ICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBl
eGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4ocmVzdWx0KSArIDEpICsgbmV3U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChl
eGVjLT5nbG9iYWxEYXRhKCksIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7Cit9CisKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
KQoreworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBv
YmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sK
KyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQp
OwogfQogCiBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3Qg
YSwgaW50MzJfdCBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHR5cGVkZWYgc2l6
ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXIKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJ
T04gKCpTX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlw
ZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19P
UEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJy
YXkqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxs
RnJhbWUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNK
SikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsK
QEAgLTEwNSw4ICsxMDUsMTAgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShF
eGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7CiB0eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsK
LXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3Rh
dGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsK
IHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0
YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKIAogLy8gVGhlc2Ugcm91dGluZXMg
YXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJh
dGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld09iamVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkBAIC0xMzgsOCArMTQwLDggQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVS
TkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNB
cnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9J
TlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5
Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4
ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwpAQCAtMTg1LDYg
KzE4Nyw4IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24KIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVj
U3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdl
V2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1By
b3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZf
SU5URVJOQUw7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlv
biBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJu
IGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIg
b3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgR2V0UHJvcGVydHlTdG9yYWdlOiAKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAogICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTIgKzE5OSwxMiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0
ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CiAjZW5kaWYKICAgICB9IGVsc2Ug
ewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmFkZHJlc3NPZk91dE9mTGlu
ZVN0b3JhZ2UoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2Jq
ZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfQogCkBA
IC0yNTMsMTAgKzI1MywxMCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRl
KiBlCiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNh
c2VzOwogICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAg
ICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJK
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDIz
LDcgKzQyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3Jh
dGNoR1BSKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2Vsc2UKQEAgLTQ3Myw3ICs0NzMsNyBAQCBz
dGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIp
OwogI2Vsc2UKQEAgLTY4MSwxNyArNjgxLDE3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNl
U3R1YigKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAg
ICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKICAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNl
dCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwor
ICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC04MzAsNyArODMwLDcgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc2l6ZV90IG9s
ZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjMp
OworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJy
YW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwogICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
QEAgLTg0NCw3ICs4NDQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1
ZTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NTQsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNp
dGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkK
LSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7
Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
KSB7CkBAIC04NjMsOSArODYzLDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHVi
KAogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwor
ICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgICAgICAgICAgCkBAIC0xMDIwLDYg
KzEwMjAsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAg
ICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNr
aXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3Ry
dWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgICAg
IGlmIChoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAgICAgIG5v
cm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29k
ZU8KICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0
LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KC0xKSkpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZXN1bHRHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxv
YWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAg
ICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTUzNCw3
ICs1MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRp
YmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0
aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmNvbnZl
cnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
MzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
dmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKIAogICAgIEpJ
VENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtMjQzMiwyMyAr
MjQzMiwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToK
LSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IHRo
ZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwKLSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9p
bnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7
CkBAIC0yNTM4LDYgKzI1MzIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZCkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoZSBiYXNlIG1heSBub3QgYmUgbmVjZXNzYXJ5
IGZvciBzb21lIGFycmF5IGFjY2VzcyBtb2Rlcy4gQnV0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8g
a2VlcCBpdCBhbGl2ZSB0byB0aGlzIHBvaW50LCBzbyBpdCdzIGxpa2VseSB0byBiZSBpbiBhIHJl
Z2lzdGVyIGFueXdheS4gTGlrZWx5CisgICAgICAgIC8vIG5vIGhhcm0gaW4gbG9ja2luZyBpdCBo
ZXJlLgogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CiAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIp
OwogICAgICAgICAKQEAgLTI1NDUsOCArMjU0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJh
eTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Cisg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIC8vIE1hcCBiYXNl
LCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVn
aXN0ZXIuCkBAIC0yNTczLDggKzI1NjksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0Fy
cmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZz
ZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhh
cnJheU1vZGUpKQogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAg
ICBiYXNlLnVzZSgpOwpAQCAtMjU4Nyw5ICsyNTgzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVu
Z3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwogCiAgICAgICAgICAgICBsZW5ndGhEb2VzTm90
TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CkBAIC0yNTk4LDcgKzI1OTQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CiAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9k
ZSkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJy
YXlCb3VuZHMsIHRoaXMsCkBAIC0yNzY3LDE3ICsyNzYzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJl
IGxlbmd0aHMuCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9y
YWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zm
c2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIApA
QCAtMjgwMywxOCArMjc5OSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNl
czsKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSks
IHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7
CiAgICAgICAgIApAQCAtMzQwMiwxNCArMzM5OCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0
eVN0b3JhZ2U6IHsKKyAgICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBz
dG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTM3NTIsNyArMzc0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICNlbmRpZgogICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CiAgICAg
ICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQ
Uik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUlu
Zm9HUFIsIEpJVENvbXBpbGVyOjpTY2FsZVB0ciwgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIp
ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTkgKzMxNSwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBl
eHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czogewotICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBh
bnRpY2lwYXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCi0gICAgICAgIC8vIHN1YnN0YW50aWFsbHkg
Y2hhbmdlZCBpbiB0aGUgZnV0dXJlLgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0
LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
dGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
OCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzEyNywxMSArMzEzNiw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBz
dG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1fc3RvcmFn
ZU9mZnNldCksIHN0b3JhZ2VSZWcpOwpAQCAtMzI2MCwxMyArMzI2NCwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgp
KTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgY2FzZSBB
UlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMzYyLDYgKzMzNjUs
MjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkK
IHsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlT
dG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSKTsKKyAgICAg
ICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKICAgICAgICAgCkBAIC0zMzgzLDEzICszNDAwLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
c2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAgICAgICAgCi0gICAgbV9q
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIo
c2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUiwg
bV9jb21waWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIHNpemVfdCBvbGRTaXplID0g
bm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBuZXdTaXplID0gb2xk
U2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKKyAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwgbmV3
U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkBAIC0zNDAyLDkgKzM0MzcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIAogICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogICAgICAgICAKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IG5v
ZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNp
emUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0
b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKICAgICAg
ICAgCiAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5p
bmcsIHNjcmF0Y2hHUFIyKTsKQEAgLTM0MTUsMTMgKzM0NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKICAgICAgICAgCiAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdT
aXplKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFs
dWUpKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNo
R1BSMSA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkg
ewogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VH
UFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNo
R1BSMSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIAogICAgIHN0
b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE1Niw2ICsxMTU2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25f
RU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0
LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMzY4LDcgKzEz
NzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMTY2Niw3ICsxNjc2LDcgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFC
SV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1Bh
eWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1Rh
ZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXls
b2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKQEAgLTIxNDEsNyArMjE1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkNsYXNzVHlwZTo6c19p
bmZvKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3Qn
cyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7
CiAgICAgfQogCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0cnVjdHVyZSBiZSBl
cXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIG92ZXJz
aXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAotICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRl
U2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrZWRC
b29sZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRC
b29sZWFuIHRyeUFsbG9jYXRlT3ZlcnNpemUoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRC
b29sZWFuIHRyeVJlYWxsb2NhdGVPdmVyc2l6ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQz
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJh
cnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4g
dm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQg
cmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRBbGxvY2F0
ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKKyAgICAgICAgdm9pZCBl
bWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2Us
IFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBl
bWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwg
UmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0FycmF5
KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2Vs
bFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIp
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0
aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHIKICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIEFkZHJlc3MocmVzdWx0LCBKU0NlbGw6OmNs
YXNzSW5mb09mZnNldCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9w
ZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRy
ZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTQzNCw3ICs0MzQsNyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09i
amVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gp
OwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qg
c2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgcHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdpc3Rl
cklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2Jh
bERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCkBAIC00NDMsMzcgKzQ0MywzMiBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAgICAgc3RvcmVQdHIocmVz
dWx0LCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG5lZ1B0cihyZXN1bHQp
OwogICAgIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9h
ZEVuZCksIHJlc3VsdCk7Ci0gICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplKSwgcmVzdWx0KTsK
KyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUgLSBvZmZzZXRGcm9tQmFzZSksIHJlc3VsdCk7
CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1
ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lz
dGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQogewogICAgIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXplX3QgaW5p
dGlhbFN0b3JhZ2UgPSBKU0FycmF5OjpzdG9yYWdlU2l6ZShpbml0aWFsTGVuZ3RoKTsKKyAgICBz
aXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOwogCiAgICAgLy8gV2UgYWxsb2Nh
dGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0
aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9u
LgotICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc3RvcmFnZVJl
c3VsdCk7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRo
ZSBjZWxsIGZvciB0aGUgYXJyYXkuCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0Fy
cmF5LCBmYWxzZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFy
cmF5U3RydWN0dXJlKCkpLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAogICAgIC8vIFN0b3Jl
IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZVB0
cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6YWxs
b2NCYXNlT2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN0b3JlMzIo
SW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Om51bVZh
bHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgp
LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0
LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnNwYXJzZU1h
cE9mZnNldCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxsb2NhdGVkIEFycmF5U3Rv
cmFnZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFk
ZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAKLSAgICAv
LyBTdG9yZSB0aGUgdmVjdG9yIGxlbmd0aCBhbmQgaW5kZXggYmlhcy4KLSAgICBzdG9yZTMyKElt
bTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MoY2Vs
bFJlc3VsdCwgSlNBcnJheTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLQotICAgIC8vIEluaXRpYWxp
emUgdGhlIHNwYXJzZSB2YWx1ZSBtYXAuCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwg
QWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzcGFyc2VWYWx1ZU1hcE9mZnNldCgpKSk7Ci0K
LSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgorICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZXMgd2UgaGF2ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3Jh
Z2VQdHIpOwpAQCAtNDg1LDE2ICs0ODAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0
ZUpTQXJyYXkodW5zCiAgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdl
UmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQotCi0g
ICAgLy8gWmVybyBvdXQgdGhlIHJlbWFpbmluZyBzbG90cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBsZW5ndGg7IGkgPCBpbml0aWFsTGVuZ3RoOyBpKyspIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkpKTsKLSNlbHNlCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludD4oSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0jZW5k
aWYKLSAgICB9CiB9CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NjksNyArMTY2OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVj
dGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6
ZShsZW5ndGgpKSkgeworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6
OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7
CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXkpOwog
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMTY4OCw3ICsxNjg4
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElm
IHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0
aGUgcHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4K
ICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBp
ZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkp
CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAs
IDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVk
U3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdo
IHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAx
MjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJl
Z1QxKTsKICAgICAKICAgICAvLyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIEpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFk
ZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDEwICsxMTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlv
bgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVy
ZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpT
QXJyYXk6OnNfaW5mbykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEhhc0FycmF5U3RvcmFnZSkpKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CiAKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBp
ZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGlu
ZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdl
Q2FwYWNpdHkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAg
IG5lZzMyKG9mZnNldCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJ
bmxpbmUubGluayh0aGlzKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdl
dERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2lnbkV4dGVuZDMy
VG9QdHIob2Zmc2V0LCBvZmZzZXQpOwpAQCAtMjM5LDEwICsyMzksMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
ICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3RvcmVS
ZXN1bHQodGhpcyk7CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkp
KS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7CiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQwMyw3
ICs0MDMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAg
UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0
cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVy
ZUNoZWNrKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQg
PSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3Bl
cnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIERhdGFMYWJlbENvbXBhY3QgZGlz
cGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRk
cmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAgIExh
YmVsIHB1dFJlc3VsdCh0aGlzKTsKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29t
cGFyZTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
IFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVs
dFN0cnVjdHVyZSkpKSk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QyKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJl
bCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBEYXRhTGFiZWwzMiBk
aXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwg
QWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwogCiAgICAgRU5EX1VO
SU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKQEAgLTUwOCw4ICs1MDgsOCBA
QCB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwotICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRy
ZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNo
ZWRPZmZzZXQpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNp
emVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0KIAog
Ly8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5
IG92ZXJ3cml0ZSBiYXNlLgpAQCAtNTIwLDggKzUyMCw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkg
KiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0
SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQpAQCAtNTMxLDggKzUzMSw4IEBAIHZvaWQgSklUOjpj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBsb2FkUHRyKGJhc2UtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
Y2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsK
KyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0KTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02NTcsMTEgKzY1NywxMSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QzLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJh
eVByb2ZpbGUoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVj
dHVyZSgpKTsKICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJy
YW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAKICAgICAvLyBD
aGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDMpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2xlbmd0aCkpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIEFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlZ1QyKTsKICAgICBKdW1wIGZhaWx1cmVD
YXNlczIgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7CiAKICAg
ICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MTYsOCArMTUxNiw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IK
ICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlID0g
YXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc3Rh
Y2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gYmFz
ZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0g
ICAgYmFzZS0+c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdT
dHJ1Y3R1cmUpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091dE9mTGlu
ZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0
dGVyZmx5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHJldHVy
biBiYXNlOwogfQpAQCAtMjQzNCw3ICsyNDM0LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdz
WzFdLmpzVmFsdWUoKTsKLQorICAgIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgp
ICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQg
PSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3Ry
aW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7CiAgICAgICAgICAgICBDSEVDS19G
T1JfRVhDRVBUSU9OKCk7CkBAIC0yNTI3LDEyICsyNTI3LDEyIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUlu
dDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAg
ICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBq
c0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNh
blNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAg
ICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAg
b2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNh
bGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmlj
dE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5k
ZXgoY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RN
b2RlKCkpOwogICAgIH0gZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODgyLDcgKzg4Miw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQo
ZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIExM
SU5UX09QKDEpID0gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNT
X1NMT1cKICAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXND
YWNoZWFibGUoKQpAQCAtOTAxLDcgKzkwMSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfYnlfaWQKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJ
bklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxp
bnRfb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9w
ZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05NjMsNyArOTYzLDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBwY1s2XS51LnN0cnVjdHVyZS5zZXQo
CiAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtOTkxLDcgKzk5
MSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHBjWzBdLnUub3Bjb2RlID0gYml0d2lzZV9jYXN0PHZvaWQqPigmbGxpbnRfb3BfcHV0X2J5
X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0g
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1
dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNzAsMTIgKzEwNzAsMTIg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogICAgIAogICAgIGlm
IChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBz
dWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7
Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAg
ICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpz
QXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2ts
eShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRh
LCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJheTo6
cHV0QnlJbmRleChqc0FycmF5LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3Ry
aWN0TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAgICB9CiAgICAgICAg
IGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyNjc5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsMjEgKzk0MSwyMSBAQCBfbGxpbnRfb3BfaXNfc3Ry
aW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJv
cGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBhc3NlcnQo
bWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwg
b2sgZW5kKQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKLSAgICBsb2FkcCBKU09iamVjdDo6bV9v
dXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAg
bG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRpIFRhZ09mZnNl
dCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFk
ZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQ
YXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJ
bmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxv
YWQKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zm
c2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAgICAgYmlsdCBwcm9wZXJ0eU9m
ZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKLSAgICBsb2FkcCBKU09iamVj
dDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdl
CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmpl
Y3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAogICAgIGptcCAucmVhZHkKIC5p
c0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpT
RmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAx
KSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToK
LSAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9h
ZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmpl
Y3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRP
ZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5n
SGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5k
CiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzk0LDIwICs3OTQsMjAgQEAgX2xsaW50
X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5v
dEZpbmFsKHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkK
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElu
bGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1Bv
aW50ZXIKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0
b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0s
IHZhbHVlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2Vd
LCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEp
ICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJp
YWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkK
ICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlz
SW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRT
dG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXRBc0ludAogICAgIHN4aTJwIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0
QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0
OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmpl
Y3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBv
YmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFs
dWUKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2
YWx1ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKQEAgLTExMjYsOCAr
MTEyNiw4IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9n
bG9iYWxEYXRhW3QyXSwgdDIKICAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0lu
Zm9bdDJdLCB0MgogICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MiwgLm9w
R2V0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QwXSwgdDMKLSAgICBi
aWFlcSB0MSwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKKyAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAgIGJpYWVxIHQxLCAtc2l6
ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fbGVuZ3RoW3QzXSwgLm9wR2V0
QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0
b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxT
bG93CkBAIC0xMjExLDggKzEyMTEsOCBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0MF0sIHQwCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRh
Ojpqc0FycmF5Q2xhc3NJbmZvW3QwXSwgdDAKICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJ
bmZvW3QzXSwgdDAsIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpYWVxIHQyLCBKU0FycmF5OjptX3Zl
Y3Rvckxlbmd0aFt0MV0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3Rv
cmFnZVt0MV0sIHQwCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKKyAg
ICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwogICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5CiAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Ogog
ICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwpAQCAtMTIyMyw5ICsxMjIzLDkgQEAgX2xsaW50
X29wX3B1dF9ieV92YWw6CiAKIC5vcFB1dEJ5VmFsRW1wdHk6CiAgICAgYWRkaSAxLCBBcnJheVN0
b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCBBcnJheVN0b3JhZ2U6
Om1fbGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBdLCAub3BQdXRC
eVZhbFN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0MiwgdDEKLSAgICBzdG9yZWkgdDEsIEFycmF5
U3RvcmFnZTo6bV9sZW5ndGhbdDBdCisgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4V29yZFt0MF0KICAgICBqbXAgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDExIEBAIGVsc2UKICAgICBjb25zdCBQYXls
b2FkT2Zmc2V0ID0gMAogZW5kCiAKKyMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0
ZXJmbGllcy4KK2NvbnN0IElzQXJyYXkgPSAxCitjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Citj
b25zdCBBbGxBcnJheVR5cGVzID0gMTUKKwogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmlu
Z1R5cGUgPSA1CiBjb25zdCBPYmplY3RUeXBlID0gMTMKQEAgLTMxOCw3ICszMjMsNyBAQCBtYWNy
byBhbGxvY2F0ZUJhc2ljSlNPYmplY3Qoc2l6ZUNsYXNzSW5kCiAgICAgICAgIGxvYWRwIGNsYXNz
SW5mb09mZnNldFtzY3JhdGNoMV0sIHNjcmF0Y2gyCiAgICAgICAgIHN0b3JlcCBzY3JhdGNoMiwg
W3Jlc3VsdF0KICAgICAgICAgc3RvcmVwIHN0cnVjdHVyZSwgSlNDZWxsOjptX3N0cnVjdHVyZVty
ZXN1bHRdCi0gICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW3Jl
c3VsdF0KKyAgICAgICAgc3RvcmVwIDAsIEpTT2JqZWN0OjptX2J1dHRlcmZseVtyZXN1bHRdCiAg
ICAgZW5kCiBlbmQKIApAQCAtNDkzLDcgKzQ5OCw3IEBAIG1hY3JvIHdpdGhJbmxpbmVTdG9yYWdl
KG9iamVjdCwgcHJvcGVydHkKIGVuZAogCiBtYWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmpl
Y3QsIHByb3BlcnR5U3RvcmFnZSwgY29udGludWF0aW9uKQotICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0XSwgcHJvcGVydHlTdG9yYWdlCisgICAgbG9hZHAgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQogICAgICMgSW5kaWNh
dGUgdGhhdCB0aGUgcHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyIG5vdyBwb2ludHMgdG8gdGhlCiAg
ICAgIyBwcm9wZXJ0eSBzdG9yYWdlLCBhbmQgdGhhdCB0aGUgb2JqZWN0IHJlZ2lzdGVyIG1heSBi
ZSByZXVzZWQKICAgICAjIGlmIHRoZSBvYmplY3QgcG9pbnRlciBpcyBub3QgbmVlZGVkIGFueW1v
cmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDggQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBcnJheVBy
b3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJh
eUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJ
bmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCisKKy8vIE92ZXJ2aWV3
IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUg
c3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNP
YmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBz
cGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1u
dW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNl
bnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMg
Z3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMg
b25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQg
MzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQg
d2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwg
cHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4g
dW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJl
IGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9y
YWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBo
YW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChp
IDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRo
ZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1v
ZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICog
V2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3Rv
cmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5z
aXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChh
IHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5
TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBX
aGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRo
ZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5
LgorCisvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJe
MzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyBy
aXNrIG9mIG92ZXJmbG93LgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpKQorCisvLyBU
aGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWlu
KCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmll
cywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0g
aXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZp
bmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RP
Ul9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxv
Y2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBs
ZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4g
NFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVy
byBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVm
aW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNl
IGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5
IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZl
Y3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzgg
ZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQor
eworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGgg
LyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGlu
Z0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQu
c2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4
aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGlu
Z0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWls
ZGVyLmgiCkBAIC0xMTQsOSArMTE2LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlw
ZTo6c19pbmZvID0KIEBlbmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseShleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBl
KiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4o
KmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5
cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogewogfQogCkBAIC0yOTIsOCArMzAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxl
bmd0aDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNP
YmotPmNhbkdldEluZGV4KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldElu
ZGV4KGspOworICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAg
ICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAg
ICAgCkBAIC00MTMsMTAgKzQyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAog
ICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5
LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVp
Y2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBl
bGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQo
ZWxlbWVudC50b1VTdHJpbmdJbmxpbmUoZXhlYykpOwogICAgICAgICAgICAgZWxzZQpAQCAtNjI4
LDcgKzYzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0g
JkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VNb2RlKCkpIHsK
KyAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNB
cnJheSh0aGlzT2JqKS0+aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICBpZiAoaXNO
dW1lcmljQ29tcGFyZUZ1bmN0aW9uKGV4ZWMsIGNhbGxUeXBlLCBjYWxsRGF0YSkpCiAgICAgICAg
ICAgICBhc0FycmF5KHRoaXNPYmopLT5zb3J0TnVtZXJpYyhleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25l
KQpAQCAtNzg4LDkgKzc5OCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAg
ICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwg
bGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAo
IWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFs
dWUgdiA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBw
bHlUaGlzKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgdik7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKQEAgLTg0Niwx
MSArODU2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRD
YWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYm
ICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
IWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5
LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTkwOSwxMSArOTE5
LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNh
Y2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVj
LT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5
LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5H
ZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtOTY1LDExICs5NzUsMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVk
Q2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNh
bkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtMTAxNywxMSArMTAyNywxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxs
KGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhj
ZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTEwNzUsOCArMTA4NSw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBl
bHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewotICAgICAgICBydiA9IGFy
cmF5LT5nZXRJbmRleCgwKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXhRdWlja2x5KDApKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KDApOwog
ICAgICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKQEAgLTEwOTcsOCArMTEwNyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwogICAg
ICAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0
SW5kZXgoaSkpKQotICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAg
ICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpKQorICAgICAg
ICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUg
d2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2Miw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAg
ZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKXsKLSAgICAg
ICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAgZWxzZSBpZiAoYXJyYXkg
JiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSl7CisgICAgICAgIHJ2ID0g
YXJyYXktPmdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKTsKICAgICAgICAgaSA9IDE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMTc0
LDkgKzExODQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0QXJndW1lbnQoMCwgcnYpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2Fu
R2V0SW5kZXgoaWR4KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaWR4KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMg
YmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRo
Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleChp
ZHgpKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldElu
ZGV4UXVpY2tseShpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwg
anNOdW1iZXIoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDMsIGFy
cmF5KTsKICAgICAgICAgICAgIHJ2ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAg
ICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5
Kik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAg
ICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBl
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7Ci0g
ICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdp
dGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFn
ZV9oCisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZh
bHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5
LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdl
CisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRh
aW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBz
ZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUg
bWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRv
IHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBw
b2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2lu
ZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9y
YWdlKCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0
ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJy
YXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9y
YWdlKiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAg
SW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6
OmZyb20odGhpcyk7IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhl
IGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9p
ZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdv
cmQobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4
aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAg
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAg
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tKGNvbnN0IEFycmF5U3RvcmFn
ZSYgb3RoZXIpCisgICAgeworICAgICAgICBtX3NwYXJzZU1hcCA9IG90aGVyLm1fc3BhcnNlTWFw
OworICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251
bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5t
X2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAor
ICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NwYXJzZU1h
cCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAgICAKKyAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsKKyAg
ICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nl
cy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OworICAgIHVpbnRwdHJfdCBt
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1
aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
dmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyBy
ZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9y
TGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdI
ZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1faW5kZXhCaWFzKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9zcGFyc2VNYXApOyB9CisgICAgCisgICAgc3RhdGljIHNp
emVfdCBzaXplRm9yKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRl
cmZseV9oCisjZGVmaW5lIEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5o
IgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdl
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90
VmlzaXRvcjsKK3N0cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5
KCkgeyB9IC8vIE5vdCBpbnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIHNp
emVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID8g
aGFzSW5kZXhpbmdIZWFkZXIgOiB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJl
Q2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyAo
aGFzSW5kZXhpbmdIZWFkZXIgPyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIDogMCkgKyBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9t
QmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4o
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVy
dHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1eFdvcmQoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyBy
ZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
TGVuZ3RoKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxp
emVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5p
bml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVy
KiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9
CisgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7
IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgp
IHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMg
aW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVv
ZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSk7CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9k
cyBwZXJmb3JtIHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQor
ICAgIC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24g
b2NjdXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4
aGF1c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUg
YWxsb2NhdGlvbgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUg
cGF0aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0
bHkgaW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9s
ZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1
dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkg
aXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJp
Z2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9i
YWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNh
cGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3Qg
Y2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVy
LgorICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51
bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKyNkZWZp
bmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
eworICAgIHZvaWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KHNpemUsICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJvbUJhc2UodGVt
cCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIs
IGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0
aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
aWYgKGhhc0luZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigp
ID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAgICAgICAgdmlz
aXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksCisg
ICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJl
KQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVj
dHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cit9CisKK2lubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywg
c2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1Byb3BlcnR5Q2Fw
YWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgIG1lbWNweSgKKyAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAt
IG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGJhc2UocHJlQ2FwYWNpdHksIG9sZFByb3Bl
cnR5Q2FwYWNpdHkpLAorICAgICAgICB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVy
dHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
K3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgb2xkUHJvcGVydHlDYXBh
Y2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7
CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIGdsb2JhbERhdGEsIG9s
ZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlS
aWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9s
ZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3Bl
cnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0
eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXpl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHBy
b3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dB
cnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4g
Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihv
bGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6
ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBuZXdQ
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0lu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBt
YWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgd2UgdXNlZCB0aGUgcHJvcGVydHkgc2l6ZSwKKyAg
ICAvLyBub3QgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQqIHRvID0gcmVzdWx0LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAgdm9pZCogZnJvbSA9IHByb3BlcnR5U3Rv
cmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWluKAor
ICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFzSW5kZXhpbmdIZWFk
ZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgdG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykpOworICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3
UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAgIGds
b2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFk
ZXIsCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlciwg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNs
b3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQg
cHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBr
bm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2Ug
ZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisgICAg
Ly8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28g
dGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBvdmVy
aGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29t
cGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBz
aXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAvLyB3
ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBw
b2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlh
YmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtu
b3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9m
U2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHBy
b3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0
eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9y
YWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJP
ZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5zaGlm
dCgpLCBhYm92ZS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHBy
b3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3RzLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBw
cm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVy
dHlTdG9yYWdlKCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRl
ZiB2b2lkICgqR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0
T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAgICAg
ICAgdHlwZWRlZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIp
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0
aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVt
YmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVz
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpoYXNJbnN0YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJ
bmRleGluZ0hlYWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUgIlBy
b3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwor
Y2xhc3MgU3RydWN0dXJlOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdI
ZWFkZXIgeworcHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3Rv
ciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQK
KyAgICAvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIGVudW0geyBtYXhpbXVt
TGVuZ3RoID0gMHgxMDAwMDAwMCB9OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVv
ZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkF1eFdvcmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fYXV4
V29yZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2xlbmd0aCk7IH0KKyAgICAKKyAgICAv
LyBUaGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4aW5nSGVhZGVyIGlzIGFsbCB6ZXJvJ3Mg
aXMgcGFydCBvZiB0aGUKKyAgICAvLyBjb250cmFjdCBvZiB0aGlzIGNsYXNzIGFuZCBzaG91bGQg
bm90IGJlIGNoYW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRlcGVuZAorICAgIC8vIG9uIGl0LgorICAg
IEluZGV4aW5nSGVhZGVyKCkKKyAgICAgICAgOiBtX2F1eFdvcmQoMCkKKyAgICAgICAgLCBtX2xl
bmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aCh1aW50MzJfdCBs
ZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOwor
ICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgYXV4
V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29yZCh1aW50MzJf
dCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5k
ZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20oY29uc3Qg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3Jh
Z2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdI
ZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0
eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9y
YWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3Rv
cmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3Bl
cnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3Rv
cmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0
dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFy
ZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8v
IHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2Fw
YWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90IG1fYXV4V29yZDsgLy8gVGhlIG1lYW5p
bmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgorICAgIHVpbnQzMl90
IG1fbGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2Ug
YW5kIGl0cyB0eXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRl
eGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhp
bmdIZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChM
SUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRl
eEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZpbmUgSW5kZXhpbmdUeXBlX2gKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdz
IGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9u
YWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUg
dXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4K
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAgICAgID0gMTY7
IC8vIE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUg
cGFzdC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElz
QXJyYXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAg
ICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxl
IHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAg
ICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBo
aXN0b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9y
eSAgPSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kZXhpbmdUeXBlIHR5
cGUpCit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBDbGFzc0luZm8gSlNBY3Rp
dmF0aW9uOjpzX2luZm8gPSB7CiAKIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKICAg
ICA6IEJhc2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCksIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkpCi0gICAg
LCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIDApCisgICAg
LCBtX3JlZ2lzdGVyQXJyYXkoMCkKICAgICAsIG1fbnVtQ2FwdHVyZWRBcmdzKG1heChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgp
KSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRW
YXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2lzVG9ybk9mZihmYWxzZSkKQEAgLTY3LDEyICs2Nywx
MiBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIC8vIE5vIG5lZWQgdG8g
bWFyayBvdXIgcmVnaXN0ZXJzIGlmIHRoZXkncmUgc3RpbGwgaW4gdGhlIFJlZ2lzdGVyRmlsZS4K
LSAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJBcnJheS5nZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNP
YmplY3QtPm1fcmVnaXN0ZXJBcnJheTsKICAgICBpZiAoIXJlZ2lzdGVyQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZUluQnl0
ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRoaXNPYmpl
Y3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJh
eS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7CisgICAgdGhp
c09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rlck9mZnNl
dCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBpdCBwb2lu
dHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzMSw3ICsxMzEsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2
YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBY3Rp
dmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTQ2LDggKzE0Niw4
IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0
LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0
IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
KyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGlu
bGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUo
Ym9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyArOTUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplKCk7CiAg
ICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAgICBTdG9y
YWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0
ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0
IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9yZWdpc3Rl
ckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFy
aWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmls
ZS4KICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAgICAgICBpbnQgbV9udW1DYXB0
dXJlZFZhcnMgOiAzMDsKICAgICAgICAgYm9vbCBtX2lzVG9ybk9mZiA6IDE7CkBAIC0xNjQsNyAr
MTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwg
dG87ICsraSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
bV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwogCi0gICAgICAgIG1fcmVnaXN0ZXJBcnJheS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIG1fcmVnaXN0ZXJBcnJheSA9
IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwogICAgICAg
ICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAgLTI0LDEz
ICsyNCwxNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNv
cGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0
YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVh
ZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5j
bHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsNDgwICs0OSwyMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NFUlRfSEFT
X1RSSVZJQUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQot
Ly8KLS8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25l
IG9mIHRocmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0
eSBtYXAuCi0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBtYXAgb2Yg
YXJyYXkgZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRp
ZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKLS8vIGFz
IGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4g
IE1BWF9BUlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9w
ZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKLS8vIGlu
dGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3Jl
ZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0aWVzIHdp
dGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRl
Z2VyIGksCi0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5k
ZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVjdG9yIG9y
IHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhl
IGZvbGxvd2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVj
dG9yLAotLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBj
YXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAoTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZh
bHVlIHdpbGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBv
ciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKLS8vICAg
ICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5n
IHVzZWQgd2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBv
ZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChNQVhfU1RP
UkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
YWx3YXlzIGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8vIFRoZSBk
ZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRo
ZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdl
Ci0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3Ro
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUg
KHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVv
ZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBt
YWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwot
Ly8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81
OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkK
LS8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2
ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZG
RkZGRkVVCi0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVt
YmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFycmF5IHRo
YXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJh
eSgxMjMpKQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1cHBlciBi
b3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUg
Zmlyc3QgZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRV
Ci0KLS8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVz
ZSBhIHNwYXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5kaWNlcyBn
cmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBh
IHZlY3RvcgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhh
biB0aGF0LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11
bHRpcGxpZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0geyJBcnJh
eSIsICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcnJheSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFy
cmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBsZSBoZXVy
aXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAw
LgotLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9H
Uk9XIGRlZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1
ZXM7Ci19Ci0KLXN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dF
eGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHRocm93RXhjZXB0aW9u
KQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNB
cnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKK0J1dHRlcmZseSog
Y3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewotfQotCi0jZW5kaWYKLQot
dm9pZCBKU0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIHVuc2lnbmVkIGlu
aXRpYWxWZWN0b3JMZW5ndGggPSBCQVNFX1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWduZWQgaW5pdGlh
bFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2
b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNI
KCk7CiAgICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3
U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBt
X3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMDsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAg
ICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IoMCkpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluaXRpYWxMZW5ndGgpOwor
ICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1h
cCA9IDA7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CiAjaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSBmYWxzZTsKKyAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAg
IHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOwogI2VuZGlmCi0KLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLUpTQXJyYXkqIEpTQXJyYXk6OnRyeUZpbmlzaENyZWF0
aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAg
QVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIC8vIENoZWNrIGZvciBsZW5ndGhzIGxh
cmdlciB0aGFuIHdlIGNhbiBoYW5kbGUgd2l0aCBhIHZlY3Rvci4KLSAgICBpZiAoaW5pdGlhbExl
bmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IG1heChpbml0aWFsTGVuZ3RoLCBCQVNF
X1ZFQ1RPUl9MRU4pOwotICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VT
aXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0g
ICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdl
U2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFn
ZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGlu
aXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwot
ICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7Ci0KLSNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4ID0gMDsKLSAgICBtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0
cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGhpczsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIG9iamVjdC4KLXZvaWQgSlNB
cnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVu
Y3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwotICAgIHRoaXNPYmplY3QtPmRlYWxsb2Nh
dGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3Vs
dCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkpCi17
Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFk
ZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAg
ICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Ci0gICAgICAgIEhlYXA6Omhl
YXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENh
cGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJy
YXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3Qg
YWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2Fz
ZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAg
Ly8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAt
IHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5p
c0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAg
ICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKLSAgICAgICAg
aWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5
LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKLSAg
ICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsK
LSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQotaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0
IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5k
ICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIElu
IHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBh
cnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhp
bmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQu
aXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0
ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2li
bGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50cnkuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkg
Y29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHZh
bHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAg
ICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAg
aWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQotCi1pbmxp
bmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwg
YXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChF
eGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFsdWUgcmVz
dWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAoTElLRUxZ
KCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7Ci0g
ICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgQ2Fs
bERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRh
YmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBjYWxsKGV4
ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkp
OwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2Rl
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBCYXNlOjpn
ZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQo
KTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIG1f
c3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9iYWxEYXRh
LmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0FycmF5Ojpk
ZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1hcDsKLSAg
ICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25h
cnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFw
KGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIH0KLQot
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFwLT5z
ZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0
b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMg
YmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3Jp
dGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8g
c2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMs
IGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICB9
Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdlKSkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0
aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHkobmV3U3Rv
cmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+bV9hbGxv
Y0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9p
bmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBKU0FycmF5
OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBlbnRyeUlu
TWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwot
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0g
ICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1Vu
ZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAgICAgaWYg
KGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3Jp
cHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAgICAgIGlm
IChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9IGRlc2Ny
aXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNB
Y2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iu
c2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRl
clNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAgICAgICAg
YWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0gICAgICAg
IGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAm
IH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChkZXNjcmlw
dG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOwot
fQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZpbmVPd25O
dW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAgIEFTU0VS
VChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkpIHsKLSAg
ICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBh
IHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2Fs
bHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVm
YXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3Vy
cmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWly
IGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5
IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5n
ICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsK
LSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsK
LSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRv
ci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRlckRp
Y3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQobWFwKTsKLQot
ICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRP
d25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlz
LCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBv
ZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAgICAvLyAzLiBJ
ZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWpl
Y3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMg
dHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3Ip
OwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxl
LiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9y
KERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4g
b3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBb
W1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxl
XV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElm
IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBh
dHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0
IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBi
ZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vz
c29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRd
XSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRl
IHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBv
ZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2Yg
dGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZh
dWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAgICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdy
aXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRl
cyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBlbnRyeUluTWFw
LT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1h
cCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdl
LT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUuIFJldHVybiB0cnVlLCBp
ZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwg
aWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFs
dWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVz
cG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1
ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAg
IGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkg
fHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQg
aXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAg
ICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBp
cyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0
cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAvLyA3LmIuIFJl
amVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
dGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9v
bGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVt
ZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2Ny
aXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWly
ZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewotICAgICAg
ICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNj
cmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAgICAgaWYgKGN1
cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25m
aWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURl
c2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1l
ZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBh
biBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUg
Y29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBh
bmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9w
ZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVk
IFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVy
dHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBj
b252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
Ci0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3Bl
cnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICB9IGVs
c2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRv
cihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVu
Ci0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJh
YmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEwLmEu
aS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Ug
YW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAg
ICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRo
ZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5b
W1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1
ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSBy
ZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIDEwLmIu
IGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28g
YW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclBy
ZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAgICAvLyAxMS4g
RWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlw
dG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25m
aWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtb
U2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1d
LCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0
dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRo
ZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tH
ZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50
LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNl
bnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVy
dHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgotICAgIHB1
dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7Ci0gICAg
Ly8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBidXR0ZXJm
bHk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVj
LCBib29sIHdyaXRhYmxlKQpAQCAtNTI3LDkgKzc0LDkgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5n
dGhXcml0YWJsZShFeGVjU3RhdAogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRh
YmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHko
KTsKIH0KQEAgLTYzMCwzOCArMTc3LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QKICAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8g
aW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3du
UHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgi
LCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdh
eXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgotICAgICAgICByZXR1
cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRv
ciwgdGhyb3dFeGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93
RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwot
Ci0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhf
QVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBh
cnJheS0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0
aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rv
ckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1h
cCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+Zmlu
ZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAg
aXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVy
biBhcnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wgSlNBcnJheTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIsMTAgKzE5MSw2
IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1
cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBp
LCBzbG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4NywyNiArMjAyLDYg
QEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAg
ICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0
ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRl
c2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAK
QEAgLTcxNCwxMSArMjA5LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxs
KTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIo
ZXhlYyk7CkBAIC03MzMsMTk0ICsyMjMsOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIC8vIEZh
c3QgY2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5t
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVl
c0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0g
bGVuZ3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDJeMzItMSAt
IHRoaXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFuZCBpcyB0cmVh
dGVkIGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+IE1BWF9BUlJB
WV9JTkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwot
ICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0
IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdo
ZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZ
KCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ug
c2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFy
ZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8v
IFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAg
ICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVj
dG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZ
KChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAg
ICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBi
ZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJv
cGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBh
bGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVu
Z3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0
aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0
aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+bGVu
Z3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgaWYgKHNo
b3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3Ro
ID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAg
LSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ug
d2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwg
YSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAg
ICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rv
ckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgbWFwLT5wdXQo
ZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwg
dXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAg
IC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVs
ZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0
LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3
IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOwotfQotCi1ib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92
ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMg
d2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtF
TFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3
ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNw
YXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0g
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2
ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtF
TFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5
IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAg
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0
aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAg
ICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFw
ID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xl
bmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2lu
ZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91
bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBp
cyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0
b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50
bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcg
c28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFy
c2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2Nh
dGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUo
KSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCi0gICAg
ICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3Ro
LCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0g
ICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBk
ZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3Jb
aXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBu
ZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNBcnJheTo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAg
aWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjgsMzUgKzIzMyw2IEBAIGJvb2wg
SlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLWJv
b2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQot
ICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB2
YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1h
cC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAm
IERvbnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
bWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpc09iamVjdC0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IGNvbXBh
cmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICB1bnNp
Z25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpAQCAtOTY0LDEyNyAr
MjQwLDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2kKICAgICBy
ZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJyYXk6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJy
YXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihv
YmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4g
aWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZp
Y2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAg
ICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBm
b3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlz
T2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAg
ICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eSht
YXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwg
IShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVk
KSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVz
aXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNp
Z25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwot
Ci0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkK
LSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNp
emUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRv
OgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAy
OwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWdu
ZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBw
cm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVz
aXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwot
Ci0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9H
Uk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlz
IGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQg
c3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZh
bHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZv
ciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYg
KG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5n
dGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5l
d1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMg
bm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAg
ICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9
IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlS
ZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwg
c3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1f
c3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JM
ZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBS
ZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXks
ICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3
SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBj
aXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5l
d1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2
b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNl
KSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9y
TGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgp
ID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3Ro
OwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJy
aWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENv
cHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0
b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxl
bmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9j
QmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAg
cmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRo
b2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgdW5j
bGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxk
IGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNTRVJUKGNvdW50ID4g
bV9pbmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3Rv
cmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRo
ZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwog
CiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNzOgpAQCAtMTA5Myw4
ICsyNjgsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAg
Ly8gICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB2
ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAqIGRlc2lyZWRDYXBh
Y2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBi
YXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
bV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZl
Y3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAg
ICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0
aCkKQEAgLTExMDIsOCArMjc3LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxl
bmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFu
ZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
LgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
ICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5k
ZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCAr
IG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNp
Z25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkg
d29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8
IDEpOwogCkBAIC0xMTE0LDEwICsyODksMTEgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRT
bG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKICAgICAvLyBJ
ZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5v
dCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENh
cGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVu
dENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNl
ID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZs
eS0+YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJl
bnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9j
QmFzZSkpCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
cHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBh
Y2l0eSkpOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
bmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0xMTMw
LDQ1ICszMDYsNDAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwog
ICAgIC8vIElmIGl0IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBhbW91bnQgdGhhdCB3aWxsIHJlbWFp
biBiYXNlZCBvbiBhbiBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0aGUKICAgICAvLyB2ZWN0b3Igd2l0
aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2aW91c2x5LgogICAgIHVuc2lnbmVk
IHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Cisg
ICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgIC8vIEF0
b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHdo
YXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKG1fdmVjdG9yTGVu
Z3RoIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxl
bmd0aCk7CisgICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigoc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkgLSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2Ft
ZSBhbGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgotICAgICAg
ICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlIHx8IHBvc3RDYXBh
Y2l0eSA8IG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBtX3ZlY3Rvckxl
bmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OwotICAgIG1faW5kZXhC
aWFzID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdl
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxX
cml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwotCi0g
ICAgLy8gU3RlcCA0OgotICAgIC8vIENvcHkgYXJyYXkgZGF0YSAvIGhlYWRlciBpbnRvIHRoZWly
IG5ldyBsb2NhdGlvbnMsIGNsZWFyIHBvc3QtY2FwYWNpdHkgJiBmcmVlIGFueSBvbGQgYWxsb2Nh
dGlvbi4KLQotICAgIC8vIElmIHRoaXMgaXMgYmVpbmcgbW92ZWQgd2l0aGluIHRoZSBleGlzdGlu
ZyBidWZmZXIgb2YgbWVtb3J5LCB3ZSBhcmUgYWx3YXlzIHNoaWZ0aW5nIGRhdGEKLSAgICAvLyB0
byB0aGUgcmlnaHQgKHNpbmNlIGNvdW50ID4gbV9pbmRleEJpYXMpLiBBcyBzdWNoIHRoaXMgbWVt
bW92ZSBjYW5ub3QgdHJhbXBsZSB0aGUgaGVhZGVyLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLT5t
X3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3Rv
cmFnZSwgc3RvcmFnZVNpemUoMCkpOwotCi0gICAgLy8gQXJlIHdlIGNvcHlpbmcgaW50byBhIG5l
dyBhbGxvY2F0aW9uPwotICAgIGlmIChuZXdBbGxvY0Jhc2UgIT0gbV9zdG9yYWdlLT5tX2FsbG9j
QmFzZSkgewotICAgICAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1fYWxs
b2NCYXNlLgotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwor
ICAgICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUo
KSkgfHwgcG9zdENhcGFjaXR5IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpOwog
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rv
ckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBuZXdT
dG9yYWdlQ2FwYWNpdHkgLSBuZXdWZWN0b3JMZW5ndGg7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMs
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihK
U1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3Vy
ZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkg
dGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcg
J2lmJy4KLSAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXAp
OworICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXAp
OwogCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXAp
IHsKKyAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXApIHsKICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAg
ICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKQEAgLTExOTUsNyArMzY2LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNl
Y29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3Bl
cnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKQEAgLTEyMDQsMTQgKzM3NSwxNCBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGtl
eXNbaV0pOwogICAgICAgICAgICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAgICAgICAgICBkZWFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRlIHByb3Bl
cnRpZXMgZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90OwpA
QCAtMTIyMCw1MyArMzkxLDY1IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYywKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVu
Z3RoOworICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0
cnVlOwogfQogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBp
ZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFn
ZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlz
TGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3Ro
IC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAg
ICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgp
OwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAg
ICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAg
dmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xl
bmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsK
LSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBMZXQgZWxlbWVudCBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCBpbmR4LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRl
eCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBP
IHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
ICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1
bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
dGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAi
VW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAg
ICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxl
bWVudC4KKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVy
biBlbGVtZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8v
IENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxl
bmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7
Ci0gICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJl
dHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGlj
YWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3NCw2MyArNDU3LDc3IEBAIEpT
VmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4g
YXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEg
cmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0
b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRl
SW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CiAKLSAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRo
ZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShz
dG9yYWdlLT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUp
OwotICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAz
LmQuCi0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3Ro
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0IGNhc2UgLSBwdXNo
IHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVj
dG9yLgorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAg
ICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZh
bHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0
aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElL
RUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFs
dWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1
LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAKLSAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsK
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMg
cHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFnZSk7Cisg
ICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGNvdW50KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVu
c3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAotICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBo
b2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRo
ZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3Ro
ICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAg
aWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNl
SW5kZXhpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghb2xkTGVu
Z3RoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50OworICAg
IHN0b3JhZ2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYgKG1f
dmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAodW5z
aWduZWQpY291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBtaW4o
dmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92ZWN0
b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAg
ICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9y
YWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFn
ZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCi0gICAg
ICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkg
eworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJl
KCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzMzksNTkgKzUzNiwzMCBAQCBib29s
IEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVu
c3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhv
bGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhl
IGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAo
bGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFy
c2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+
PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciog
bmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFz
ZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAg
ICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJp
YXMgPj0gY291bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHko
KS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBj
b3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dDYXNlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0
aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
Lm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1f
c3RvcmFnZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhpc09iamVj
dC0+bGVuZ3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fc3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdlLT5tX2Fs
bG9jQmFzZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1fdmVjdG9y
TGVuZ3RoICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rvci0+c2xv
dCgpLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJhc2VTdG9y
YWdlICE9IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgICAg
IHRoaXNPYmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFn
ZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1ZSkgKiB0
aGlzT2JqZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQodGhpc09i
amVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1h
cCkKLSAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0aWMgaW50
IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsK
ICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVy
KCk7CkBAIC0xNDA4LDExMiArNTc2LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxE
YXRhJiBjYWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5k
ZXhpbmdNb2RlKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
ID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFy
c2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVO
dW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
aWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxW
YWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1
ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7
CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChleGVj
LCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0
ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJn
ZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAg
IC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2
ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAg
IAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2sp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAoIWFsbFZhbHVlc0FyZU51
bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlz
IGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAvLyBhbHNvIGRv
bid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIg
dmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVx
dWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUs
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsK
LQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VN
b2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29t
cGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBz
dHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNv
cnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVt
ZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJl
cyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0
cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBt
ZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyBy
ZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQu
Ci0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogICAgIAotICAgIEhlYXA6OmhlYXAodGhpcyktPnB1
c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLQotICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OwotICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0
aXZlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51
ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAg
Ly8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICB2
YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvVVN0cmluZ0lubGluZShleGVjKTsK
LQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEgZmFz
dCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBiZSBP
KE4pIHJhdGhlcgotICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KLQorICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRpbmcgSmF2YVNj
cmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNl
IHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRoaXMgaXMgYSBj
b25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNv
biwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAgIC8vIGJ1ZmZl
ci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0
cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAgICAgIC8vIHJh
bmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNv
bXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZh
bHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAg
ICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsg
aSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkpOworICAgICAg
ICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRp
dmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dp
bmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBl
dmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9u
LgorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1
ZXNbaV0uZmlyc3QudG9VU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
b3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZh
bHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQg
d291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAg
ICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
KQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZh
bHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQot
ICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihW
YWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBp
ZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJl
Z2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlT
dHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFz
b3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0Lgot
ICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0
IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0
IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAg
ICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1
dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBx
c29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFp
ciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRo
ZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZl
Y3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBv
cmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAg
IGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQot
ICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
OwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBj
aGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAg
ICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2Yg
YWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7Cisg
ICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAg
IAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
KyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVu
Y3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogc3RydWN0IEFWTFRy
ZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTUsMjUzICs3ODgsMjU3IEBAIHN0cnVjdCBB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBl
LCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUo
KSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpZ25v
cmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVt
YmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1
dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAgIC8vIGlmIGEgbGFyZ2Vy
IGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2xlbmd0aCA8PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAg
IGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25l
ZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVu
Z3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKG1fc3Bh
cnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAwKTsKLQotICAgIGlmICgh
bm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFj
dG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAy
XjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKLSAgICB0
cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFk
b3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1
bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2lu
KCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBh
cnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmln
aHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4K
LQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5l
ZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5n
IHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVy
IG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1f
dmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVk
KTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0u
dmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAg
ICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlz
ZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBj
YWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFy
cmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0aCgpIDw9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAg
ICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3Ro
KCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50
ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbm9kZUNvdW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxUcmVl
QWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3Vn
aCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVj
OworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVG
dW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBj
YWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAm
Y2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291
bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAg
ICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2Fj
aGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigp
KSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUg
Y29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRj
LiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3
aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7
CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBt
aXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxs
IG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9
IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAgICAgICAgICAgaWYgKCF2
IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7
CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVj
dG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRW
ZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMg
cG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRo
ZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1V
bmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5n
dGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhh
dCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9s
ZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3Ro
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
ICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNl
Y29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVt
RGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAg
ICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNv
bmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5l
ZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUg
bGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQorICAgICAgICAvLyBt
b2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAgICAgICAgCisgICAgICAgIC8vIENv
cHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRy
ZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAg
IGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0u
dmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxv
Y2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1
ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5l
d1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2Vk
IHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwor
ICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0
aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3Jy
ZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9y
IGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJd
LnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZh
bHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2
ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rv
ckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5t
X3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNp
c3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSog
ZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFn
ZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBm
b3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAg
ICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7
IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJn
cy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3Ro
KQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9Q
QVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JF
bmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07
Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUt
PnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVk
IGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kp
IHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAg
ICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
bGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNl
dEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
LQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJn
dW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZv
clNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFy
c2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVCghaW5T
cGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAg
ICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2Lmlz
VW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2hlY2tJbmRleGlu
Z0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlm
ICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAg
ICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVk
ID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7
CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVj
dG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRW
ZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVu
Z3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMg
cG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRo
ZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBi
eSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
bmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytp
KQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVj
a0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZp
bmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5Ojpj
aGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAo
dHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZh
bHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5k
ZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRl
ZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVt
VW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVu
Z3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGgg
PiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhv
bGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlv
biBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xl
YXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBu
dW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9
IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFs
dWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFT
U0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRl
eCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FS
UkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAg
IGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAg
IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0
byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjY3OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQwICsyMSwyOSBAQAogI2lmbmRl
ZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRp
b25zLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAotI2RlZmluZSBDSEVDS19BUlJBWV9DT05T
SVNURU5DWSAwCi0KIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNBcnJheTsKICAgICBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRy
eSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBlZGVmIFdyaXRl
QmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0
dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU0FycmF5
KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgICAg
ICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAgSlNWYWx1ZSBn
ZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2
NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7
Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAwLAotICAgICAg
ICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwK
LSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OwotCi0gICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkK
LSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwotCi0gICAgICAg
IGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdz
ICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBsZW5ndGhJc1Jl
YWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJ
c1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVz
ZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9p
ZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVu
c2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgQWRkUmVzdWx0IGFk
ZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5kKHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJU
IHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgotICAg
ICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkpOyB9Ci0KLSAgICAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFw
LgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0g
ICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlzRW1wdHkoKTsgfQot
ICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNv
bnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4vZW5kIGl0ZXJhdGlv
bi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5i
ZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9tYXA7Ci0gICAgICAg
IEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2FwYWNpdHk7Ci0gICAg
fTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2Yg
YW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJh
eVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nl
c3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2Uo
KSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBpbXBvcnRhbnQgdG8g
bm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5U3RvcmFnZSB0aGF0
IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRo
ZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgotICAgIC8v
ICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQotICAgIHN0
cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsgLy8gVGhlICJs
ZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25lZCBtX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9pbnRlciB0byBiYXNl
IGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMgcG9pbnRlciBkb2Vz
IGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRlY3Rvci4KLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJf
dCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3QgbV9pbml0aWFsaXph
dGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsK
LSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVl
c0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9jQmFzZU9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxsb2NCYXNlKTsgfQot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0KICAgICBjbGFzcyBK
U0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
SlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAg
ICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9zdG9yYWdlKDApCi0g
ICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhwbGljaXQgSlNBcnJh
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJy
YXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2Vs
bCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlz
IHdob3NlIHNpemUgYW5kCkBAIC0xNjcsMjUgKzU2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAv
LyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3QqIG1ldGhvZHM6Ci0g
ICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAotICAgICAg
ICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9k
IGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUg
YW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0
SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cgPSB0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
Y2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0
byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNo
QXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29s
IHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0xOTksMTQyICs3NCw4NCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8
IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNW
YWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
Y2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
ICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3Jh
Z2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAg
ICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRl
eCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNl
dCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAg
Ly8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJl
ciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGlu
ZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVu
eSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1i
ZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1f
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1
cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBm
aWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5n
dGgpOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9y
YWdlT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0FycmF5LCBtX3N0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNH
bG9iYWxEYXRhJik7Ci0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgp
OwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgICAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAg
ICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAg
ICAgIH0KIAogICAgICAgICB2b2lkIHNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wg
d3JpdGFibGUpOwotICAgICAgICB2b2lkIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNl
QXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
KTsKLSAgICAgICAgYm9vbCBkZWZpbmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgICAg
ICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGRl
YWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotCi0gICAgICAgIHVuc2lnbmVkIGdldE5ld1Zl
Y3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAg
ICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50
KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFs
RGF0YSYpOworICAgIH07CiAKLSAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5v
cm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29u
c2lzdGVuY3lDaGVjayB9OwotICAgICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVu
Y3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25l
ZCBtX3ZlY3Rvckxlbmd0aDsgLy8gVGhlIHZhbGlkIGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4QmlhczsgLy8gVGhlIG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJs
b2NrcyBiZWZvcmUgQXJyYXlTdG9yYWdlLgotICAgICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFn
ZTsKLQotICAgICAgICAvLyBGSVhNRTogTWF5YmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQg
YmUgcHV0IGludG8gaXRzIG93biBKU0NlbGw/Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgaW5saW5lIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0
ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgK
KyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIGJhc2VJbmRleGluZ0hlYWRlckZv
ckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1Jf
TEVOKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICAgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAg
c3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuIGJ1dHRlcmZseTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFy
c2VWYWx1ZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3Nw
YXJzZVZhbHVlTWFwKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KLSAg
ICB9OworICAgIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRl
eGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KTsKIAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
ICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpOwotICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5pdGlhbExl
bmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0K
IAogICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlv
blVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0
aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICB2b2lkKiB0ZW1wOwor
ICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0
aCkpLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAqYnV0
dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFs
TGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9
IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3Ro
OworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24gPSB0cnVlOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBKU0FycmF5KiBhcnJheSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpT
QXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9
CiAKICAgICBKU0FycmF5KiBhc0FycmF5KEpTVmFsdWUpOwpAQCAtMzUzLDMwICsxNzAsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7
IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOyB9CiAgICAgaW5s
aW5lIGJvb2wgaXNKU0FycmF5KEpTVmFsdWUgdikgeyByZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pT
QXJyYXkodi5hc0NlbGwoKSk7IH0KIAotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUK
LS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQg
aXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fu
bm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBv
ZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0
PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
Ci0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgp
IGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1P
IGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotICAgIGlubGluZSBzaXplX3QgSlNBcnJh
eTo6c3RvcmFnZVNpemUodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLSAgICAKLSAg
ICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBw
cm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAg
ICAgIC8vIC0gYXMgYXNzZXJ0ZWQgYWJvdmUgLSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uIGNh
bm5vdCBvdmVyZmxvdy4KLSAgICAgICAgc2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFn
ZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKyAodmVjdG9yTGVuZ3RoICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwotICAgICAgICAvLyBBc3NlcnRpb24gdG8gZGV0
ZWN0IGludGVnZXIgb3ZlcmZsb3cgaW4gcHJldmlvdXMgY2FsY3VsYXRpb24gKHNob3VsZCBub3Qg
YmUgcG9zc2libGUsIHByb3ZpZGVkIHRoYXQKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVmaW5lZCkuCi0gICAgICAgIEFTU0VSVCgoKHNpemUgLSAo
c2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gdmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+
PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
KTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQotCiAgICAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVj
dHVyZSwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjY3
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYm91bmRGdW5jdGkKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAg
ICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5k
KGV4ZWMtPmFyZ3VtZW50KGkpKTsKIApAQCAtNjUsNyArNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kp
Ci0gICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBh
cmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdz
LmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwx
MSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogVVN0cmluZyBKU0Nl
bGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24g
MTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQotCisgICAgICAgIAog
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVk
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2Vu
ZGlmCkBAIC0xNjAsNiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIER1bW15
IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNs
YXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVl
IGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIHN0YXRpYyBVU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgICAgICBz
dGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcs
NyArMzE3LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1
bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkg
JiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOSw3ICszMjks
NyBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0g
ICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjY3OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAg
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE5
LDggKzUxOSw4IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAg
ICBpZiAobV9pc0FycmF5KSB7CiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAgICAgIEpT
VmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0
LmdldCgpKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgdmFsdWUgPSBhc0FycmF5
KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAobV9pc0pTQXJy
YXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkp
CisgICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleFF1
aWNrbHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90KG1fb2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4ZWMsIGlu
ZGV4LCBzbG90KSkKQEAgLTY4NSw4ICs2ODUsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxr
ZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldEluZGV4KGlu
ZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdl
dEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJh
eS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChhcnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChhcnJheSwg
bV9leGVjLCBpbmRleCwgc2xvdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3Jn
KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRh
dGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
R2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxUaGlzLmgiCkBAIC0zOCwxMiArNDAsMTkgQEAKICNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAi
UHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKICNpbmNsdWRlICJTbG90
VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBv
ZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcworLy8gYXMg
YSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJh
eSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBG
SVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJh
eVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwp
CiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2
LDI5ICs5NSw4MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAg
ICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3Rv
cmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVf
dCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3Rv
cmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9yYWdlU2l6
ZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgCi0gICAgc2l6ZV90IGNhcGFjaXR5ID0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKGNhcGFjaXR5KTsK
LSAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gY2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPik7Ci0gICAgUHJvcGVydHlTdG9yYWdlIGJhc2VPZlN0b3JhZ2UgPSBz
dG9yYWdlIC0gY2FwYWNpdHkgLSAxOwotICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5
QW5kUGluT3RoZXJ3aXNlKGJhc2VPZlN0b3JhZ2UsIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIG5ld0Jhc2VPZlN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVN0b3JhZ2U+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMpKTsKLSAg
ICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCYXNlT2ZTdG9yYWdlICsg
Y2FwYWNpdHk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gY3VycmVudFRh
cmdldCArIDE7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gc3RvcmFn
ZSAtIDE7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0lu
ZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChVTkxJS0VM
WShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAw
OworICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNp
emUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hl
YWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNr
SWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAg
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
ICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdl
U2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50
U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1j
dXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0K
LSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmll
cjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
c3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgKm5ld0J1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb20oKmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCkpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3Vy
cmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
IGNvdW50LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVu
dFNvdXJjZSsrKS0+Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRl
QmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0
b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBz
dG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHBy
b3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAg
ICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTEyMiw5
ICsxODIsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAg
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAg
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7
Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3Rv
cmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
U2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0
Miw5ICsyMDIsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0g
ICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdl
KCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5l
U3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKIAogICAg
IHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXpl
Rm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmpl
Y3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsyMjEsNTAgQEAg
VVN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZQogICAgIHJldHVybiBpbmZv
LT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlT
bG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNv
bnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90CisgICAg
Ly8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRo
b3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4K
KyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwp
OwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICAKKyAgICBz
d2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAg
ICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaXQtPnNl
Y29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0xNzQs
NiArMjc0LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAg
ICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIC8vIFRyeSBpbmRl
eGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNl
dHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAgSlNWYWx1ZSBwcm90
b3R5cGU7CkBAIC0yMzUsOSArMzQyLDE0NSBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAg
ICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09i
amVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZ
KHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dp
dGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVy
dHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFtZV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1f
bnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAocHJvcGVydHlOYW1l
ID49IGxlbmd0aCkgeworICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3Qp
CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAor
ICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFs
dWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworfQorCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQor
ICAgICAgICByZXR1cm4gc3RvcmFnZTsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgp
LCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBu
ZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisg
ICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRo
ZW0uCisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0
ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgMCk7CisgICAgaWYgKCFuZXdCdXR0ZXJm
bHkpCisgICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOwor
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAg
ICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwordm9pZCBK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgpLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsIG9sZFR5cGUgPT0gTm9uQXJy
YXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAg
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRl
cmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0aCgpKTsK
KyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+c2V0TGVu
Z3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
KyAgICByZXN1bHQtPm1fc3BhcnNlTWFwID0gMDsKKyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2lu
aXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXph
dGlvbiA9IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0
ZUFycmF5U3RvcmFnZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZs
eSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJB
U0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25B
cnJheTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3Bh
cnNlTW9kZSgpOworICAgICAgICByZXR1cm4gc3RvcmFnZTsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMzA0LDYgKzU0NywxMCBAQCBib29s
IEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0
ZShleGVjKTsKQEAgLTMzMiwxMCArNTc5LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRo
aXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFY
X0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
KSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIHZhbHVl
U2xvdC5jbGVhcigpOworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFs
dWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzQ3LDUxIEBAIHZvaWQgSlNPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQg
bnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVk
IGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0
aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBp
bmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNo
LAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0
dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5
OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3Rv
cmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAp
IHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMu
cmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAg
ICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMg
JiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAg
Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5
TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzg0Miw3IEBAIHZv
aWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6
cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChp
c0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1v
ZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERh
dGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2Jh
bERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzg5OSwxMSBAQCBib29sIEpTT2JqZWN0Ojpy
ZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lO
TElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYg
c2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUg
dm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0
aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBp
ZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zm
c2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlz
LCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zm
c2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRl
ckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTI5LDUzMyBAQCBTdHJ1Y3R1cmUq
IEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwog
fQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9p
ZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VB
cnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFBy
b3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAg
ICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAg
ZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAg
ICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQo
KSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlw
dG9yLmdldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0
dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2Jq
ZWN0KCk7CisgICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3Jp
cHRvci5zZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNl
dHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9i
amVjdCgpOworCisgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6
OmNyZWF0ZShleGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29y
LT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0
dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IHNldHRlcik7CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgYWNjZXNzb3IpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9u
bHk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dl
bmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8g
RGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4
ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7Cisg
ICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8g
YSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNh
bGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRl
ZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVu
dGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1
cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNv
dWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdT
cGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52
YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisg
ICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMs
IGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9m
IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElm
IGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVj
dC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0
cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNF
eHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7
CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3Io
RGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBv
d24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtb
VmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVd
XSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYg
dGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0
dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQg
dG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJl
IGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNz
b3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1d
LCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVz
ID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAt
PmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBp
biBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmll
bGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBp
biBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDku
MTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdl
dChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5l
cXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcu
IElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgor
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVj
dCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAg
ICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25m
aWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtb
RW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJs
ZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBv
ZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgp
ICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMg
dHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBp
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhh
dmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVz
Y3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAg
ICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVu
dCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9w
ZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3Bl
cnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
IGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVz
IHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8v
IDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8v
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
IFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFs
dWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAm
JiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJs
ZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0
ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
IHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMg
cHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBm
YWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkg
aXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRp
bmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
dG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVj
LCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRy
dWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlE
YXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKCk7Cit9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMg
ZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCi0gICAgLy8gd2UgbWlnaHQg
YmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCitTcGFyc2VBcnJheVZhbHVlTWFwKiBK
U09iamVjdDo6YWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IFNwYXJzZUFycmF5VmFs
dWVNYXA7CisgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZUFy
cmF5RGF0YSk7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwID0gcmVzdWx0OworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcCgpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJv
KCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisgICAgZGVsZXRlIHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKK30KKwordm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBh
cnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFT
U0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3Jh
Z2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1By
b3BlcnR5U3RvcmFnZSA9IDA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFn
ZS0+bV9zcGFyc2VNYXA7CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRv
IHNsYWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5j
ZSB0eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9y
YWdlOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2Yo
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9y
YWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hl
cmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFko
IW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBz
aG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJl
IG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0
b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFko
KGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcikp
ICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAg
ICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJl
ZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3Rv
cmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlz
IHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAg
ICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3Ro
IGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8
ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVu
Z3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgIH0K
KworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdl
IHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8g
dXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUg
dG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1
ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwor
ICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5n
dGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9i
YWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFs
dWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVh
ZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVl
c0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxs
IHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAu
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsK
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVy
dHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAv
LyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3Bh
cnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJh
eSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1v
ZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2li
bGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxl
IHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVj
dG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxE
YXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3Jh
Z2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhl
IHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cisg
ICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBj
YW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFy
c2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3Qo
ZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB9CisKKyAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBn
cm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAo
bWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0
aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1
cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBk
b2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlm
IFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBh
bGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNl
TW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJh
eSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9y
TGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0lu
QXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZl
Y3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAg
ICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xv
dCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xv
dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAg
Ly8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhl
IGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAg
Ci0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0
eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4p
ICogb2xkU2l6ZSk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKGluZGV4
aW5nU2hvdWxkQmVTcGFyc2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwg
MCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAw
KSk7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsg
MSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5l
d1Byb3BlcnR5U3RvcmFnZTsKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5l
d1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJy
ZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNpcmVk
TGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWduZWQgaW5j
cmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBzdGQ6Om1pbihjdXJy
ZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExl
bmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNl
IGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3Rk
OjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAg
IC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5jcmVhc2Vk
TGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgorICAgICAg
ICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkp
OworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93
LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5n
dGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VSVChpbmNy
ZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0gc3Rk
OjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4g
c3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30K
KworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAg
IHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAg
dmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9y
TGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKK30KKworYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFy
cmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMg
bm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUg
dmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNh
biBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9
IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgp
OworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdM
ZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIElu
IHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRl
eEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAg
ICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFs
bCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJm
bG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1pbihp
bmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0
aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+
cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0lu
ZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lD
aGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQo
c3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAg
IEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVz
SW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVu
Z3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hl
Y2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNy
YXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1
ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNv
cnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1W
YWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NF
UlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1f
c3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQt
PmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAg
QVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNv
bnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2Fz
IGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9y
dGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUg
cHJvcGVydHkKKyAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11
dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUs
IG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0NjMsNDYg
QEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFs
aWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0
cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAg
ICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTcwNCwyNiArMTU3MywyNiBAQCBw
cml2YXRlOgogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRl
eFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAg
IC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5
LgogICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1v
dmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRp
Y3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBh
bGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGll
cyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRo
aXMgd29yay4KICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAg
CiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24g
bm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsK
ICAgICAgICAgLy8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYg
KCFvYmplY3QtPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkp
IHsKICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBv
bGREZXNjcmlwdG9yOwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3Ip
OworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAg
ICB9CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTYxOCw4IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVy
aWMgZGVzY3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhp
c3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkp
IHsKICAgICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewot
ICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVu
dCksIGN1cnJlbnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTc2Miw4ICsxNjMxLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
YwogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
biBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwog
ICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBl
eGlzdGluZyBwcm9wZXJ0eQpAQCAtNzg0LDggKzE2NTMsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0
cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXRE
ZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAg
ICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3Vy
cmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBm
dW5jdGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjcx
LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3Ig
PSBvYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7Cisg
ICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpA
QCAtODEyLDEyICsxNjgxLDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWMKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVz
RXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgdW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChjdXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3Ip
OworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFu
IGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVk
ZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVy
dHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBm
YWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMg
ZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmku
IFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWku
IENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAo
OC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBh
cmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8g
Zi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywg
ZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dU
eXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMSBAQAogI2RlZmluZSBKU09iamVjdF9oCiAKICNp
bmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1
ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNs
YXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90Lmgi
CisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90
LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgotI2luY2x1ZGUgIlN0b3JhZ2VCYXJyaWVyLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDYgKzgz
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBY2Nlc3NvciAgICAgPSAxIDw8IDUsICAv
LyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKICAgICB9OwogCisgICAgQ09NUElMRV9BU1NF
UlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoUmVhZE9ubHkgPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBSZWFkT25seV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KyAgICBDT01QSUxFX0FTU0VSVChEb250RW51bSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERv
bnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNT
RVJUKERvbnREZWxldGUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RGVsZXRlX2lzX2Jl
bG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEZ1bmN0aW9u
IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRnVuY3Rpb25faXNfYmVsb3dfRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoQWNjZXNzb3IgPCBGaXJzdEludGVybmFs
QXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKwog
ICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CiAKICAgICBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBK
U0NlbGwgewpAQCAtOTYsNiArMTA3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6
CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
dm9pZCBmaW5hbGl6ZUFycmF5RGF0YShKU0NlbGwqIGNlbGwpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIApAQCAtMTIwLDggKzEzMywxNzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9v
bCBhbGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0ZSopOwogCisgICAgICAgIHVuc2lnbmVkIGdldEFy
cmF5TGVuZ3RoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdldFZl
Y3Rvckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CisgICAgICAgIC8vICAt
IHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAorICAgICAgICAvLyAgLSBhY2Nl
c3NvcnMgYXJlIG5vdCBjYWxsZWQuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBw
cm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3Vy
YWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cgPSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXhR
dWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHko
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAg
ICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUg
Z2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhblNl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxl
bmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAx
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxpemVJ
bmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBh
cmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAg
ICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAg
ICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3Rv
ciB0byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBu
b3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMu
CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0
aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0
b3JhZ2UpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5n
dGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5p
dGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NF
UlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0
YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQg
dmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5
cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZApAQCAtMTQ3LDYgKzMyOSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkp
OwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0
OwpAQCAtMjAzLDggKzM4NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENv
bnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291
dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGlu
ZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAg
Y29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsg
fQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9
CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25z
dAogICAgICAgICB7CkBAIC0yMjcsNyArNDEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihpbmxp
bmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5s
aW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBv
dXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAy
KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlv
biArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2NSwyMSArNDUxLDIyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkg
eyByZXR1cm4gc3RydWN0dXJlKCktPmlzU2VhbGVkKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJv
b2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUo
KS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7
IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0KKyAgICAgICAgYm9vbCBpbmRl
eGluZ1Nob3VsZEJlU3BhcnNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFpc0V4
dGVuc2libGUoKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlu
dGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8o
KTsKKyAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsg
cmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCk7IH0KICAgICAgICAg
dm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFnZSBncm93T3V0T2ZMaW5lU3Rv
cmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAg
ICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9y
YWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBn
cm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0
ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRv
IGNhbGwgdGhpcy4KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxv
Y2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0
eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0
b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2
b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZs
YXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAg
ewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGds
b2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ4MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0
b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwg
bV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkKiBidXR0ZXJm
bHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsK
KyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CiAKQEAgLTMxNiwxNCArNTEyLDc4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMgeW91IGxpa2VseSB3YW50IEpTRmluYWxPYmpl
Y3QsIGJlbG93LgogICAgICAgICAvLyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5
IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cuCi0gICAgICAgIEpTT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0SW5o
ZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2Uo
U2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAg
ICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qg
c3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRo
ZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQorICAgICAgICAvLyBzdG9y
YWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdo
ZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0
IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9y
WmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQorICAgICAgICAvLyB0aGlz
IGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVp
cmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkg
c3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAgICAgLy8gYWxyZWFkeS4KKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7CisKKyAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1h
bENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lz
dGVuY3lDaGVjayB9OworI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICB2b2lk
IGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENv
bnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworCisgICAgICAgIGJvb2wg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsK
KyAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKyAgICAgICAgYm9vbCBk
ZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTMzNiwx
NyArNTk2LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGlzT2JqZWN0KCk7CiAg
ICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
SlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIAogICAgICAgICB0ZW1wbGF0
ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jiwg
SlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50
cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlKiBj
cmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3Bl
cnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICBib29s
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFy
cmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBn
ZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQg
Y3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVk
IGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKIAotICAgICAgICBT
dG9yYWdlQmFycmllciBtX291dE9mTGluZVN0b3JhZ2U7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJ1dHRl
cmZseSogbV9idXR0ZXJmbHk7CisgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCogbV9wYWRkaW5nOwogI2VuZGlmCiAgICAgfTsKQEAgLTM3
Miw4ICs2NDgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IDApCisgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNDU2LDExICs3MzIsNiBA
QCBpbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0CiAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU0ZpbmFsT2JqZWN0LCBtX2lubGluZVN0b3JhZ2UpOwogfQogCi1pbmxp
bmUgc2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKQotewotICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fb3V0T2ZMaW5lU3RvcmFnZSk7Ci19Ci0K
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbE9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxPYmplY3RUeXBlOwpA
QCAtNDkxLDE4ICs3NjIsMTcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsVGhpcygp
IGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFs
VGhpc1R5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBpZiAoIXN0b3JhZ2UpIHsK
LSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9CisgICAgQVNTRVJUKCFidXR0
ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIWhhc0luZGV4aW5n
SGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSk7CiAgICAgc2V0U3RydWN0dXJlKGds
b2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBzdG9yYWdlKTsKKyAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsKK30KKwor
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK3sKKyAgICBtX2J1dHRlcmZseSA9IGJ1dHRlcmZseTsK
IH0KIAogaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNTQwLDkgKzgxMCw5IEBAIGlubGluZSBKU09i
amVjdCogYXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUu
YXNDZWxsKCkpOwogfQogCi1pbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgSlNPYmplY3Q6OkpTT2Jq
ZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAg
ICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCB0aGlzLCAwKQorICAgICwgbV9idXR0
ZXJmbHkoYnV0dGVyZmx5KQogewogfQogCkBAIC01OTAsMTUgKzg2MCwxNyBAQCBpbmxpbmUgSlNP
YmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdChFCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbiA9IGdldERpcmVjdExvY2F0aW9uKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvbi0+aXNHZXR0ZXJTZXR0ZXIoKSkK
LSAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgbG9jYXRpb24pOworICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQp
KSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCk7Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIHZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpCisgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90
KHNsb3QsIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
dGhpcywgbG9jYXRpb24tPmdldCgpLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBnZXRPd25Q
cm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIC8vIEl0IG1h
eSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkg
YSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtNjg0LDYgKzk1Niw3IEBAIGlubGluZSBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCh2
YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZS5hc0luZGV4KCkgPT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KTsKIAogICAgIGlmIChzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5
KCkpIHsKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CkBAIC03MTIsMTEgKzk4
NSwxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBv
dXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVT
dG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgp
LT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBu
ZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9i
YWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgICAgIHNldEJ1dHRlcmZseShn
bG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKIAogICAgICAgICB2YWxpZGF0
ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7CkBAIC03MzAsMTMgKzEwMDMsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXpl
X3QgY3VycmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7IAorICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoY3VycmVudENh
cGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG5l
d1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNp
dHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBjdXJyZW50Q2FwYWNpdHks
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdl
LCBzdHJ1Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRp
b25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAogICAg
ICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgpAQCAtODAz
LDkgKzEwNzYsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3Jh
Z2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRhLCBvbGRDYXBhY2l0eSwg
bmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIH0KIAogaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKQEAg
LTgzOSwxMSArMTExMiwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KEpTR2xv
YmFsCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIFByb3BlcnR5U3Rv
cmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jv
d091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9m
TGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Ci0gICAgc2V0T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAg
c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogICAg
IHB1dERpcmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKIH0KIApAQCAtOTM1
LDYgKzEyMDgsMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAog
ICAgIHJldHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldEluQnV0dGVyZmx5KFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKK30KKwogLy8g
VGhpcyBpcyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5b3Ugd2FudCB0byBlbWl0
IGEgbG9hZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8gRm9yIGlubGluZSBvZmZz
ZXRzOiBhIHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UgcG9pbnRlci4KQEAgLTk0
MiwxNCArMTIyMCwxNCBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVyOjp3aXRoQ2Fs
CiBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAg
ICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSArIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpOworICAg
IHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG9mZnNldCk7CiB9CiAKIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkp
Ci0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5Ojpp
bmRleE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAgQVNTRVJUKCEoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgIHJldHVybiBK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CkBAIC05NTcsNyArMTIzNSw3IEBA
IGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU8KIGlubGluZSBpbnQgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091
dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICByZXR1cm4g
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIHJldHVybiBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zm
c2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3lt
Ym9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpT
U3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmpl
Y3QqPihvYmplY3QpOwogICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0g
ICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEy
Njc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7
CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAg
ICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5o
CShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
ID0gMSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3Jk
ID0gMSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgSW50ZXJzZWN0c092ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3MgVHlwZUlu
Zm8gewogICAgIHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgb3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxh
Z3MxKE92ZXJyaWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QpOyB9CisgICAgICAgIGJvb2wgaW50ZXJzZWN0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFn
czEoSW50ZXJzZWN0c092ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVuKTsgfQot
ICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBp
c1NldE9uRmxhZ3MxKE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAgIGJvb2wg
b3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIo
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZyk7IH0KIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zmc2V0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
aXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJMZXhlci5oIgpAQCAtNjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8
Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIERvUGFy
c2VPYmplY3RFbmRFeHByZXNzaW9uOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFz
T2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEo
KSwgaWRlbnRpZmllclN0YWNrLmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgICAgICAg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAgICAgICAg
ICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLmN1
cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNjc5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4
LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNl
dCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91
dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihv
ZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6ZV90IG9m
ZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKworI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDM3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAKKyNpbmNs
dWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19G
SVRTX0lOX0NFTEwoUmVnRXhwTWF0Y2hlc0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4
cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5KX07CiAKK1JlZ0V4cE1hdGNo
ZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
KiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICA6IEpTQXJy
YXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgYnV0dGVyZmx5KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgICwgbV9zdGF0ZShSZWlm
aWVkTm9uZSkKK3sKKyAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7Cisg
ICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Cit9CisKK1JlZ0V4cE1h
dGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCit7Cisg
ICAgQVNTRVJUKHJlc3VsdCk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgUmVn
RXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4
cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2Jh
bERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVn
RXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRjaGVzQXJy
YXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjggKzI4LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGlj
IEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICAgICAg
ICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJh
eVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgICAgICAg
ICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5wdXQu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsKLSAgICAgICAgICAgIG1fcmVnRXhwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOwotICAgICAgICB9CisgICAgICAgIFJlZ0V4cE1hdGNo
ZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCosIEpTU3Ry
aW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIGVudW0gUmVpZmllZFN0YXRl
IHsgUmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwogCiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgUmVnRXhw
TWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJl
Z0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJh
eSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFs
RGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFycmF5
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhl
Y1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgSlNT
dHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwogICAgICAgICBKU1N0cmluZyogcmlnaHRD
b250ZXh0KEV4ZWNTdGF0ZSopOwpAQCAtNTgsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKIAorI2lu
Y2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
bHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xMTQsMTEgKzExNiwxMSBAQCBib29s
IFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWpl
Y3RfaAorI2RlZmluZSBSZWplY3RfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVk
ZSAiRXJyb3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIHJlamVjdChFeGVj
U3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7
CisgICAgaWYgKHRocm93RXhjZXB0aW9uKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBt
ZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gUmVqZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3Bh
cnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFy
cmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdy
aXRlQmFycmllcjxVbmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0
cmlidXRlcygwKSB7fQorCisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBj
b25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQ
cm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUo
KSBjb25zdDsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VB
cnJheVZhbHVlTWFwIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5
RW50cnksIFdURjo6SW50SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8dWludDY0X3Q+ID4gTWFwOworCisgICAgZW51bSBGbGFncyB7CisgICAgICAgIE5v
cm1hbCA9IDAsCisgICAgICAgIFNwYXJzZU1vZGUgPSAxLAorICAgICAgICBMZW5ndGhJc1JlYWRP
bmx5ID0gMiwKKyAgICB9OworCitwdWJsaWM6CisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0
ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
KyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAoKQorICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQorICAgICAgICAsIG1fcmVwb3J0
ZWRDYXBhY2l0eSgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2Rl
KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8
IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBz
dGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKwor
ICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAor
ICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIEFkZFJlc3VsdCBh
ZGQoSlNPYmplY3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSBy
ZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQg
cmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92
ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5v
dEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0
IGJlZ2luL2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAg
RmxhZ3MgbV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNl
QXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFy
c2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNV
bmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5
KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBh
Y2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSkt
PnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICog
KHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
ICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwor
ICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisK
KyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFk
ZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRo
aXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5z
aWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92
ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2li
bGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5
LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6Omdl
dCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVj
dCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAg
ICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNl
dHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwg
d2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5j
b21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMg
bm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhh
dmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYg
IWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwor
ICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOworICAgIGVudHJ5LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGlu
ZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisK
KyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90
LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0
dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29u
c3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0
ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBC
YXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3Vs
dC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAo
IWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0
dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisK
K2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25z
dAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOwor
fQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAg
IGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2
aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1
ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0
b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJv
cGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdl
KQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9
Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hl
Y2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3Jh
Z2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNo
ZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0K
LSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3Bl
cmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQot
ICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAg
IAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0
ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAko
cmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTcgQEAgdm9pZCBTdHJpbmdP
YmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZQogICAgIEpTT2JqZWN0OjpwdXQoY2VsbCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKK3ZvaWQgU3RyaW5nT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgU3RyaW5nT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOworICAgIGlmICh0
aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KHByb3BlcnR5TmFtZSkpIHsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJv
d0V4Y2VwdGlvbikKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKQEAgLTEzMyw2ICsxNDQsMTQgQEAgYm9vbCBTdHJpbmdPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBTdHJpbmdP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKK3sKKyAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUo
KS0+Y2FuR2V0SW5kZXgoaSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKK30KKwog
dm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMTI2Nzk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKIApAQCAtNjYsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmLCBKU1N0cmluZyopOwotICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJzZWN0c092ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmdPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCiAK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVy
cm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMjY3OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksOSArMTQ5LDEwIEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAjZW5kaWYK
IH0KIAotU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK1N0cnVjdHVyZTo6U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgLCBtX3R5cGVJbmZvKHR5cGVJbmZvKQorICAgICwgbV9pbmRleGluZ1R5cGUoaW5kZXhpbmdU
eXBlKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0
LCBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+OjpNYXlCZU51bGwpCiAgICAgLCBtX3Byb3Rv
dHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcm90b3R5cGUpCiAgICAgLCBtX2NsYXNzSW5mbyhjbGFz
c0luZm8pCkBAIC0xNzYsNiArMTc3LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFN0cnVjdHVyZTo6c19p
bmZvID0geyAiUwogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQogICAgIDogSlNDZWxsKENyZWF0aW5nRWFybHlDZWxsKQogICAgICwgbV90eXBlSW5mbyhDb21w
b3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pCisgICAgLCBtX2luZGV4aW5nVHlwZSgw
KQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywganNOdWxsKCkpCiAgICAgLCBt
X2NsYXNzSW5mbygmc19pbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldChJbml0
aWFsaXplZFdhdGNoaW5nKQpAQCAtMTk3LDYgKzE5OSw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmEKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgU3RydWN0dXJlKiBwcmV2aW91cykKICAgICA6IEpTQ2VsbChnbG9i
YWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdHlw
ZUluZm8ocHJldmlvdXMtPnR5cGVJbmZvKCkpCisgICAgLCBtX2luZGV4aW5nVHlwZShwcmV2aW91
cy0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKQogICAgICwgbV9wcm90b3R5cGUoZ2xv
YmFsRGF0YSwgdGhpcywgcHJldmlvdXMtPnN0b3JlZFByb3RvdHlwZSgpKQogICAgICwgbV9jbGFz
c0luZm8ocHJldmlvdXMtPm1fY2xhc3NJbmZvKQogICAgICwgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldChJbml0aWFsaXplZFdhdGNoaW5nKQpAQCAtMjUxLDYgKzI1NCw4IEBAIHZvaWQgU3RydWN0
dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKEoKIAogICAgIGZvciAocHRyZGlmZl90IGkgPSBz
dHJ1Y3R1cmVzLnNpemUoKSAtIDI7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07CisgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3Vz
KQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnko
Z2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPm1fYXR0cmlidXRlc0luUHJldmlvdXMsIHN0cnVj
dHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7CiAgICAgICAgIG1fcHJvcGVy
dHlUYWJsZS0+YWRkKGVudHJ5KTsKICAgICB9CkBAIC01MDIsNiArNTA3LDM4IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNpdGlvbjsK
IH0KIAorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbktpbmQpCit7CisgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0
cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSwgdHJhbnNpdGlvbktpbmQpOworICAgIAorICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMp
KSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJl
dmlvdXMgPT0gYXR0cmlidXRlcyk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24t
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAg
ICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0
aW9uLT5tX3ByZXZpb3VzLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwor
ICAgIHRyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPSBhdHRyaWJ1dGVzOworICAg
IHRyYW5zaXRpb24tPm1faW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgIAorICAgIGlm
IChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5t
X2lzUGlubmVkUHJvcGVydHlUYWJsZSkKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVy
dHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0
dXJlLT5tX3Byb3BlcnR5VGFibGUucmVsZWFzZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPm1fcHJldmlvdXMpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3R1
cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICBy
ZXR1cm4gdHJhbnNpdGlvbjsKK30KKwogLy8gSW4gZnV0dXJlIHdlIG1heSB3YW50IHRvIGNhY2hl
IHRoaXMgcHJvcGVydHkuCiBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHJldmlzaW9uIDEyNjc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0
cnVjdHVyZV9oCiAKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJJbmRleGluZ1R5
cGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRl
ICJKU1ZhbHVlLmgiCkBAIC02OCw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
KEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKQEAgLTEwMCw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CiAKICAgICAgICAgYm9vbCBpc1NlYWxl
ZChKU0dsb2JhbERhdGEmKTsKICAgICAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsK
QEAgLTE0MCw2ICsxNDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
ICZzX2luZm8pOyByZXR1cm4gbV90eXBlSW5mbzsgfQogICAgICAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAKKyAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlICYgQWxs
QXJyYXlUeXBlczsgfQorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhpbmdUeXBlOyB9CiAKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0
LmdldCgpOyB9CiAgICAgICAgIHZvaWQgc2V0R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgeyBtX2dsb2JhbE9iamVjdC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQpAQCAtMzM0LDYgKzMzOCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9pbmRleGluZ1R5
cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKQEAgLTM2Myw3ICszNzIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKICAgICAg
ICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiwgY29uc3QgU3RydWN0dXJlKik7CiAKQEAgLTQxNiw2ICs0MjUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFNwZWNpZmljRnVuY3Rpb25U
aHJhc2hDb3VudCA9IDM7CiAKICAgICAgICAgVHlwZUluZm8gbV90eXBlSW5mbzsKKyAgICAgICAg
SW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwogICAgICAgICAKICAgICAgICAgV3JpdGVCYXJy
aWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IG1fcHJvdG90eXBlOwpAQCAtNDQ3LDcgKzQ1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyA6IDE7CiAgICAgICAg
IGJvb2wgbV9oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
IDogMTsKICAgICAgICAgYm9vbCBtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIDogMTsKLSAg
ICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDc7CisgICAgICAgIHVuc2ln
bmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMgOiAyMjsKICAgICAgICAgdW5zaWduZWQgbV9zcGVj
aWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgOiAyOwogICAgICAgICB1bnNpZ25lZCBtX3ByZXZlbnRF
eHRlbnNpb25zIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9kaWRUcmFuc2l0aW9uIDogMTsKQEAg
LTQ2NSwxMSArNDc1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCisgICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CiAgICAgICAgIEFTU0VS
VChnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChjbGFzc0lu
Zm8pOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvKTsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1
cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlKTsKICAgICAgICAg
c3RydWN0dXJlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gMTI2Nzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlX2gKICNkZWZpbmUgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlX2gKIAorI2lu
Y2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJX
ZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgpAQCAtMzcsNiArMzgs
MzAgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBGaXJzdEludGVybmFsQXR0cmlidXRlID0gMSA8PCA2OyAv
LyBVc2UgZm9yIHRyYW5zaXRpb25zIHRoYXQgZG9uJ3QgaGF2ZSB0byBkbyB3aXRoIHByb3BlcnR5
IGFkZGl0aW9ucy4KKworLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGljYXRl
IHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCisvLyBJZiBhbnkgb2YgdGhl
c2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAwLgor
ZW51bSBOb25Qcm9wZXJ0eVRyYW5zaXRpb24geworICAgIEFsbG9jYXRlQXJyYXlTdG9yYWdlCit9
OworCitpbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uKQoreworICAgIHJldHVybiB0cmFuc2l0aW9uICsgRmlyc3RJbnRlcm5hbEF0dHJp
YnV0ZTsKK30KKworaW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdU
eXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoreworICAgIHN3
aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgQWxsb2NhdGVBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiBvbGRUeXBlIHwgSGFzQXJyYXlTdG9yYWdlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gb2xkVHlwZTsKKyAgICB9
Cit9CisKIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgc3RhdGljIGNvbnN0
IGludHB0cl90IFVzaW5nU2luZ2xlU2xvdEZsYWcgPSAxOwogCkBAIC00NCw3ICs2OSwxMCBAQCBj
bGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgICAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxSZWZQdHI8U3RyaW5nSW1wbD4sIHVuc2lnbmVkPiBLZXk7CiAgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEtleSYgcCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHAu
Zmlyc3QtPmV4aXN0aW5nSGFzaCgpOworICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gcC5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAocC5maXJzdCkKKyAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5JiBhLCBjb25z
dCBLZXkmIGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9qczFf
Ni9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwkocmV2aXNp
b24gMTI2Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvanMxXzYv
QXJyYXkvcmVncmVzcy0zMDQ4MjguanMJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
cmVwb3J0Q29tcGFyZShleHBlY3QsIGFjdHVhbCwgc3VtbWFyeSArIAogCiAvLyByZXZlcnNlCiB2
YWx1ZSAgPSAnMTIzJzsKLWV4cGVjdCA9ICcxMjMnOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0
ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVh
bCA9IEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNhbGwodmFsdWUpICsgJyc7CkBAIC03Myw3ICs3
Myw3IEBAIHJlcG9ydENvbXBhcmUoZXhwZWN0LCBhY3R1YWwsIHN1bW1hcnkgKyAKIAogLy8gc29y
dAogdmFsdWUgID0gJ2NiYSc7Ci1leHBlY3QgPSAnY2JhJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBh
Y3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc29ydC5jYWxsKHZhbHVlKSArICcnOwpAQCAtMTE0LDcg
KzExNCw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycsIHZhbHVlLCBzdW1tYXJ5ICsgJzoKIAogLy8g
dW5zaGlmdAogdmFsdWUgID0gJ2RlZic7Ci1leHBlY3QgPSA2OworZXhwZWN0ID0gIlR5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iOwogdHJ5CiB7CiAg
IGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwodmFsdWUsICdhJywgJ2InLCAn
YycpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHJlcG9ydENvbXBhcmUoJ2RlZicsIHZhbHVlLCBzdW1t
YXJ5ICsgJzoKIAogLy8gc2hpZnQKIHZhbHVlICA9ICdhYmMnOwotZXhwZWN0ID0gJ1R5cGVFcnJv
cjogVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4nOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0
ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVh
bCA9IEFycmF5LnByb3RvdHlwZS5zaGlmdC5jYWxsKHZhbHVlKTsKQEAgLTE0Miw3ICsxNDIsNyBA
QCByZXBvcnRDb21wYXJlKCdhYmMnLCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHNwbGljZQog
dmFsdWUgID0gJ2FiYyc7Ci1leHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5Lic7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJl
YWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNw
bGljZS5jYWxsKHZhbHVlLCAxLCAxKSArICcnOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161795</attachid>
            <date>2012-08-31 17:23:27 -0700</date>
            <delta_ts>2012-08-31 20:50:38 -0700</delta_ts>
            <desc>making progress with LayoutTests/fast/js</desc>
            <filename>butterflies_patch_30.diff</filename>
            <type>text/plain</type>
            <size>407092</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIFBhcmVudDo6bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2
ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25z
dCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNzMwNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+
KG9iamVjdCk7CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAg
LTQ4NCw3ICs0OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCw2ICsxODgsMTcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcCAqLzsgfTsKKwkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVu
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0NjAw
RjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0
ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEMxNUVE
OEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3
QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdG
MzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2MDBG
MTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0Yz
OUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8q
IFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgw
MEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
N0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgwMEYx
NjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMw
QUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMx
NSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NjYsNyArNTc3LDYg
QEAKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1
IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZGNTRB
MzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyog
SklUV3JpdGVCYXJyaWVyLmggKi87IH07Ci0JCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBT
dG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQx
NjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVy
LmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzEx
Qjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQlBN0I0OEY0OTBFRTg5
MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07CkBAIC05NDMsNiArOTUzLDE3IEBACiAJCTBG
QjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdBMTRGNUM3RDQwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5IC8qIE1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8q
IEFycmF5U3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheVN0
b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEIxNUVEOEUzODAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dXR0ZXJmbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEMxNUVEOEUz
ODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ1R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3Rv
cmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eVN0b3JhZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTExNUVEOEUzODAwRjE2N0Iy
IC8qIFJlamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8q
IFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCQzBBRTQxNDk2
QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3Jp
Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzcsNyArMTM1OCw2IEBACiAJCUE3NjdGRjlG
MTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJheVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklU
V3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRl
QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzgxRTM1ODE0MTk3MEM3
MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RvcmFnZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc5
RURCMDgxMTUzMUNENjAwMTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4
Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDExLDYgKzIwMzEsMTggQEAKIAkJ
N0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBB
cnJheUNvbnZlbnRpb25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFy
cmF5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCAqLywKKwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oICovLAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlci5oICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5k
ZXhpbmdUeXBlLmggKi8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAq
LywKKwkJCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5o
ICovLAorCQkJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kcy5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBB
cmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5o
ICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApA
QCAtMjE5Niw3ICsyMjI4LDYgQEAKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oICovLAotCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmll
ci5oICovLAogCQkJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZh
dGlvbi5jcHAgKi8sCiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxB
Y3RpdmF0aW9uLmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0Nv
bnN0cnVjdG9yLmNwcCAqLywKQEAgLTI3NDUsNyArMjc3Niw2IEBACiAJCQkJRTQ5REMxNkMxMkVG
Mjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVk
VGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAv
KiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAw
OUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjg5NCw2ICsyOTI0LDE3IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUz
NTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERB
ODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4
RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1
RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
N0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAx
MjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUg
ZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisv
LyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMy
IGJpdHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsK
IAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAg
ICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMg
YXJyYXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAo
c3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1
cm4gSXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5
TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBj
bGFzcyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzMw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDcgKzE2NzAsOSBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0
YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+
dW5kZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRl
eCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw4ICs4NTcsNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUgaGFuZGxpbmcgb2YgdGhlIG91dC1vZi1i
b3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTE5LDEwICs5MTgsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5Ogor
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRf
T0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQ5LDcgKzEz
NDgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBA
IC0xMzY3LDggKzEzNjYsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAg
ICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cu
IFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5
IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3
MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBT
aXplID0gMyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGph
Y2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9r
aW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2Rl
IGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAg
Y2FzZSAwOgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNB
cnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
cyA6IEFycmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJh
eSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBp
biB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0
YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0
cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNT
dHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNl
IE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25z
dCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9y
Y2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5n
IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwot
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0Fy
cmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAg
cmV0dXJuICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlX
aXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVt
IE1vZGUgewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBo
b3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4K
ICAgICBHZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRP
ZkJvdW5kcywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAg
IEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2Rl
IHsKIH07CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3Rh
dGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2Rlczoi
CisvLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rp
bmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9y
YWdlIiBpbiB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlf
U1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZ
X0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3Rv
cmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7
CiAKIEFycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7
CkBAIC03NCw4ICsxMDEsMTcgQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2Rl
KTsKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQogewog
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzSW5Cb3VuZHNBY2Nl
c3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE0LDI1ICsxNTAs
NiBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kCiAgICAgfQogfQog
Ci1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JTdG9yYWdlTG9hZChBcnJheTo6TW9kZSBs
ZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKLXsKLSAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgYm9vbCBsZWZ0SXNKU0FycmF5ID0KLSAgICAgICAg
bGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5
T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9vbCByaWdodElzSlNBcnJheSA9Ci0gICAgICAgIHJp
Z2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5
T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYgKGxlZnRJc0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJy
YXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
aW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0
Y2ggKG1vZGUpIHsKQEAgLTE0Nyw3ICsxNjQsMTUgQEAgaW5saW5lIGJvb2wgbW9kZUlzU3BlY2lm
aWMoQXJyYXk6Ok1vZGUgbQogCiBpbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6
Ok1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gbW9kZUlzU3BlY2lmaWMobW9kZSk7CisgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgIGNhc2UgTk9OX0FSUkFZ
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw3ICsxNjc0LDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAg
ZWxzZQotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3Rv
cmFnZSwgYmFzZSk7CisgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0
dGVyZmx5LCBiYXNlKTsKICAgICBzZXQoZGVzdGluYXRpb25PcGVyYW5kLAogICAgICAgICBhZGRU
b0dyYXBoKAogICAgICAgICAgICAgR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLApAQCAtMjMwOSw3ICsyMzA5
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
c2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CkBA
IC0yMzYwLDEzICsyMzYwLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5
U3RvcmFnZSwgYmFzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRv
R3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3Rv
cmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDcgKzU4Myw3
IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsK
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFBy
b3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE2MCw3ICsxMTYwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTI3MzA3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgxLDggKzM4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
aWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwotICAg
ICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkp
OworICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgIGlmICht
b2RlSXNKU0FycmF5KGFycmF5TW9kZSkpCisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlID0gTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5
KTsKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgZ2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RydWN0
IE9wSW5mbyB7CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsK
ICAgICAKKyAgICBOb2RlKCkgeyB9CisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAg
ICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1
Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhp
dCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9y
YWdlKSBcCi0gICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAorICAgIG1hY3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNy
byhDaGVja0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNl
dCwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiREZHT1NS
RXhpdC5oIgpAQCAtMjI2LDE0ICsyMjcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFs
KEV4ZWNTdGF0ZSogZQogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBl
eGVjKTsKICAgICAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChhcnJheS0+Y2Fu
U2V0SW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0
YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmIChv
YmplY3QtPmNhblNldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+
c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBl
eGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQxLDExICszNDIsMTIgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZn
bG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICAvLyBGSVhNRTogdGhlIEpJVCB1c2VkIHRvIGhh
bmRsZSB0aGVzZSBpbiBjb21waWxlZCBjb2RlIQotICAgIGlmIChpc0pTQXJyYXkoYmFzZSkgJiYg
YXNBcnJheShiYXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGFzQXJyYXkoYmFzZSktPmdldEluZGV4KGluZGV4KSk7CisgICAgaWYgKGJhc2Ut
PmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2Up
OworICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRl
eCkpOworICAgIH0KIAotICAgIC8vIEZJWE1FOiB0aGUgSklUc3R1YiB1c2VkIHRvIHJlbGluayB0
aGlzIHRvIGFuIG9wdGltaXplZCBmb3JtIQogICAgIGlmIChpc0pTU3RyaW5nKGJhc2UpICYmIGFz
U3RyaW5nKGJhc2UpLT5jYW5HZXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYXNTdHJpbmcoYmFzZSktPmdldEluZGV4KGV4ZWMsIGluZGV4KSk7CiAKQEAgLTUz
NCwxNSArNTM2LDE1IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwK
ICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNv
ZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0
YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMy
X3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49
IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0
c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJ
bmRleChpbmRleCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBBU1NF
UlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC01NTEsMTUgKzU1MywxNSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxC
ZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRB
cnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50
MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXgg
Pj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBv
dXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNl
dEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMs
IGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBB
U1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXkt
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtMTI2OCwyMCArMTI3MCwyOSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZVN0CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFs
T3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZyZXN1bHQpKQotICAgICAgICBD
UkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9j
YXN0PEpTVmFsdWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkK
IHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0g
ICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShuZXdTaXplLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSAr
IDEpICsgbmV3U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAg
ICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIDAs
IG5ld1NpemUsIGZhbHNlLCAwKSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
MCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdp
dGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCiBkb3VibGUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEyNzMw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpT
X0RGR09wZXIKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9F
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJB
VElPTiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJh
dGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90LCBFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VP
WkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlw
ZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VD
SWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTEwNSw4ICsxMDUsMTAgQEAg
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50
MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRl
ZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
T1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7
Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0
YXRlKiwgc2l6ZV90KTsKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tz
IG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8g
SklULgogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUq
KSBXVEZfSU5URVJOQUw7CkBAIC0xMzgsOCArMTQwLDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsU3RyaQogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0
YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5
b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJy
YXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwpAQCAtMTg1LDYgKzE4Nyw4IEBAIHNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJ
bml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3Qg
bmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiAKIC8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZh
dWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9m
IHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OiAKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAogICAgICAgICBjYXNlIEdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTksMTIgKzE5OSwxMiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHVi
CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lmxv
YWRQdHIocHJvdG9PYmplY3QtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNz
KCksIHJlc3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVT
dG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSksIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCBy
ZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwor
ICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfQogCkBAIC0yNTMsMTAgKzI1MywxMCBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgICAgICAKLSAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19p
bmZvKSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdl
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
ICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0
Y2hHUFIpOwogI2Vsc2UKQEAgLTQ3Myw3ICs0NzMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1
bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwogI2Vsc2UKQEAgLTY4MSwxNyAr
NjgxLDE3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKICAgICAgICAgc3R1YkppdC5zdG9yZTMy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAg
fQogI2VuZGlmCiAgICAgCkBAIC04MzAsNyArODMwLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRy
YW5zaXRpb25TdHViKAogICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICBBU1NF
UlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2Vt
Ymxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3Jh
dGNoR1BSMSkpOwogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKQEAgLTg0NCw3ICs4NDQsNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSkpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsK
ICAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTg1NCw4
ICs4NTQsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN0
dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2Ugewog
ICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC04NjMsOSArODYzLDkg
QEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRP
ZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwot
ICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAg
IH0KICNlbmRpZgogICAgICAgICAgICAgCkBAIC0xMDIwLDYgKzEwMjAsMTEgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgICYmIG9sZFN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAg
ICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRl
cihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWlu
KGV4ZWMsIGJhc2VDZWxsKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6
UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAg
IAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VM
b2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwog
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5s
b2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwg
ZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIs
IHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0
Y2hHUFIpOwogCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5
U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBt
X2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25l
TGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtMjUxOSwyMyArMjUxOSwxNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ug
d2lsbCBoYXZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBv
ZiBhcnJheSwKLSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CkBAIC0yNjI1LDYgKzI2MTksOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChh
bHJlYWR5SGFuZGxlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IHRoZSBiYXNlIG1heSBub3QgYmUgbmVjZXNzYXJ5IGZvciBzb21lIGFycmF5IGFjY2Vz
cyBtb2Rlcy4gQnV0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8ga2VlcCBpdCBhbGl2ZSB0byB0aGlz
IHBvaW50LCBzbyBpdCdzIGxpa2VseSB0byBiZSBpbiBhIHJlZ2lzdGVyIGFueXdheS4gTGlrZWx5
CisgICAgICAgIC8vIG5vIGhhcm0gaW4gbG9ja2luZyBpdCBoZXJlLgogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwogICAgICAgICAKQEAgLTI2MzIs
OCArMjYyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dp
dGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IGNoaWxkMyk7CiAKICAgICAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGlu
dG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCkBAIC0yNjYwLDggKzI2
NTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5KQorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7
CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQogICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMjY3
NCw5ICsyNjcwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZh
bHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEg
aG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVu
Z3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVy
dHlSZWcpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVu
Z3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVy
dHlSZWcpOwogCiAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2pp
dCk7CkBAIC0yNjg1LDcgKzI2ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5Lgog
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKLSAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcykgeworICAgICAg
ICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKICAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAogICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCkBAIC0y
ODU0LDE3ICsyODUwLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5
U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAK
ICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVk
SW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAg
ICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOwor
ICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtMjg5MCwxOCArMjg4NiwxOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJl
ZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQ
UiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9m
ZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKICAgICAgICAgc2V0VW5kZWZp
bmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
c3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKICAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgp
KSk7CiAKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAgIApAQCAtMzQ4Nywx
NCArMzQ4MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICBjYXNl
IEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2Up
OwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4MzcsNyArMzgzMyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNlbmRpZgogICAgICAg
ICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LnNpZ25FeHRlbmQz
MlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpT
Y2FsZVB0ciwgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTUsMTkgKzMxNSwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5v
CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZK
U1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewotICAgICAgICAvLyBUaGlz
IGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lwYXRpb24gb2YgdGhpcyBj
b2RlIGJlaW5nCi0gICAgICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdlZCBpbiB0aGUgZnV0dXJl
LgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3Jh
Z2UpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5m
bykpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAg
ICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzAwNiwxMSArMzAxNSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRl
eGVkUHIKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJh
eTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VS
ZWcpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcp
OwpAQCAtMzEyNSwxMyArMzEyOSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0
eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJh
eTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JB
R0VfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSkpOwogICAgICAgICAgICAgCkBAIC0zMjI3LDYgKzMyMzAsMjAgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKIHsKKyAgICBpZiAoaGFzSW5kZXhp
bmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0zMjQ4
LDEzICszMjY1LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AK
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRo
LCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHksIHNjcmF0Y2hHUFIpKTsKICAgICAgICAgCi0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAg
ICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShO
b2RlJiBub2RlKQogeworICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpOworICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0
aEZhY3RvcjsKKyAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUp
KTsKKworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0
eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVl
KSk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQg
b2xkU3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aDEodGhpcyk7CkBAIC0zMjY3LDkgKzMzMDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
OwogICAgICAgICAKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKTsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhG
YWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7
CiAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0
YSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAgbV9qaXQubG9hZFB0
cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIyKTsKQEAg
LTMyODAsMTMgKzMzMTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcgogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihK
U1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXplKSk7CisgICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Us
IHNjcmF0Y2hHUFIyLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgLy8gV2UgaGF2
ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKICAgICBm
b3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9m
KEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIG1faml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAg
ICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQ
UjIsIG1fY29tcGlsZUluZGV4KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1
Niw2ICsxMTU2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShvYmplY3QpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9TIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUp
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMzY4LDcgKzEzNzgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFy
ZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwpAQCAtMTY2Niw3ICsxNjc2LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
M1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTIx
MzksNyArMjE0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoJkNsYXNzVHlwZTo6c19pbmZvKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBv
aW50ZXIuCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIENsYXNzVHlwZTo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgfQogCiAgICAgLy8gSXQg
aXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBs
b25nIGFzIHlvdSdyZSBmaW5lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAg
ICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAg
ICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkocmV2aXNpb24gMTI3MzA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6
ZV90KTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIG92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRy
KTsKIAotICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lk
KiopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU2xv
d0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlT3Zl
cnNpemUoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVP
dmVyc2l6ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJ
RCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJp
ZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wg
ZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNp
Y0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qs
IFJlZ2lzdGVySUQgcmVzdWx0KTsKKyAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3Jh
Z2Uoc2l6ZV90LCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2Jq
ZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRy
KTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lz
dGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBz
dG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAx
MjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFz
c1R5cGUsIGJvb2wgZGVzdHIKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6
OnNfaW5mbyksIEFkZHJlc3MocmVzdWx0LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAK
ICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIK
LSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBl
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNG
aW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKQEAgLTQzNCw3ICs0MzQsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZv
aWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBm
YWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1
bHQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6
ZSwgcHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCkKIHsKICAgICBD
b3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFs
bG9jYXRvcigpOwogCkBAIC00NDMsMzcgKzQ0MywzMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
bGxvY2F0ZUJhc2ljU3RvcmFnCiAgICAgc3RvcmVQdHIocmVzdWx0LCAmYWxsb2NhdG9yLT5tX2N1
cnJlbnRSZW1haW5pbmcpOwogICAgIG5lZ1B0cihyZXN1bHQpOwogICAgIGFkZFB0cihBYnNvbHV0
ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHJlc3VsdCk7Ci0gICAg
c3ViUHRyKFRydXN0ZWRJbW0zMihzaXplKSwgcmVzdWx0KTsKKyAgICBzdWJQdHIoVHJ1c3RlZElt
bTMyKHNpemUgLSBvZmZzZXRGcm9tQmFzZSksIHJlc3VsdCk7CiB9CiAKIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQg
bGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwg
UmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQogewogICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBz
dGQ6Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBKU0FycmF5
OjpzdG9yYWdlU2l6ZShpbml0aWFsTGVuZ3RoKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2Ug
PSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
aW5pdGlhbExlbmd0aCkpOwogCiAgICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUg
Zmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3Qg
aGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0aW9uLgotICAgIGVtaXRBbGxvY2F0ZUJh
c2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc3RvcmFnZVJlc3VsdCk7CisgICAgZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpLCBz
dG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXku
CiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxs
UmVzdWx0LCBzdG9yYWdlUHRyKTsKIAogICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGlu
Zm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zmc2V0KCkpKTsKICAg
ICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkp
KTsKKyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1
bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4
Qmlhc09mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhz
dG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCgpKSk7CiAKICAgICAv
LyBTdG9yZSB0aGUgbmV3bHkgYWxsb2NhdGVkIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZVB0cihz
dG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSkpOworICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgdmVjdG9yIGxl
bmd0aCBhbmQgaW5kZXggYmlhcy4KLSAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBB
ZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6aW5k
ZXhCaWFzT2Zmc2V0KCkpKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIHNwYXJzZSB2YWx1ZSBt
YXAuCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBK
U0FycmF5OjpzcGFyc2VWYWx1ZU1hcE9mZnNldCgpKSk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhl
IHZhbHVlcyB3ZSBoYXZlLgorICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdp
c3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwpAQCAtNDg1LDE2ICs0
ODAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgICAg
IHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6
ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQotCi0gICAgLy8gWmVybyBvdXQgdGhlIHJl
bWFpbmluZyBzbG90cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkgPCBpbml0aWFs
TGVuZ3RoOyBpKyspIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKLSNlbHNlCi0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0jZW5kaWYKLSAgICB9CiB9CiAKICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjcsNyArMTY2Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBs
ZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRT
cGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkgeworICAgIGlm
IChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwog
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMTY4Niw3ICsxNjg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8vIElmIHRoZSBhbGxvY2F0aW9uIHdvdWxk
IGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0dWIgY2FsbCBh
Ym92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJheS4KICAgICBpbnQgbGVuZ3RoID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3Zl
cnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkpCisgICAgaWYgKENvcGllZFNwYWNl
Ojppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJldHVybjsKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNl
IGZvciBjZWxsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5z
dHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAKICAgICAvLyBU
ZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBl
KCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBt
X2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsK
IAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRy
KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09
IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFu
LCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKQEAg
LTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3Rl
CiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsK
ICNlbmRpZgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9m
T3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQp
OwpAQCAtMjM5LDEwICsyMzksMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwg
Y3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0
cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3Rv
cmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0yNTIs
MTAgKzI1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAg
ICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFk
ZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQwMyw3ICs0MDMsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1
cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3Ry
dWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAotICAgIENvbnZl
cnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVn
VDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252
ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwogICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2Fk
UHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsK
QEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKSk7CiAKLSAg
ICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVM
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHJlZ1QyKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0
b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQ
dXRCeUlkRGVmYXVsdE9mZnNldCkpOwogCiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uo
c2VxdWVuY2VQdXRCeUlkKTsKQEAgLTUwOSw4ICs1MDksOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1
dERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIGJhc2UpOwotICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1Zh
bHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwor
ICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNl
dEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0KIAogLy8gQ29tcGlsZSBhIGxvYWQgZnJv
bSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgpAQCAt
NTIxLDggKzUyMSw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0KTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zm
c2V0KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpT
T2JqZWN0KiBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zm
c2V0KQpAQCAtNTMyLDggKzUzMiw4IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0
KEpTT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKGJhc2Ut
PmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1
dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBv
ZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Ym9vbCBkaXJlY3QpCkBAIC02NjAsMTEgKzY2MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3Jl
UHRyKHJlZ1QzLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJheVByb2ZpbGUoc3R1YkluZm8tPmJ5
dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAg
IEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNf
aW5mbykpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDMsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0
IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDMpOwotICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZM
ZW5ndGgoKSksIHJlZ1QyKTsKICAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2gzMihMZXNz
VGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7CiAKICAgICBlbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTcsOCArMTUxNyw4IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IKICAgICBBU1NFUlQoYmFzZVZhbHVl
LmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFzZVZhbHVlKTsK
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwot
ICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAgYmFzZS0+c2V0T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
b2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIGJ1
dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHJldHVybiBiYXNlOwogfQpAQCAtMjQzNSw3
ICsyNDM1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAg
IEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLQorICAg
IAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmlu
ZygpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCkt
PmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVl
KGNhbGxGcmFtZSkpKSB7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CkBAIC0y
NTI4LDEyICsyNTI4LDEyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92
YWwKIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVp
bnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNl
VmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAg
ICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAg
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5T
ZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNr
bHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZh
bHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBpLCB2YWx1
ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIH0gZWxzZSBp
ZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODU4LDcgKzg1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwog
ICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIExMSU5UX09QKDEpID0gcmVzdWx0Owot
CisgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKICAgICAgICAgJiYgYmFz
ZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGUoKQpAQCAtODc3LDcg
Kzg3Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAg
ICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBjWzBd
LnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9nZXRfYnlfaWRfb3V0X29mX2xp
bmUpOwotICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTkzOSw3ICs5MzksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHBjWzZdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICAgICAgICAg
IGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CkBAIC05NjcsNyArOTY3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJh
bmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTElu
dDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xMDQ2LDEyICsxMDQ2LDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wdXRfYnlfdmEKICAgICAKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigp
KSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAgSlNBcnJheSoganNBcnJh
eSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJ
bmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBp
LCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBp
ZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0
LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgZXhlYywgaSwg
dmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFs
dWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBMTElO
VF9FTkQoKTsKICAgICAgICAgfQogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChleGVjLCBp
LCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQxLDIx
ICs5NDEsMjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdl
LCB0YWcsIHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zm
c2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zm
c2V0Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9y
YWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhd
LCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5
T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5
QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBw
YXlsb2FkKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwg
LmlzSW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RB
bmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVy
dHlPZmZzZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2Jq
ZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBv
YmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2Ug
LSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVy
LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9h
ZAorICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDgg
LSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQs
IDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9w
ZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUs
IHNsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTc5NCwyMCArNzk0LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRl
ciwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVx
IHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkK
ICAgICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1f
b3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAg
IGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRw
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5k
CiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0lu
dCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50
LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0Ojpt
X291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0
eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5s
aW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5h
bE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCArIHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAg
IGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xv
YmFsKHNpemUsIHNsb3cpCkBAIC0xMTIzLDggKzExMjMsOCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3Zh
bDoKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAg
SlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1
cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJy
YXk6Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVu
Z3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpcyA4W1BCLCBQ
QywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0
MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIwOCw4ICsxMjA4LDggQEAgX2xs
aW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBd
LCB0MAogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCiAg
ICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cK
LSAgICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNs
b3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGxvYWRwIEpTT2Jq
ZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAg
ICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0
eQogLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMK
QEAgLTEyMjAsOSArMTIyMCw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZh
bEVtcHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3Qw
XQotICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3Rv
cmVSZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwg
dDIsIHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0
b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2F1eFdv
cmRbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2
MSwxMSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0
YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQor
Y29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMg
VHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9
IDEzCkBAIC0zMTgsNyArMzIzLDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVD
bGFzc0luZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNo
MgogICAgICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1
Y3R1cmUsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNP
YmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTQ5Myw3ICs0OTgs
NyBAQCBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFj
cm8gd2l0aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVh
dGlvbikKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHBy
b3BlcnR5U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBw
cm9wZXJ0eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSBy
ZWdpc3RlciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRo
YXQgdGhlIG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0
IHBvaW50ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDMsMTIgKzMwMywxMyBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
CiB7CiAgICAgQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PEFyZ3VtZW50cyo+KG9iamVj
dCk7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgZGF0YUxv
ZygiR290IGhlcmUuXG4iKTsKICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPmQtPm51bUFyZ3VtZW50
cykgewogICAgICAgICBBU1NFUlQoaSA8IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAgICAg
ICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgeWV0IHByZXNlbnQgb24gdGhlIG9iamVjdCwg
YW5kIGlzIG5vdCB5ZXQgbWFya2VkIGFzIGRlbGV0ZWQsIHRoZW4gYWRkIGl0IG5vdy4KICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGlmICgoIXRoaXNPYmplY3QtPmQtPmRlbGV0
ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pICYmICFK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCi0gICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCksIDApOworICAg
ICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCkpOwogICAgICAgICBpZiAoIUJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIkFycmF5
Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAi
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5o
IgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5Q29udmVudGlvbnNfaAorI2RlZmlu
ZSBBcnJheUNvbnZlbnRpb25zX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZIDAKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUgbWF4
aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAv
IDIgdG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisjZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRl
eGluZ0hlYWRlcjo6bWF4aW11bUxlbmd0aCkpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJl
IG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5n
CisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVt
LzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmlu
ZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAx
KQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXgg
ZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhG
RkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkg
dGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFy
cmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVy
IGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRo
ZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cg
NFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8g
dXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2Vz
IGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNl
IGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0
aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5
TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8
PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVy
IDw9IG51bVZhbHVlczsKK30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAg
SW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7Cisg
ICAgcmVzdWx0LnNldExlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3Ro
LCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDggKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlQ
cm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKSVQuaCIKICNpbmNsdWRlICJKU1N0cmluZ0J1aWxkZXIuaCIKQEAgLTExNCw5ICsxMTYs
MTcgQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8gPQogQGVuZAogKi8K
IAorQXJyYXlQcm90b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGV4ZWMtPmds
b2JhbERhdGEoKSwgMCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQ
cm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcHJvdG90
eXBlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7
Cit9CisKIC8vIEVDTUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBK
U0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCitBcnJheVByb3Rv
dHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNBcnJheShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAg
LTI5Miw4ICszMDIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXgoaykpCi0g
ICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7CisgICAgICAgIGlmICh0
aGlzT2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBlbGVtZW50ID0gdGhp
c09iai0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbGVt
ZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQxMywxMCArNDIzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlj
a2x5KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvV1RGU3RyaW5nSW5s
aW5lKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2MzgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEp
OwogCi0gICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYg
IWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYgKHRoaXNPYmotPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3Bh
cnNlSW5kZXhpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlv
bihleGVjLCBjYWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJheSh0aGlzT2Jq
KS0+c29ydE51bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAg
ICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4OCw5ICs3OTgsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRD
YWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFk
RXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgo
aykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGsp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1NiwxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMs
IGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9u
KCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgo
aykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5
KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAs
IGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC05MDksMTEgKzkxOSwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMp
OwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsr
aykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBj
YWNoZWRDYWxsLmNhbGwoKTsKQEAgLTk2NSwxMSArOTc1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5
KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAg
ICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBw
bHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdl
dEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXkt
PmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwg
dGhpc09iaik7CiAKQEAgLTEwMTcsMTEgKzEwMjcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhp
c09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBh
cnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgw
LCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2Fs
bC5jYWxsKCk7CkBAIC0xMDc1LDggKzEwODUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAg
ICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJy
YXktPmNhbkdldEluZGV4KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgoMCk7Cisg
ICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseSgwKSl7CisgICAg
ICAgIHJ2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseSgwKTsKICAgICAgICAgaSA9IDE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMDk3
LDggKzExMDcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKICAgICAgICAgICAgIEpTVmFsdWUgdjsK
LSAgICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4KGkpKSkKLSAgICAgICAg
ICAgICAgICB2ID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgaWYgKExJS0VMWShh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKSkKKyAgICAgICAgICAgICAgICB2ID0gYXJyYXkt
PmdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBi
cmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBm
YWxsYmFjayB0byBzbG93IHBhdGgKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MSwgdik7CkBAIC0xMTUyLDggKzExNjIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQog
ICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFy
cmF5LT5jYW5HZXRJbmRleChsZW5ndGggLSAxKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldElu
ZGV4KGxlbmd0aCAtIDEpOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkobGVuZ3RoIC0gMSkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNr
bHkobGVuZ3RoIC0gMSk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdW5zaWduZWQg
aWR4ID0gbGVuZ3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlkeCkpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGlkeCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hp
bGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaWR4KSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlkeCkpOwogICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAgICAgICAgICBy
diA9IGNhY2hlZENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxNyArMjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlw
ZSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJheVByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVByb3RvdHlwZShK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgcHVibGljOgog
ICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgQXJyYXlQcm90
b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheVBy
b3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90
b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CkBAIC00Nyw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAg
ICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiQXJy
YXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkluZGV4
aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBzdHJ1Y3QgaG9s
ZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3Qg
cG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50
aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0
cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMu
ICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUg
dGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hp
ZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUg
YnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNW
YWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFy
cmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGly
ZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0
ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2Uq
PihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3Jh
Z2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRl
eGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAg
CisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZl
Y3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGlu
ZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVk
IGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgo
KTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGlu
Z0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJu
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjb3B5SGVhZGVyRnJvbShjb25zdCBBcnJheVN0b3JhZ2UmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgbV9zcGFyc2VNYXAgPSBvdGhlci5tX3NwYXJzZU1hcDsKKyAgICAgICAgbV9pbmRleEJp
YXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90
aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAg
ICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4
OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9k
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNw
YXJzZU1vZGUoKTsKKyAgICB9CisgICAgCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFy
c2VNYXA7CisgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1
ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRv
IGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1f
aW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXph
dGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsK
KyNlbmRpZgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVy
OjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhX
b3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2luZGV4Qmlhcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IHNwYXJzZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fc3BhcnNlTWFwKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9y
YWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHku
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0
ZXJmbHlfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJy
YXlTdG9yYWdlOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFu
dGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA/IGhhc0luZGV4aW5nSGVhZGVyIDog
dHJ1ZSk7CisgICAgICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJ
bmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlD
YXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgKGhhc0luZGV4aW5nSGVhZGVyID8g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA6IDApICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkg
eyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRl
eGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhp
bmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisg
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3Rh
dGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IElu
ZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBz
dGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xs
ZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0IEluZGV4aW5n
SGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpm
cm9tKHRoaXMpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0
dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFk
ZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMp
OyB9CisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1Bh
eWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlT
dG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg
ICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBh
Y2l0eTsgfQorICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAg
IC8vIFRoZSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxv
Y2F0aW9uIGl0c2VsZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1k
YXRhIHRvIHJlZmxlY3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQg
dGhpcyBzZXQgb2YKKyAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3Qg
aW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBt
b2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUg
YnV0dGVyZmxpZXMgYnkgY2FsbGluZworICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxs
b2NhdGVTdG9yYWdlLgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBv
bGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0
dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xk
U3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBn
cm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRz
IGFzIG11Y2guCisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAg
ICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Ig
bm90IHRoZSBvYmplY3QgaGFzIGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0ZXJmbHkqIHVu
c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBC
dXR0ZXJmbHkqIHNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90
cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1l
dGhvZHNfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
LmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOwor
ICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplLCAmdGVtcCkpCisgICAg
ICAgIENSQVNIKCk7CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRl
ciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGds
b2JhbERhdGEsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJbmRleGluZ0hlYWRl
cikKKyAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRl
eGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLAorICAgICAgICBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQq
IEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFz
ZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlD
YXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAor
ICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHko
CisgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5
LAorICAgICAgICBiYXNlKHByZUNhcGFjaXR5LCBvbGRQcm9wZXJ0eUNhcGFjaXR5KSwKKyAgICAg
ICAgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQ
cm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KHN0cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGhhc0lu
ZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGlu
Z0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJv
cGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFT
U0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHko
b2xkU3RydWN0dXJlKSk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4
aW5nSGVhZGVyID09IGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICB2b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRl
eGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHNpemVfdCBu
ZXdTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9j
YXRlU3RvcmFnZSgmdGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAorICAg
ICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKG9sZFN0cnVjdHVyZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30K
KworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQ
cmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5p
bml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtdWNoIG1vcmUgZWZmaWNp
ZW50IGlmIHdlIHVzZWQgdGhlIHByb3BlcnR5IHNpemUsCisgICAgLy8gbm90IHRoZSBjYXBhY2l0
eS4KKyAgICB2b2lkKiB0byA9IHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNh
cGFjaXR5OworICAgIHZvaWQqIGZyb20gPSBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2Fw
YWNpdHk7CisgICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1pbigKKyAgICAgICAgdG90YWxTaXplKDAs
IHByb3BlcnR5Q2FwYWNpdHksIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBu
ZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAg
ICBtZW1jcHkodG8sIGZyb20sIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgcmV0dXJuIHJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyLAorICAgICAgICBpbmRleGlu
Z0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVD
YXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQo
aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VS
VChudW1iZXJPZlNsb3RzIDw9IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVy
ZSkpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8g
cmV3cml0ZSB0aGlzIGFzIGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaAorICAgIC8v
IGRpcmVjdGlvbiB3ZSdyZSBtb3ZpbmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJh
IGNoZWNrIG9mIG1lbW1vdmUgYW5kICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBhIHNtYWxsIGFt
b3VudCBvZiBtZW1vcnkgaW4gdGhlIGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdocHV0IG9mIG1l
bW1vdmUgd29uJ3QKKyAgICAvLyBhbW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBpdC4g
QW5kIG5vLCB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgQysrIGNvbXBpbGVyIHRvCisgICAgLy8gaW5s
aW5lIG1lbW1vdmUgKHBhcnRpY3VsYXJseSBzaW5jZSB0aGUgc2l6ZSBhcmd1bWVudCBpcyBsaWtl
bHkgdG8gYmUgdmFyaWFibGUpLCBub3IgY2FuCisgICAgLy8gd2UgcmVseSBvbiB0aGUgY29tcGls
ZXIgdG8gcmVjb2duaXplIHRoZSBvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhcmd1bWVudHMgKHNp
bmNlCisgICAgLy8gcHJvcGVydHlDYXBhY2l0eSBpcyB2YXJpYWJsZSBhbmQgY291bGQgY2F1c2Ug
d3JhcC1hcm91bmQgYXMgZmFyIGFzIHRoZSBjb21waWxlciBrbm93cykuCisgICAgbWVtbW92ZSgK
KyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBh
Y2l0eSwKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAg
ICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJ
bmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90
cyktPmJ1dHRlcmZseSgpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NF
UlQoaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
CisgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVt
bW92ZSgKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVt
YmVyT2ZTbG90cywKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5
LAorICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNp
emVvZihJbmRleGluZ0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJl
dHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVy
T2ZTbG90cyktPmJ1dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3Bl
cnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5j
dGlvblB0ciBnZXRPd25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzOworCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5h
bWVzOwogCkBAIC0xMjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBc
CiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpkZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1l
cywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2Rl
ZmluZSBJbmRleGluZ0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRl
cmZseTsKK2NsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFN0cnVjdHVyZTsKK3N0
cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAg
ICAvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIg
LyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8g
cmlzayBvZiBvdmVyZmxvdy4KKyAgICBlbnVtIHsgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDAg
fTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsg
fQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2F1eFdvcmQpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRl
eGluZ0hlYWRlciwgbV9sZW5ndGgpOyB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUg
ZGVmYXVsdCBJbmRleGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAg
Ly8gY29udHJhY3Qgb2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUg
SklUIGFuZCBHQyBkZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisg
ICAgICAgIDogbV9hdXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9
CisgICAgCisgICAgdm9pZCBzZXRMZW5ndGgodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGggPSBs
ZW5ndGg7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1
eFdvcmQ7IH0KKyAgICB2b2lkIHNldEF1eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdv
cmQgPSBhdXhXb3JkOyB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1
dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBmcm9tKGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5kZXhpbmdI
ZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5n
SGVhZGVyKiBmcm9tKEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0g
MTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJv
cGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4ocHJvcGVydHlTdG9yYWdlKTsKKyAgICB9Cisg
ICAgCisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0K
KyAgICAKKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3Jh
Z2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0
aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4g
dGhlIHNlbnNlIHRoYXQgdGhleSBjYW5ub3QgYmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0
aGUgSW5kZXhpbmdIZWFkZXIuCisgICAgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwor
ICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICAK
KyAgICB1aW50MzJfdCBtX2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVw
ZW5kcyBvbiB0aGUgYXJyYXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gVGhlIGxl
bmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5k
ZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgi
CisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0
eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUg
c2l6ZV90IEluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBy
ZXR1cm4gQXJyYXlTdG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5n
VHlwZV9oCisjZGVmaW5lIEluZGV4aW5nVHlwZV9oCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBl
ZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOworCisvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJl
c2VuY2Ugb2YgY2FwYWJpbGl0aWVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5
ICAgICAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJh
eVN0b3JhZ2UgICAgICAgICAgPSA4OworCisvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2lu
ZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKKy8vIG1hc2tlZCBv
ZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIEhhZEFycmF5U3RvcmFnZSAgICAgICAgICA9IDE2OyAvLyBNZWFucyB0aGF0IHRoaXMg
b2JqZWN0IGRpZCBoYXZlIGFycmF5IHN0b3JhZ2UgaW4gdGhlIHBhc3QuCisKKy8vIExpc3Qgb2Yg
YWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJy
YXkgICAgICAgICAgICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBBcnJheSAgICAgICAgICAgICAgICAgICAgPSBJc0FycmF5Oworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJy
YXlTdG9yYWdlOworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAgICAgICAgICAgID0gMTU7CisKKy8vIE1hc2sg
b2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkgID0gMzE7CisKK2lubGluZSBi
b29sIGhhc0luZGV4aW5nSGVhZGVyKEluZGV4aW5nVHlwZSB0eXBlKQoreworICAgIHJldHVybiAh
ISh0eXBlICYgSGFzQXJyYXlTdG9yYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBJbmRleGluZ1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYQog
ICAgICAgICBjYWxsRnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpLAogICAgICAgICBjYWxsRnJhbWUt
PnNjb3BlKCkKICAgICApCi0gICAgLCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIHRoaXMsIDApCisgICAgLCBtX3JlZ2lzdGVyQXJyYXkoMCkKICAgICAsIG1fbnVtQ2Fw
dHVyZWRBcmdzKG1heChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgZnVuY3Rpb25FeGVjdXRh
YmxlLT5wYXJhbWV0ZXJDb3VudCgpKSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0aW9u
RXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2lzVG9ybk9mZihm
YWxzZSkKQEAgLTc0LDEyICs3NCwxMiBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
IAogICAgIC8vIE5vIG5lZWQgdG8gbWFyayBvdXIgcmVnaXN0ZXJzIGlmIHRoZXkncmUgc3RpbGwg
aW4gdGhlIFJlZ2lzdGVyRmlsZS4KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9
IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5nZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2Ug
cmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheTsKICAgICBpZiAoIXJl
Z2lzdGVyQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHZpc2l0b3IuY29weUFuZEFwcGVu
ZChiaXR3aXNlX2Nhc3Q8dm9pZCoqPigmcmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lz
dGVyQXJyYXlTaXplSW5CeXRlcygpLCByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZWdpc3Rl
ckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemUoKSk7Ci0gICAgdGhpc09iamVj
dC0+bV9yZWdpc3RlckFycmF5LnNldChyZWdpc3RlckFycmF5LCBTdG9yYWdlQmFycmllcjo6VW5j
aGVja2VkKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5
OwogICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHRoaXNPYmpl
Y3QtPnJlZ2lzdGVyT2Zmc2V0KCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIGFyZ3VtZW50cyBvYmpl
Y3QsIHNpbmNlIGl0IHBvaW50cyBhdCBvdXIgYnVmZmVyLgpAQCAtMTM4LDcgKzEzOCw3IEBAIGlu
bGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpT
QWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwog
CkBAIC0xNTMsOCArMTUzLDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFt
ZXMoSgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAgdGhl
IEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwot
ICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVt
ZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdp
dGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxMjcz
MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogCiAg
ICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CkBAIC05NSw3ICs5NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgcmVnaXN0
ZXJBcnJheVNpemUoKTsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcygp
OwogCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRl
bnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMg
aXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIFByb3BlcnR5
U3RvcmFnZSBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJz
LCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9m
IHRoZSByZWdpc3RlciBmaWxlLgogICAgICAgICBpbnQgbV9udW1DYXB0dXJlZEFyZ3M7CiAgICAg
ICAgIGludCBtX251bUNhcHR1cmVkVmFycyA6IDMwOwogICAgICAgICBib29sIG1faXNUb3JuT2Zm
IDogMTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZm9yIChp
bnQgaSA9IGZyb207IGkgPCB0bzsgKytpKQogICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLnNldChn
bG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CiAKLSAgICAgICAgbV9yZWdp
c3RlckFycmF5LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdpc3RlckFycmF5KTsKKyAgICAgICAg
bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICAgICAgbV9yZWdpc3RlcnMgPSBy
ZWdpc3RlcnM7CiAgICAgICAgIG1faXNUb3JuT2ZmID0gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI3MzA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5j
b20pCiAgKgpAQCAtMjQsMTMgKzI0LDE3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogCiAjaW5j
bHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw0ODAg
KzQ5LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0Fy
cmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVy
dmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5
IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFy
IEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAq
IEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBu
b24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVw
cmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVl
IGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlz
IGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2ln
bmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMg
YW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8g
QWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFz
IGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCks
IGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8g
c3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwg
YmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVy
ZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBp
biB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFy
c2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8g
ICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhl
IHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUg
ZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3Rv
ciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVu
c2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAg
ICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVY
KSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBh
cnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBp
cyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJl
bG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNo
IHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAg
KHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsK
LS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBi
ZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2Rl
ZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhG
RkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZh
bHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRo
b3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUg
PHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
IDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3Qg
YW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhf
QVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBp
cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0v
LyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAo
ZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAg
IAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0
aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklS
U1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0
b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNl
cyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgot
Ly8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBp
bnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJ
ZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5
OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLS8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNp
emUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKLS8v
IGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQg
YXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3Rh
bnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1bnNpZ25lZCBsYXN0
QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJuIGxl
bmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0
aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQotc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBp
ZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2Up
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQot
Ci1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5n
TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7
Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwot
Ci0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsKLSAg
ICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9y
TGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdl
KSkKLSAgICAgICAgQ1JBU0goKTsKICAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxB
cnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0g
bV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAg
IG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIEluZGV4aW5nSGVh
ZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgo
aW5pdGlhbExlbmd0aCk7CisgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIHN0
b3JhZ2UtPm1fc3BhcnNlTWFwID0gMDsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gMDsKICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOworICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA9IDA7CisgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7
CiAjZW5kaWYKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSogSlNBcnJh
eTo6dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgLy8gQ2hl
Y2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVjdG9yLgot
ICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gbWF4KGlu
aXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3Jh
Z2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBu
ZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFn
ZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3Jh
Z2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRp
YWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5p
dGlhbExlbmd0aDsKLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbiA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwotfQotCi0v
LyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUg
b2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVj
dC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhp
c09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJh
eSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21h
cC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsK
LSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNp
dHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBh
Y2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0
IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5k
ICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIElu
IHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBh
cnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhp
bmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQu
aXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRh
KCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVl
IGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0
dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nl
c3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0gICAgICAgIGlmIChz
aG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVj
LCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUg
Ym9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
LXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJh
eUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2
ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJz
ZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHBy
b3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMg
bm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAg
ICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
c2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhh
dCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9Ci0KLSAgICBlbnRyeS5hdHRyaWJ1dGVzID0g
MDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJv
cGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQo
KTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJT
ZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUp
LT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikgewotICAgICAgICBzbG90LnNldFVuZGVmaW5l
ZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdl
dHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpIGNvbnN0Ci17
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQocmVzdWx0KTsK
LQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1
bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0g
ICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBl
eGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6
OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewotICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Ci0g
ICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVl
TWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGl0ZXJhdG9y
IGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsK
LX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFw
OwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOwotfQot
Ci12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFyc2VNYXAoKQotewotICAgIGRlbGV0ZSBtX3Nw
YXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSAwOwotfQotCi12b2lkIEpTQXJy
YXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgaWYgKCFtYXApIHsKLSAgICAgICAg
YWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFs
dWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgLy8g
VGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRv
IGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1
bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAg
ICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQqIG5ld1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5l
d1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAotICAgIEFycmF5U3RvcmFnZSog
bmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwot
ICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICBu
ZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3
U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7Ci0gICAgbV92ZWN0b3JMZW5ndGggPSAwOwot
fQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VB
cnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFBy
b3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKLXsKLSAgICBpZiAoZGVzY3JpcHRvci5p
c0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAg
ICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2Ny
aXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1
dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRv
cikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIg
PSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAg
ICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChv
bGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBnZXR0ZXIg
PSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAgICBKU09iamVjdCogc2V0dGVy
ID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQotICAgICAgICAg
ICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAo
b2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgc2V0dGVy
ID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLQotICAgICAgICBHZXR0ZXJTZXR0ZXIq
IGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0
ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRT
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwotCi0gICAgICAgIGVudHJ5SW5NYXAt
PnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKLSAgICAgICAgZW50cnlJ
bk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKLSAgICBlbnRyeUlu
TWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
b2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpT
QXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRp
b24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOwotCi0gICAgaWYgKCFpblNw
YXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1
bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5n
IHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAgIC8vIOKAkyBob3dldmVyIGlm
IHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92
ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKLSAgICAgICAgLy8gc3RhdGUgKGkuZS4g
ZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5l
ZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KLSAgICAgICAgaWYgKCFkZXNjcmlwdG9y
LmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMs
IGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9
Ci0KLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAg
IEFTU0VSVChtYXApOwotCi0gICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBw
cm9wZXJ0eSBuYW1lIFAuCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3Vs
dCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUlu
TWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2li
bGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBv
ZiBPLgotICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IGZhbHNlLCB0aGVuIFJlamVjdC4KLSAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBh
bmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
Ci0gICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQg
aXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LmEuIElmIElz
R2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVl
LCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9m
IG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBh
bmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNj
cmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNj
IGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRl
ZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4g
RWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNy
ZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgotICAgICAgICAvLyBvYmpl
Y3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1
cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVz
Yy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwg
dGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBp
cyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUu
Ci0KLSAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOwotICAgICAgICBlbnRyeUlu
TWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0g
ICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRv
cihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xl
bmd0aCA9IGluZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
NS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgotICAgIC8v
IDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1
cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZh
bHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1
c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlw
dG9yIGN1cnJlbnQ7Ci0gICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNj
cmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVuCi0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3Vy
YWJsZSgpKSB7Ci0gICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3Vy
YWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdl
IGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0g
ICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVz
YyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5k
IERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlm
IChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkg
IT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRy
aWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4g
SWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFs
aWRhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKSB7Ci0gICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVu
dCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhl
bgotICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5p
c0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgotICAgICAgICAgICAg
aWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVj
aGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8v
IDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQg
dGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBk
YXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3Rp
bmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAgICAgICAgICAvLyBb
W0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0
aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5
IHRvIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGlu
ZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBh
bmQgW1tFbnVtZXJhYmxlXV0KLSAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUg
cmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuCi0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVz
Y3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBp
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFy
ZSBib3RoIHRydWUsIHRoZW4KLSAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICgh
Y3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRy
dWUuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlp
LjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5k
IFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgot
ICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3Vy
cmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYm
IGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAg
ICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQg
SXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAg
aWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4g
UmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVW
YWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAg
ICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVy
KCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIg
b2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTEu
aWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBT
YW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdl
dHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0
dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBE
ZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmli
dXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0
aGUgZmllbGQuCi0gICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9y
LCBjdXJyZW50KTsKLSAgICAvLyAxMy4gUmV0dXJuIHRydWUuCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGJ1dHRlcmZseTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkBAIC01MjcsOSArNzQsOSBAQCB2b2lk
IEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYgKCFpc0xlbmd0aFdy
aXRhYmxlKCkgfHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlv
bmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0
TGVuZ3RoSXNSZWFkT25seSgpOwogfQpAQCAtNjMwLDM4ICsxNzcsMTAgQEAgYm9vbCBKU0FycmF5
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5E
ZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCiAgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRl
ZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBB
IHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRo
aXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRy
dWUuCi0gICAgICAgIHJldHVybiBhcnJheS0+ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMs
IGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotfQotCi1ib29sIEpTQXJyYXk6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAg
ICAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywgaW5k
ZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICBpZiAoaSA8IHRo
aXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0
LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgp
KSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwg
c2xvdCk7CisgICAgcmV0dXJuIGFycmF5LT5KU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0K
IAogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
QEAgLTY3MiwxMCArMTkxLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCi0gICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApA
QCAtNjg3LDI2ICsyMDIsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpIHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgp
IHsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0g
ICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
aXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKIH0KIApAQCAtNzE0LDExICsyMDksNiBAQCBib29sIEpTQXJyYXk6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBw
dXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGgg
PSB2YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTczMywxOTQgKzIyMyw5IEBAIHZvaWQgSlNBcnJh
eTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQKICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTQXJyYXk6
OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9y
YWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICBpZiAo
aSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xl
bmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgc3Rv
cmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLQotICAgICAgICB2YWx1ZVNsb3Quc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwotICAgICAgICB0aGlzT2Jq
ZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBIYW5kbGUgMl4zMi0xIC0gdGhpcyBpcyBub3QgYW4gYXJyYXkgaW5kZXggKHNlZSBFUzUuMSAx
NS40KSwgYW5kIGlzIHRyZWF0ZWQgYXMgYSByZWd1bGFyIHByb3BlcnR5LgotICAgIGlmIChVTkxJ
S0VMWShpID4gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChzaG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBj
YWxsIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGguCi0gICAgdGhpc09iamVjdC0+cHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlk
IGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAg
QVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9J
TkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0
LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFw
LgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5v
dCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5k
IGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsK
LSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0
aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3Rp
bGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0g
ICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkg
KyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5j
ZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9y
LgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9y
IHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUg
dmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0g
ICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQ
cm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAg
ICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAg
c3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJl
bnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2lu
ZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNw
YXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxv
Y2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9k
ZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkg
fHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewot
ICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3Jl
YXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1
ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRo
ZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAg
IC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90
KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFs
aWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAg
ICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmly
c3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBt
YXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMg
bm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBh
bmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkp
OwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
LSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwg
aSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNp
bmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0
b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBh
IHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBh
ZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRh
KCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1cm4gbWFw
LT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAv
LyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgot
ICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpOwotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICBsZW5ndGggPSBp
ICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAg
Ly8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwg
d2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBz
cGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3Bh
cnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJy
YXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVt
VmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5j
cmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZh
bHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8g
dGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0g
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNs
b3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
Ym9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkyOCwz
NSArMjMzLDYgQEAgYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbAogICAg
IHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKIH0KIAotYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCi17Ci0gICAgSlNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLQotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICBpZiAoaSA8IHRoaXNP
YmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3Qp
IHsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAg
ICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNl
Y29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lk
KiBiKQogewogICAgIHVuc2lnbmVkIGRhID0gKnN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4o
YSk7CkBAIC05NjQsMTI3ICsyNDAsMjYgQEAgc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0
KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEgPiBkYikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlO
YW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCi0gICAgLy8gaXMg
aW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVy
ZW50IGFwcHJvYWNoLAotICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZm
ZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KLQotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCB0aGlzT2JqZWN0LT5tX3Zl
Y3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAgICB9Ci0K
LSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VW
YWx1ZU1hcCkgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGtleXM7Ci0gICAgICAgIGtleXMu
cmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAg
ICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgp
LCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKLSAgICB9CiAKICAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTQXJyYXk6OmdldE5ld1ZlY3Rvckxl
bmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQotewotICAgIEFTU0VSVChkZXNpcmVkTGVuZ3Ro
IDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotCi0gICAgdW5zaWduZWQgaW5jcmVhc2Vk
TGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xl
bmd0aCwgMTAwMDAwVSk7Ci0KLSAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgp
Ci0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7Ci0gICAgZWxzZSBpZiAo
IW1fdmVjdG9yTGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExl
bmd0aCwgbGFzdEFycmF5U2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNh
bGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xl
bmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNl
ZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBU
aGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVz
aXJlZExlbmd0aCAmIDEpOwotICAgIH0KLQotICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0g
ZGVzaXJlZExlbmd0aCk7Ci0KLSAgICBsYXN0QXJyYXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0
aCwgRklSU1RfVkVDVE9SX0dST1cpOwotCi0gICAgcmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgs
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotfQotCi1ib29sIEpTQXJyYXk6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3Ro
KQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5h
bGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1
ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCi0gICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBo
YXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZp
Y2llbnRseS4KLSAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7Ci0g
ICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbmV3VmVj
dG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7Ci0KLSAgICAvLyBGYXN0
IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9j
IG1ha2VzIHNlbnNlLgotICAgIGlmIChMSUtFTFkoIW1faW5kZXhCaWFzKSkgewotICAgICAgICB2
b2lkKiBuZXdTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZuZXdTdG9yYWdlLCBzdG9yYWdlU2l6
ZSh2ZWN0b3JMZW5ndGgpLCBzdG9yYWdlU2l6ZShuZXdWZWN0b3JMZW5ndGgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1N0b3Jh
Z2UpKTsKLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAg
ICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLQotICAgICAgICBtX3ZlY3Rvckxl
bmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNp
dHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4K
LSAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBtaW4obV9pbmRleEJpYXMgPj4gMSwgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gQ2FsY3VsYXRl
IG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHku
Ci0gICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3
SW5kZXhCaWFzOwotICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKG5ld1N0b3JhZ2VDYXBhY2l0
eSksICZuZXdBbGxvY0Jhc2UpKSAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRo
ZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVk
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
LSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotCi0gICAgbV92ZWN0b3JMZW5ndGgg
PSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAg
bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnBy
ZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJp
YXMpOwotCi0gICAgLy8gQ29weSB0aGUgQXJyYXlTdG9yYWdlIGhlYWRlciAmIGN1cnJlbnQgY29u
dGVudHMgb2YgdGhlIHZlY3Rvci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3Rv
cmFnZVNpemUodmVjdG9yTGVuZ3RoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlv
biwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdB
bGxvY0Jhc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMg
dGhlIG5ldyBzcGFjZSB1bmNsZWFyZWQuCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgLy8g
SWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KLSAg
ICBBU1NFUlQoY291bnQgPiBtX2luZGV4Qmlhcyk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIHByb3Bl
cnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CiAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBo
YW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KKyAgICBBU1NFUlQoY291bnQgPiBzdG9yYWdl
LT5tX2luZGV4Qmlhcyk7CiAKICAgICAvLyBTdGVwIDE6CiAgICAgLy8gR2F0aGVyIDQga2V5IG1l
dHJpY3M6CkBAIC0xMDkzLDggKzI2OCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG8KICAgICAvLyAgKiBjdXJyZW50Q2FwYWNpdHkgLSB3aGF0IGlzIHRoZSBjdXJy
ZW50IHNpemUgb2YgdGhlIHZlY3RvciwgaW5jbHVkaW5nIGFueSBwcmUtY2FwYWNpdHkuCiAgICAg
Ly8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cg
dGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCi0gICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3Ro
ID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2Vk
VmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNr
IHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ct
c2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
LSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMTEwMiw4ICsyNzcsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5zaWduZWQgcmVxdWlyZWRWZWN0b3JMZW5n
dGggPSB1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7CiAgICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9y
TGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIFRoZSBzdW0gb2Yg
bV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rv
ckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9
IG1fdmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7CisgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggLSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRl
eEJpYXMpOworICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9m
IGRlc2lyZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxvdywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILgogICAgIHVuc2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1p
bihNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILCBtYXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJl
ZFZlY3Rvckxlbmd0aCkgPDwgMSk7CiAKQEAgLTExMTQsMTAgKzI4OSwxMSBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNh
cGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVu
dGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0Lgog
ICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgewotICAg
ICAgICBuZXdBbGxvY0Jhc2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKKyAgICAgICAgbmV3QWxs
b2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSgpKTsKICAgICAgICAgbmV3U3RvcmFn
ZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
Z2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShkZXNpcmVkQ2Fw
YWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNp
emVGb3IoZGVzaXJlZENhcGFjaXR5KSk7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5
OwogICAgIH0KQEAgLTExMzAsNDUgKzMwNiw0MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gSWYgaXQgZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3Vu
dCB0aGF0IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFuIGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQog
ICAgIC8vIHZlY3RvciB3aXRoIGhhbGYgdGhlIHBvc3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3Vz
bHkuCiAgICAgdW5zaWduZWQgcG9zdENhcGFjaXR5ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgbV92
ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKICAgICAgICAgLy8gQXRvbWljIGRlY2F5LCArIHRoZSBwb3N0LWNhcGFjaXR5IGNhbm5vdCBi
ZSBncmVhdGVyIHRoYW4gd2hhdCBpcyBhdmFpbGFibGUuCi0gICAgICAgIHBvc3RDYXBhY2l0eSA9
IG1pbigobV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0g
cmVxdWlyZWRWZWN0b3JMZW5ndGgpOwogICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVu
dHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5n
IHJlZHVjZWQuCi0gICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxv
Y0Jhc2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpOwotICAgIH0K
LQotICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNp
dHk7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0
aDsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihy
ZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBt
X2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6Ci0gICAgLy8gQ29weSBhcnJheSBkYXRhIC8g
aGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZy
ZWUgYW55IG9sZCBhbGxvY2F0aW9uLgotCi0gICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3
aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRp
bmcgZGF0YQotICAgIC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4Qmlhcyku
IEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVt
bW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1v
dmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2Ug
Y29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBt
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0
aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2Ug
PSBuZXdBbGxvY0Jhc2U7CisgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSgpKSB8fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSAtIGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0
aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5l
d0luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jh
c2UsIG5ld0luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgbWVtbW92ZShu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5t
X3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92
ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBw
cm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKKyAgICAKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9
IG5ld0J1dHRlcmZseTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0Nv
bnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVu
Z3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50
ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwg
bV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9y
YWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMg
bm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTE5NSw3ICszNjYsNyBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwpAQCAtMTIwNCwxNCArMzc1LDE0IEBAIGJvb2wg
SlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAg
ICAgbWFwLT5yZW1vdmUoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+aXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAg
ICAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgICAg
ICAvLyBEZWxldGUgcHJvcGVydGllcyBmcm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFs
dWUgPSB2YWx1ZVNsb3Q7CkBAIC0xMjIwLDUzICszOTEsNjUgQEAgYm9vbCBKU0FycmF5OjpzZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+
bV9sZW5ndGggPSBuZXdMZW5ndGg7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7
CiAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAg
IAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVu
Z3RoKSB7Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJy
YXk6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIAorICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAg
ICAgICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5zaWdu
ZWQgaW5kZXggPSBsZW5ndGggLSAxOwotICAgIGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3RoKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaW5kZXhdOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAtLXN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSB2YWx1ZVNsb3QuZ2V0KCk7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoaW5kZXggPCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07CisgICAgICAgICAgICBpZiAo
dmFsdWVTbG90KSB7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGluZGV4OwotICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3Jp
dGFibGUoKSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAg
IC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRl
cm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0gICAgSlNWYWx1ZSBlbGVtZW50
ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBpZiAo
IWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1
bWVudCBpbmR4LgorICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgorICAgICAgICBpZiAoIWRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FsbCB0aGUg
W1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5k
eCwgYW5kIHRydWUuCisgICAgICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7CisgICAg
ICAgIC8vIFJldHVybiBlbGVtZW50LgorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4
ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBh
cmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc0
LDYzICs0NTcsNzcgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8g
IC0gcHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVy
dHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAt
IHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVz
SW5WZWN0b3IuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAg
aWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aCArIDE7Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1
cm47CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAg
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIDAsIHZh
bHVlLCB0cnVlLCBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkp
OworICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKIAotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3Ro
IDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0g
ICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAg
ICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVu
Z3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYg
JiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52
YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8v
IEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAm
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pmxlbmd0aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxl
bmd0aCArIDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0
aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgor
ICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7
CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3Jh
Z2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUu
NC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KIAotICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXgu
Ci0gICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0
aCwgdmFsdWUsIHRydWUpOwotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFu
ZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0
cnVlLCBzdG9yYWdlKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAg
ICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAg
ICAgCi0gICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5z
aWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhl
IGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0
ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgot
ICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNw
YXJzZU1vZGUoKSkKKyAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgfHwgaW5TcGFyc2VJbmRleGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFvbGRMZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5n
dGggLT0gY291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsK
ICAgICAKLSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92
ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3Ro
ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAg
ICAgICBjb3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAg
IAotICAgICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3Ro
IC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAg
Y2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAr
IGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1t
b3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAg
ICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNl
U3RvcmFnZSk7Ci0KLSAgICAgICAgICAgIG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBp
ZiAodmVjdG9yTGVuZ3RoKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LT5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFz
ICs9IGNvdW50OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTMzOSw1
OSArNTM2LDMwIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFs
bGJhY2suICAgIAogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBjb3VudCkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUg
YXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRl
LAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0g
ICAgaWYgKGxlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNl
TW9kZSgpKQorICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8
fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1faW5kZXhCaWFzID49IGNvdW50KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50
OwotICAgICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHN0b3JhZ2UpIC0gY291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAg
ICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAg
ICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdC
YXNlU3RvcmFnZSk7Ci0gICAgICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChz
dG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0
b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgo
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlm
dENvdW50U2xvd0Nhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9y
W2ldLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQo
U3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9u
RmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBp
ZiAodGhpc09iamVjdC0+bV9zdG9yYWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJb
JXVdOiAiLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFn
ZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVu
ZChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhp
c09iamVjdC0+bV92ZWN0b3JMZW5ndGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3Jh
Z2UtPm1fdmVjdG9yLT5zbG90KCksIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAg
ICAgICBpZiAoYmFzZVN0b3JhZ2UgIT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSkgewotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8QXJyYXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNp
emVvZihKU1ZhbHVlKSAqIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRo
aXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAg
ICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0
LT5tX3NwYXJzZVZhbHVlTWFwKQotICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7
Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBj
b25zdCB2b2lkKiBiKQogewogICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFs
dWUqPihhKS0+YXNOdW1iZXIoKTsKQEAgLTE0MDgsMTEyICs1NzYsMTM3IEBAIHN0YXRpYyBpbnQg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJp
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxs
VHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VN
b2RlKCkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFT
U0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkp
OwotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBi
b29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmds
b2JhbERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTs7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFy
c2VNYXApIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAg
IHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZh
c3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBk
b24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2Vy
IHZpc2libGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIg
b2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0
b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0Zv
clFTb3J0KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlm
ICghYWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFy
ZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29t
cGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBX
ZQotICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNl
IHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGlu
ZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdl
LT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVO
dW1iZXJzRm9yUVNvcnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lD
aGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
QVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAg
IGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFT
Y3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25j
ZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25z
aWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwg
dGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNp
ZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUg
Y3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3Ro
ZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0
aW9uIGluY29uc2lzdGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsK
LSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVh
cDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFs
dWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAg
ICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMg
JiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxv
d2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVz
IGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4K
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
OyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZT
dHJpbmdJbmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0K
KyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAp
IHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAv
LyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2
ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAg
ICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQg
dHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFy
eQorICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFz
aGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJl
dHVybgorICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVm
ZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAg
ICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24g
c3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwg
cmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1
ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNl
IHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVz
ZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhh
biBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZh
bHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWly
Rm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAg
ICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0
cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVv
ZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UK
LSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5v
dCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNp
ZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3Rh
YmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVv
ZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAg
ICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBi
ZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVj
aWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0
YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAj
ZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBs
ZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAg
IGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAg
ICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRo
ZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZl
Y3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0
aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAg
ICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
c1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1w
U29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KIH0KIAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTUsMjUz
ICs3ODgsMjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAog
dm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rp
b24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAg
QVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0
aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29v
ZAotICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+
bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2Vk
VmVjdG9yTGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXpl
KCkgOiAwKTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVw
dGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9l
eGVjID0gZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNv
bXBhcmVGdW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9
IGNhbGxUeXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNh
bGxEYXRhOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwot
Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogog
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1
bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJl
IG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVp
bGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAg
IHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFy
cmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFu
ZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVt
RGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1Zh
bHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBp
ZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0
cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
RGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAg
ICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5l
ZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5z
ZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAg
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0lu
ZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGln
bm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9O
dW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNv
bXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAg
ICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3Jh
Z2UtPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAg
ICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3Nw
YXJzZU1hcCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7
IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBh
cmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENh
bGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNv
bXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXks
IHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdo
dCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2ln
bmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIg
dGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9u
ZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAg
Zm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgp
OworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAg
IGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2Vk
VmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVj
dG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0
aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAo
bmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJh
eSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAg
aWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxl
bmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZp
bmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZp
bmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0g
bnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBt
aWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAg
ICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgor
ICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0
ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAg
ICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xl
YXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
ICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVk
KTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBs
ZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5
aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFj
ayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRy
ZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAg
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAg
ICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1
bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkK
LSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5n
dGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVu
Z3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsK
LSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAo
OyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWdu
ZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWdu
ZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5n
dGgpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25l
ZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAg
Zm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0g
ICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91
dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVk
ID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAg
IGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8g
ZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRW
ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VN
YXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3
VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRV
bmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsK
LQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
IHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAg
QVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VS
VChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAg
ICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
VmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7
ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAg
ICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUg
b2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5n
dGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAg
ICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYg
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJy
YXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAg
ICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3Ro
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytd
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFs
dWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJU
KG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5m
aXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+
c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNo
ZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5k
ZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRl
ZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEs
MTQwICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNp
bmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgc3RydWN0IFNwYXJzZUFycmF5RW50
cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAgICAgdHlwZWRlZiBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBh
dHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJh
eSopIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAgIEpTVmFsdWUg
Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgfTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50SGFzaDx1aW50
NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gTWFw
OwotCi0gICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAg
ICAgICAgIFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIs
Ci0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFwOjppdGVyYXRv
ciBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKLQotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFncyhOb3JtYWwp
Ci0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKLQotICAgICAg
ICBib29sIHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIFNwYXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFNwYXJzZU1vZGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1f
ZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgbGVuZ3RoSXNS
ZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3Ro
SXNSZWFkT25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25s
eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4o
bV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhl
c2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1
bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEFkZFJlc3VsdCBh
ZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VS
VCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAg
ICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAg
ICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAg
ICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQot
ICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0K
LSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5j
b250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRp
b24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
YmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAg
ICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAg
IH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9m
IGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJy
YXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNj
ZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdl
KCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRv
IG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhh
dCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBU
aGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAv
LyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBz
dHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAi
bGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFz
ZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9l
cyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRy
X3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6
YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247
Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9y
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0K
LSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3Mg
SlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0
IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0g
ICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQot
ICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJy
YXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Fy
cmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0Nl
bGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlD
cmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5
cyB3aG9zZSBzaXplIGFuZApAQCAtMTY3LDI1ICs1NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
Ly8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgot
ICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAg
ICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyBUaGlzIG1ldGhv
ZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxl
IGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVj
dEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93ID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbmRleChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIGdldEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sg
dG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRj
aEFycmF5LgogICAgICAgICBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKIApAQCAtMTk5LDE0MiArNzUsODQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBj
b3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkg
PCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpT
VmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25l
ZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRl
eChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5n
dGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9y
YWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0g
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0g
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5k
ZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBz
ZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAg
IC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1i
ZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBB
U1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxp
bmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1l
bnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVt
YmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4K
LSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0
dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQg
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVu
Z3RoKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3Rv
cmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpT
R2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgc3RhdGljIHZvaWQg
cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUodW5z
aWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAg
ICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZU9yWmVybygpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKLSAgICAgICAgdm9pZCBwdXREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZCk7Ci0gICAgICAgIGJvb2wgZGVmaW5lT3duTnVtZXJpY1Byb3Bl
cnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2JhbERhdGEm
KTsKLSAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAgdm9pZCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLQotICAgICAg
ICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0g
ICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0
Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9OwogCi0gICAgICAgIGVudW0gQ29uc2lz
dGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lz
dGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7
Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGgg
b2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIg
b2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJy
YXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFy
cmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOworICAgIGlubGluZSBCdXR0ZXJm
bHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
QnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBi
YXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1h
cCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25J
bmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAw
OworI2VuZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQogCi0gICAgICAgIHN0
YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV9pbmRleEJpYXMpOyB9Ci0gICAgfTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVy
Zmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
OworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJl
dHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJh
eS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5n
dGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RP
Ul9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAg
ICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAw
LCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAg
ICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pihn
bG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBy
ZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAg
LTM1MywzMCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0Fy
cmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6
OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJu
IHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0
aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZp
bml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBz
aXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNo
IGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3Mg
dG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQ
SUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkx
Pi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBp
bmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMg
ZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxv
d2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0g
KHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsg
KHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAg
Ly8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1
bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8v
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAg
ICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rv
ckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0K
LQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAg
ICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxl
bmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkp
OworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQog
ICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7CiAKQEAgLTY1LDcgKzY1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRB
cmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldElu
ZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHko
aSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7
ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNzMwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplYwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKIFN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAg
ICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1
Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxp
ZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNjAsNiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRp
YyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3MzA3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpT
RnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+
aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkg
ewpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNh
bGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
dm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJl
dmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzMw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTgsOCArNTE4LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjph
cHBlbmROZXh0UHJvcAogICAgIGlmIChtX2lzQXJyYXkpIHsKICAgICAgICAgLy8gR2V0IHRoZSB2
YWx1ZS4KICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAgaWYgKG1faXNKU0FycmF5ICYm
IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgICAg
ICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleChpbmRleCk7CisgICAg
ICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5n
ZXQoKSktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFt
X29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVj
dC5nZXQoKSwgZXhlYywgaW5kZXgsIHNsb3QpKQpAQCAtNjg0LDggKzY4NCw4IEBAIE5FVkVSX0lO
TElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJh
eS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJy
YXktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5
KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgICAgICAg
ICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFycmF5LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4LCBzbG90KSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDEwICsyNCwxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMuaCIKQEAgLTM4LDEyICs0MCwx
OSBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0
b3IuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNwYXJz
ZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRy
YWNrIG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdl
IHVzZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBn
cm93IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQg
YnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMg
dW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RT
bG93KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0
cnVjdHVyZSgpOwpAQCAtODYsMjkgKzk1LDgwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFz
c1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
dmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3Jh
Z2Ugc3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2Jq
ZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0
ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAg
QVNTRVJUKHN0b3JhZ2VTaXplKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIHNpemVf
dCBjYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VS
VChjYXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6
ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNl
T2ZTdG9yYWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVj
a0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0
ZXMpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJ
bkJ5dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFz
ZU9mU3RvcmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFn
ZSA9IGN1cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNv
dXJjZSA9IHN0b3JhZ2UgLSAxOworICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBh
Y2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJl
KTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
aWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAg
ICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0
eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5
OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3Bl
cnRpZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRT
b3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVf
dCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1
ZSk7CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsK
ICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZh
bHVlKTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3Jh
Z2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7
CisgICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Cisg
ICAgICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbmQg
Y29weSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJv
bSgqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0Kysp
LT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgICAgICBtYXAtPnZp
c2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1
dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
IC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsg
dGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcCkKKyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAog
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtMTIyLDkgKzE4Miw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91
dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0
ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZp
bmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOwpAQCAtMTQyLDkgKzIwMiw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVj
dC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0
ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFs
T2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0
dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7CiAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBAIC0x
NjEsMTAgKzIyMSw1MCBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVj
CiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQg
d2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhh
dCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdldE93blBy
b3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCisgICAgLy8gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lO
REVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNs
b3QpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
KSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBFQ01B
IDguNi4yLjIKQEAgLTE3NCw2ICsyNzQsMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsK
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
CisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkg
eworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENoZWNrIGlm
IHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4K
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszNDIsMTQ2IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBz
bG90KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAK
KyAgICBpZiAoVU5MSUtFTFkocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSkgeworICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBV
cGRhdGUgbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBwcm9w
ZXJ0eU5hbWUgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7Cisg
ICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxz
ZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKKyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGhp
c09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KCk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAg
IG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybiBzdG9yYWdlOworCisgICAgbWFwLT5zZXRT
cGFyc2VNb2RlKCk7CisKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNr
IHdlIGNhbiB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28g
bm8gbmVlZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFw
LT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFT
SCgpOworICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAgPSBtYXA7CisgICAgCisgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xv
YmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5k
ZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNT
RVJUX1VOVVNFRChvbGRUeXBlLCBvbGRUeXBlID09IE5vbkFycmF5IHx8IG9sZFR5cGUgPT0gQXJy
YXkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJh
eVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNI
KCk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJl
c3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJz
ZU1hcCA9IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0g
MDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJu
IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQor
CitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAg
ICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAg
ICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0z
MDQsNiArNTQ4LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXgK
IGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlzT2JqZWN0
LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3Rh
dGljRnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1ODAsNDUgQEAgYm9vbCBK
U09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
LWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
KQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7
Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7Cisg
ICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBO
b25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7Cisg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVjdC0+
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNP
YmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3NDgs
NTEgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFy
cyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQ
cm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAg
ICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQg
YSBkaWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFu
cyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRj
aCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFy
cmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlz
OworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0
LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlz
LmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5j
bGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNS
ZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9t
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkBA
IC01MTUsOCArODQzLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xv
YgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlz
KS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAg
ICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1Ry
YW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArOTAwLDEx
IEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2Nh
dGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90
KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChK
U09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0KCkp
LT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRl
clNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAgIGlm
ICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRDYWNo
ZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlvbihs
b2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMs
IGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90
LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2ICs5
MzAsNTM1IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAgICBy
ZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091
dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVj
U3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewot
ICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRh
RGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAg
ICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9y
LnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYg
fkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsK
KyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgZ2V0
dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZ2V0dGVyID0gb2xk
RGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7
CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIHNl
dHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHNldHRlciA9IG9s
ZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisKKyAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nl
c3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOworICAgICAgICBpZiAoZ2V0dGVyKQor
ICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRl
cik7CisgICAgICAgIGlmIChzZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRo
YXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAgICAvLyB3
ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICAgICAgZW50cnlJ
bk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jv
b2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dF
eGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYg
KCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUg
cHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8v
IEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0
ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8g
aG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0
ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0
YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUg
d2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICgh
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbik7Cisg
ICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVu
dHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4g
TGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5h
bCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBl
eHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlz
IHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5p
c05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAg
IG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24g
b2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihE
ZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAv
LyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0Vu
dW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAg
IC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAg
ICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAg
ICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2Ny
aXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAg
ICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBh
bmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAg
ICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNj
IGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQor
ICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4g
UmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAg
ICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
UmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAg
cHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVs
dHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVu
Z3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUu
IFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2
LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJy
ZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1
ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNp
bmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3Jp
cHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFi
bGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFi
bGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBj
b25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAg
ICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBE
ZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAo
ZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9
IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElm
IElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlk
YXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0
b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQp
IGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4K
KyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtb
Q29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlm
ICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hh
bmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5
LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRo
ZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0
YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5n
IHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29u
ZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVz
dCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBk
ZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJv
cGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEg
ZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1
ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51
bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2Yg
dGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAg
ICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlz
RGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURl
c2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1
ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNv
bmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAg
ICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFu
Z2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAg
ICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3Vy
cmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0
LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVl
KERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAg
ICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0
b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVl
IG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRy
dWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5n
ZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAg
Ly8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29y
RGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJl
bnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlm
IHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2Mu
W1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAo
ZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJy
ZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0
LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShE
ZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0g
Y3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4g
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBp
cyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhl
IHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4K
KyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBj
dXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmZpbmFsaXplQXJyYXlEYXRhKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIHRoaXNP
YmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVj
ayk7CisgICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7Cit9CisKK1Nw
YXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQg
PSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKKyAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxp
emVyKHRoaXMsIGZpbmFsaXplQXJyYXlEYXRhKTsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXAgPSByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU09iamVjdDo6
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBkZWxldGUgc3RvcmFnZS0+bV9zcGFyc2VNYXA7CisgICAgc3RvcmFnZS0+bV9zcGFy
c2VNYXAgPSAwOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICBBU1NF
UlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXA7CiAgICAgCi0gICAgUHJvcGVydHlT
dG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAg
ICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsKKyAgICBkYXRhTG9nKCJz
dG9yYWdlID0gJXAsIG1hcCA9ICVwLlxuIiwgc3RvcmFnZSwgbWFwKTsKIAotICAgIC8vIFdlIGhh
dmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxv
b2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZv
aWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5l
d1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7CisgICAg
Ly8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNw
YXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJy
YXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBt
b2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNp
YmxlKCkpOwogICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0g
MSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBp
dCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRv
IGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSBy
ZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5k
IHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0
ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlT
dG9yYWdlOworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Cisg
ICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3Jp
dGFibGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNp
YmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IGkgKyAx
OworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBX
ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50
IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJz
ZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2Us
IG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1
ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGgpKSB7CisgICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdl
IGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4K
KyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJv
bSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3Ig
KFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRh
LCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNw
YXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhl
IHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3Rvcltp
XTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQor
Cit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAv
LyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUg
Y3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAK
KyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNw
YXJzZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAgICAg
ICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAw
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAx
LCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQorewor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAg
IC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRo
ZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgLy8gRmlyc3QsIGhh
bmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisg
ICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4
dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3Jl
YXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAg
IAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChp
ICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBi
ZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAg
ICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEp
KSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0
IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisg
ICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsK
KyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUg
YXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3Qg
ZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNp
bmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisg
ICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2Rl
IGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBm
YWlscy4KKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJl
dHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
CisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBk
YXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisg
ICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBk
ZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3Jb
aXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUg
dGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAg
ICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBj
cmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkg
KyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlT
dG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQUxXQVlTX0lOTElO
RSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRW
ZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWduZWQgbWF4
SW5pdExlbmd0aCA9IHN0ZDo6bWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAgaWYg
KGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGgg
PSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQorICAg
ICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlT
aXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0
bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8g
MjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2ln
bmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3Qg
cHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRl
c2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7
CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsK
KworICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZF
Q1RPUl9HUk9XKTsKKworICAgIHJldHVybiBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2Jq
ZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIAorICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToK
KyAgICBjYXNlIEFycmF5OgorICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOworICAgICAgICBsZW5n
dGggPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAg
bGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRl
c2lyZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3Rl
bnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNl
IHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50
IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAg
aWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
CisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJU
KG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3Ro
ID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0
aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNl
bnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Ly8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRl
Y2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVk
IG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0
YSwKKyAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIHRy
dWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5l
d0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fYnV0dGVyZmx5
ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOworfQor
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAodHlwZSA9PSBTb3J0
Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1hcCk7
CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgeworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAodHlwZSAh
PSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICB2YWx1ZS5pc1Vu
ZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0
ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAg
IH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdl
LT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5l
bmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBBU1NFUlQoaW5k
ZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9B
UlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAgICAg
ICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkg
dG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgIH0KKyAgICB9
Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKworQnV0dGVyZmx5KiBKU09i
amVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVs
eSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQorICAgIC8vIGNhcGFjaXR5LCBzaW5j
ZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgor
ICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKQEAgLTYzMCwxMCArMTQ2Niw0NiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CiAgICAgSlNDZWxsKiBj
ZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVyZSgp
LT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNlbGwp
OwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdl
dERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwor
ICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNl
dChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBzd2l0
Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25B
cnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlTWFwKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBp
dCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaXQtPnNlY29uZC5n
ZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0K
IAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQpAQCAtNjg3LDYgKzE1NTksMTUgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RN
YXlCZUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICB1bnNpZ25lZCBhc0luZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKKyAgICBpZiAoYXNJbmRleCA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAg
ICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwor
ICAgIGVsc2UKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgYXNJbmRleCwgdmFsdWUsIGZh
bHNlKTsKK30KKwogY2xhc3MgRGVmaW5lT3duUHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAgICAg
RGVmaW5lT3duUHJvcGVydHlTY29wZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC03MDQsMjYgKzE1ODUs
MjYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJv
b2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
Tm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikK
IHsKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBw
cm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUg
dG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8v
IChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUg
d29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHBy
b3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8g
bWFrZSB0aGlzIHdvcmsuCiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsK
LQorICAgIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0
IGl0IG9uIG5vcm1hbGx5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYg
KCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnQpKSB7CiAgICAgICAgIC8vIHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAg
ICAgIGlmICghb2JqZWN0LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5z
aWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8g
ZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3Igb2xkRGVzY3JpcHRvcjsKICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNj
cmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRv
cik7CiAgICAgfQogCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE2
MzAsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8g
QSBnZW5lcmljIGRlc2NyaXB0b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9m
IGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRv
cikpIHsKLSAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2Ny
aXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAg
ICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC03NjIsOCArMTY0Myw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWMKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJy
ZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMg
b2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKQEAgLTc4NCw4ICsxNjY1LDggQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJy
ZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNj
ZXNzb3IgZnVuY3Rpb25zIG9mIGFuIGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIs
NyArMTY4Myw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFj
Y2Vzc29yID0gb2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUpOworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vz
c29yKTsKQEAgLTgxMiwxMiArMTY5MywzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjCiAgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0
cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogICAgIHVuc2lnbmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQoY3VycmVudCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFj
Y2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYg
aXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFn
ZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQg
c3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNj
LCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2Vl
ZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAg
Ly8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAv
LyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFs
c2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAg
ICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25J
bmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwor
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3Qq
IHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNz
YWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMSBAQAogI2RlZmluZSBKU09iamVjdF9o
CiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1
ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlT
bG90LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVy
dHlTbG90LmgiCiAKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgi
CisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4MywxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBn
ZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdElu
dGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwor
ICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVh
ZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NF
UlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19G
aXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwg
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFs
QXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAg
IENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNz
b3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0ZpbmFs
T2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2LDYg
KzEwNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZmluYWxpemVBcnJh
eURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTEyMCwxMyAr
MTMzLDE4NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zy
b20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxl
bmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5Ogor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIg
dG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBj
aGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNh
bGxlZC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0
cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8g
dHJ1ZS4KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyA9IHRydWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlO
YW1lKSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEEgbm9uLXRocm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFu
ZCBwdXREaXJlY3RJbmRleC4KKyAgICAgICAgdm9pZCBwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNl
LgorICAgICAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25J
bmRleCk7CisgICAgICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9u
dW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAv
LyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVy
IG9mIHByb3BlcnRpZXMuCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWdu
ZWQgbmV3TGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQg
YXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKHN0b3JhZ2UpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3
TGVuZ3RoLCBuZXdMZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9m
IHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9k
ZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVs
eSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8v
ICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAogICAgICAgICAvLyAgLSBh
Y2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCiAgICAgICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBi
ZSByZXNwZWN0ZWQgKGFmdGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGgg
dGhlIGdpdmVuIGF0dHJpYnV0ZXMpCisgICAgICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlz
IGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4LgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBwdXRE
aXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gMCk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xNDcsNiArMzMzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGhh
c0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5
cGVQcm9wZXJ0eSk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgICAgIEpTVmFsdWUg
dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVy
ZW5jZSkgY29uc3Q7CkBAIC0yMDMsOCArMzkwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsgfQotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsg
fQorICAgICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1f
YnV0dGVyZmx5OyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9i
dXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVy
biBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgICAgICBjb25zdCBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTIyNyw3ICs0MTcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2UoKSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG91dE9mTGluZVN0b3JhZ2Uo
KSAtIGxvY2F0aW9uICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpOwogICAgICAgICAgICAg
dmFsaWRhdGVPZmZzZXQocmVzdWx0LCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQpAQCAtMjY1LDIxICs0NTUsMjIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNTZWFsZWQoZ2xvYmFsRGF0YSk7IH0K
ICAgICAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJu
IHN0cnVjdHVyZSgpLT5pc0Zyb3plbihnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlzRXh0
ZW5zaWJsZSgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc0V4dGVuc2libGUoKTsgfQorICAgICAg
ICBib29sIGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gIWlzRXh0ZW5zaWJsZSgpCisgICAgICAgICAgICAgICAgfHwgc3RydWN0dXJlKCktPnR5
cGVJbmZvKCkuaW50ZXJzZWN0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybygpOworICAgICAgICB9CiAKICAgICAgICAgYm9vbCBzdGF0aWNGdW5jdGlvbnNS
ZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKTsg
fQogICAgICAgICB2b2lkIHJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKEV4ZWNTdGF0ZSog
ZXhlYyk7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlTdG9yYWdlIGdyb3dP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3
U2l6ZSk7Ci0gICAgICAgIHZvaWQgc2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eVN0b3JhZ2UsIFN0cnVjdHVyZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBC
dXR0ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBvbGRT
aXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5KEpTR2xvYmFs
RGF0YSYsIEJ1dHRlcmZseSosIFN0cnVjdHVyZSopOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqKTsgLy8gWW91IHByb2JhYmx5IGRv
bid0IHdhbnQgdG8gY2FsbCB0aGlzLgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVk
IG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwog
Ci0gICAgICAgIHZvaWQqIGFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gJm1fb3V0T2ZMaW5lU3RvcmFnZTsKLSAgICAgICAgfQotCiAgICAg
ICAgIHZvaWQgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+ZmxhdHRlbkRpY3Rpb25hcnlT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgdGhpcyk7CkBAIC0yOTMsNyArNDg0LDE2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpOwotICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBidXR0ZXJm
bHlPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTT2JqZWN0LCBtX2J1dHRlcmZseSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQqIGJ1dHRlcmZseUFkZHJlc3MoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJm1f
YnV0dGVyZmx5OworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMzE2LDE0ICs1MTYsNzggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgLy8gVG8gaW5zdGFudGlhdGUgb2JqZWN0cyB5b3UgbGlrZWx5IHdhbnQg
SlNGaW5hbE9iamVjdCwgYmVsb3cuCiAgICAgICAgIC8vIFRvIGNyZWF0ZSBkZXJpdmVkIHR5cGVz
IHlvdSBsaWtlbHkgd2FudCBKU05vbkZpbmFsT2JqZWN0LCBiZWxvdy4KLSAgICAgICAgSlNPYmpl
Y3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIEpTT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgcmVzZXRJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJlbW92ZURpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm1faW5oZXJp
dG9ySURLZXkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHZpc2l0T3V0T2ZM
aW5lU3RvcmFnZShTbG90VmlzaXRvciYsIFByb3BlcnR5U3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VT
aXplKTsKKyAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZs
eSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBr
bm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CisgICAg
ICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgfCBIYXNBcnJheVN0b3JhZ2UpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHByZWRpY2F0ZSBzb21lIGFj
dGlvbnMgb24gd2hldGhlciBvciBub3QgdGhlCisgICAgICAgIC8vIG9iamVjdCBpcyBpbiBhIG1v
ZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlT3JaZXJvKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUg
b2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4gVXNlCisgICAg
ICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxk
IGhhdmUgcmVxdWlyZWQgdGhlCisgICAgICAgIC8vIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQgdG8g
aGF2ZSBhcnJheSBzdG9yYWdlLCBpZiBpdCBkaWRuJ3QgaGF2ZSBpdAorICAgICAgICAvLyBhbHJl
YWR5LgorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJh
eToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShnbG9i
YWxEYXRhKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFn
ZSogY3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBib29sIGRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHRocm93RXhjZXB0aW9uKTsKKworICAgICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tU
eXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ss
IFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07CisjaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisg
ICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjaykgeyB9CisjZWxzZQorICAgICAgICB2b2lkIGNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3Rl
bmN5Q2hlY2spOworI2VuZGlmCisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CisKKyAg
ICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBu
ZXdMZW5ndGgpOworICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworICAg
ICAgICBib29sIGRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJik7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpAQCAtMzM2LDE3ICs2MDAsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgaXNP
YmplY3QoKTsKICAgICAgICAgdm9pZCBpc1N0cmluZygpOwogICAgICAgICAKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmLCBBcnJheVN0b3JhZ2UqKTsKKyAgICAgICAgCiAgICAg
ICAgIHRlbXBsYXRlPFB1dE1vZGU+CiAgICAgICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoSlNH
bG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9w
ZXJ0eVNsb3QmLCBKU0NlbGwqKTsKIAogICAgICAgICBib29sIGlubGluZUdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KTsKIAogICAgICAgICBjb25zdCBIYXNoRW50cnkqIGZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICBT
dHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAg
ICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVu
dHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdywgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3Ro
LCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAg
ICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwog
Ci0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX3BhZGRpbmc7CiAjZW5kaWYKICAg
ICB9OwpAQCAtMzcyLDggKzY1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFs
T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00NTYs
MTEgKzczNiw2IEBAIGlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3QKICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3QsIG1faW5saW5lU3RvcmFnZSk7
CiB9CiAKLWlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
Ci17Ci0gICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9vdXRPZkxpbmVTdG9y
YWdlKTsKLX0KLQogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsT2JqZWN0KCkgY29uc3QK
IHsKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbE9i
amVjdFR5cGU7CkBAIC00OTEsMTggKzc2NiwxNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNH
bG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUo
KSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldE91dE9m
TGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0
dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmICgh
c3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwot
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0KKyAgICBB
U1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAh
aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKTsKICAgICBzZXRT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0b3JhZ2Uu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVy
Zmx5OworfQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5n
aW5nU3RydWN0dXJlKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIG1fYnV0dGVyZmx5ID0g
YnV0dGVyZmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDAsOSArODE0LDkgQEAg
aW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBhc09i
amVjdCh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBKU09i
amVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMsIDApCisg
ICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5MCwxNSArODY0LDE3IEBA
IGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUKIAogQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
aWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGlmIChzdHJ1
Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uLT5pc0dldHRl
clNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2Nh
dGlvbik7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQ
cm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0
aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZzZXQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
IAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwg
ZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODQsNiArOTYwLDcgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgo
KSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5p
c0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKQEAg
LTcxMiwxMSArOTg5LDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3
U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jv
d091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVk
TmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1
cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0
QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogCiAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+
aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKQEAgLTczMCwxMyArMTAwNywxMyBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsgCisg
ICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlm
IChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAg
ICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1
cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAg
ICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJl
bnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIAogICAgICAgICB2
YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEs
IG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRh
LCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERpcmVjdE9mZnNldChnbG9i
YWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0
eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2Fj
aGFibGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3Rh
dGUuCkBAIC04MDMsOSArMTA4MCw5IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmVBbmRSZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2UgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIGdsb2JhbERhdGEsIG9s
ZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIHNldE91
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwog
fQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKQpAQCAtODM5LDExICsxMTE2LDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3QoSlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2
YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAg
UHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0dXJlKCkt
PnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdTdG9yYWdlID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERh
dGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
LSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVy
ZSgpKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1
cmUoKSk7CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwog
fQogCkBAIC05MzUsNiArMTIxMiwxMSBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVy
Ojp3aXRoQ2FsCiAgICAgcmV0dXJuIHI7CiB9CiAKK2lubGluZSBzaXplX3Qgb2Zmc2V0SW5CdXR0
ZXJmbHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgp
OworfQorCiAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBwYXRjaGluZyBjb2RlIHdoZXJlIHlvdSB3
YW50IHRvIGVtaXQgYSBsb2FkIG9yIHN0b3JlIGFuZAogLy8gdGhlIGJhc2UgaXM6CiAvLyBGb3Ig
aW5saW5lIG9mZnNldHM6IGEgcG9pbnRlciB0byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZSBwb2lu
dGVyLgpAQCAtOTQyLDE0ICsxMjI0LDE0IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVnaXN0
ZXI6OndpdGhDYWwKIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdl
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOworICAg
ICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KG9m
ZnNldCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KIAogaW5saW5lIGludCBpbmRleFJlbGF0aXZl
VG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZz
ZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKyBC
dXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBBU1NFUlQoIShKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KQEAgLTk1Nyw3
ICsxMjM5LDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5TwogaW5s
aW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAg
ICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJ
bk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKICAgICByZXR1cm4gSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9
CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1i
b2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwpAQCAtNjUsNyArNjUsNyBA
QCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5CiAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAg
IH0KICAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQog
CiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
cmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogICAgIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMTI3MzA3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9IDEgPDwgMzsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgSXNFbnZpcm9ubWVudFJlY29yZCA9IDEgPDwgNDsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90ID0gMSA8PCA1
OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNWaXNpdENoaWxkcmVuID0gMSA8
PCA2OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
ID0gMSA8PCA3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmcgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEludGVyc2VjdHNPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAx
IDw8IDY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
PSAxIDw8IDc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFByb2hpYml0c1Byb3Bl
cnR5Q2FjaGluZyA9IDEgPDwgOTsKIAogICAgIGNsYXNzIFR5cGVJbmZvIHsKICAgICBwdWJsaWM6
CkBAIC03NSw4ICs3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG92ZXJyaWRl
c0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNIYXNJ
bnN0YW5jZSk7IH0KICAgICAgICAgYm9vbCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
KTsgfQogICAgICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KTsgfQorICAg
ICAgICBib29sIGludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEludGVyc2VjdHNPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pOyB9
CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0T25GbGFnczEoT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbik7IH0KLSAgICAgICAgYm9vbCBvdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzKTsgfQorICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMpOyB9CiAgICAgICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29u
c3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMihQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcpOyB9CiAK
ICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBmbGFnc09mZnNldCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMTI3
MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAg
LTY0MCw3ICs2NDIsMTMgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2Uo
UAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0RW5kRXhwcmVz
c2lvbjoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc09iamVjdChvYmplY3RTdGFj
ay5sYXN0KCkpLT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXJTdGFj
ay5sYXN0KCksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlO
YW1lIGlkZW50ID0gaWRlbnRpZmllclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpID0gaWRlbnQuYXNJbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChpICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RJbmRleChtX2V4ZWMsIGksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwg
aWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92
ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBl
ID09IFRva0NvbW1hKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmplY3RTdGFy
dEV4cHJlc3Npb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAko
cmV2aXNpb24gMTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXpl
X3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZz
ZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4g
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0g
MjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVT
dG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFn
ZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDEyNzMwNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4
cE1hdGNoZXNBcnJheSk7CiAKIGNvbnN0IENsYXNzSW5mbyBSZWdFeHBNYXRjaGVzQXJyYXk6OnNf
aW5mbyA9IHsiQXJyYXkiLCAmSlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKFJlZ0V4cE1hdGNoZXNBcnJheSl9OwogCitSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1h
dGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCog
cmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCisgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGJ1dHRlcmZseSkKKyAg
ICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCit7CisgICAg
bV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaW5wdXQpOworICAgIG1fcmVnRXhwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOworfQorCitSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4
cE1hdGNoZXNBcnJheTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBS
ZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQp
OworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEs
IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgIFJlZ0V4cE1hdGNoZXNBcnJheSog
YXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1hdGNoZXNBcnJheShnbG9iYWxEYXRhLCBidXR0ZXJmbHks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAg
ICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIGFycmF5Owor
fQorCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1f
cmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CiB9CiAKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24g
MTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDI4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBw
cml2YXRlOgotICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4
cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgICAgICAgICA6IEpTQXJyYXkoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSkKLSAg
ICAgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgICAgICAgICAgLCBtX3N0YXRlKFJlaWZp
ZWROb25lKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0
aGlzLCBpbnB1dCk7Ci0gICAgICAgICAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
cmVnRXhwKTsKLSAgICAgICAgfQorICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxE
YXRhJiwgQnV0dGVyZmx5KiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4cCosIE1h
dGNoUmVzdWx0KTsKIAogICAgICAgICBlbnVtIFJlaWZpZWRTdGF0ZSB7IFJlaWZpZWROb25lLCBS
ZWlmaWVkTWF0Y2gsIFJlaWZpZWRBbGwgfTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRl
ZiBKU0FycmF5IEJhc2U7CiAKLSAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0
Y2hSZXN1bHQgcmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsK
LSAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4
cE1hdGNoZXNBcnJheShnbG9iYWxEYXRhLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlu
cHV0LCByZWdFeHAsIHJlc3VsdCk7Ci0gICAgICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
KiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIEpTU3RyaW5nKiBsZWZ0Q29udGV4
dChFeGVjU3RhdGUqKTsKICAgICAgICAgSlNTdHJpbmcqIHJpZ2h0Q29udGV4dChFeGVjU3RhdGUq
KTsKQEAgLTU4LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgpAQCAtMTEzLDExICsxMTUsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxs
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJ
bmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVj
dDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZp
c2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
amVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVqZWN0X2gKKyNkZWZpbmUgUmVq
ZWN0X2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29s
IHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmICh0aHJvd0V4
Y2VwdGlvbikgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKKyAgICAg
ICAgYXNtICgiaW50ICQzXG4iKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlamVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1
ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiUHJvcGVy
dHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3du
PiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJz
ZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29u
c3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1
ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwor
fTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0g
RmxhZ3MgeworICAgICAgICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAg
ICAgICAgTGVuZ3RoSXNSZWFkT25seSA9IDIsCisgICAgfTsKKworcHVibGljOgorICAgIHR5cGVk
ZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7
CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKKyAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkK
KyAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisKKyAgICBib29sIHNwYXJzZU1vZGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOworICAgIH0KKworICAg
IHZvaWQgc2V0U3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nh
c3Q8RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKKyAgICB9CisKKyAgICBib29sIGxlbmd0
aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1Jl
YWRPbmx5OworICAgIH0KKworICAgIHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCisgICAgewor
ICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1Jl
YWRPbmx5KTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNv
bnRlbnRzIG9mIHRoZSBtYXAKKyAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVu
c2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdChF
eGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9y
IGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMg
c2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRo
ZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQp
OyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKwor
ICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9v
bCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAg
Ly8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRD
YXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJy
YXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYzIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUg
U3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oIgorCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiUmVq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXksIHVuc2ln
bmVkIGkpCit7CisgICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKKyAgICBlbnRyeS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworCisgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IG1fbWFwLmFkZChpLCBlbnRyeSk7CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNp
dHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7CisgICAgICAg
IEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9y
ZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKTsKKyAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFs
dWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBo
YXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYm
ICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRv
cik7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7
CisgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAg
IGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJy
YXksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNz
b3IgPSBlbnRyeS5CYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0
ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+
c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRo
cm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxE
YXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJs
ZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRl
ciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29sIFNw
YXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBh
cnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5
JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNl
cGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAu
CisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5
LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRo
ZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVt
b3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxk
VGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBu
b3QgZXh0ZW5zaWJsZS4iKTsKKyAgICB9CisKKyAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKKyAg
ICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlT
bG90JiBzbG90KSBjb25zdAoreworICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKKyAg
ICBBU1NFUlQodmFsdWUpOworCisgICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0
ZXIoKTsKKyAgICBpZiAoIWdldHRlcikgeworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7
Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpIGNvbnN0Cit7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJh
c2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlF
bnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5KSBjb25zdAoreworICAg
IEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAg
ICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+
Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOworICAgIHJl
dHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+
ZW1wdHlMaXN0KCkpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXRO
b25TcGFyc2VNb2RlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOworICAgIHJl
dHVybiBCYXNlOjpnZXQoKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpdGVyYXRvciBlbmQg
PSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdl
QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
b3JhZ2VCYXJyaWVyLmgJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZUJhcnJpZXJfaAotI2RlZmluZSBTdG9yYWdl
QmFycmllcl9oCi0KLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogUHJvcGVydHlTdG9yYWdlOwotdHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKLQotY2xhc3MgU3RvcmFnZUJhcnJpZXIg
ewotcHVibGljOgotICAgIGVudW0gVW5jaGVja2VkVGFnIHsgVW5jaGVja2VkIH07Ci0gICAgU3Rv
cmFnZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHNldChnbG9iYWxEYXRhLCBvd25l
ciwgc3RvcmFnZSk7Ci0gICAgfQotICAgIAotICAgIFN0b3JhZ2VCYXJyaWVyKFByb3BlcnR5U3Rv
cmFnZSBzdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBzZXQoc3RvcmFnZSwg
VW5jaGVja2VkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiwgSlND
ZWxsKiwgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UpCi0gICAgewotICAgICAgICBtX3N0b3Jh
Z2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChQcm9wZXJ0eVN0b3Jh
Z2UgbmV3U3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0g
bmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3N0
b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9yKigpIHsgcmV0
dXJuICptX3N0b3JhZ2U7IH0KLSAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBv
cGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBt
X3N0b3JhZ2VbaV07IH0KLSAgICAKLSAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBnZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgeyByZXR1
cm4gbV9zdG9yYWdlOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yISgpIHsgcmV0dXJuICFtX3N0b3Jh
Z2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdlIG1fc3RvcmFnZTsKLX07
Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4
LDE3IEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGUKICAgICBKU09i
amVjdDo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit2
b2lkIFN0cmluZ09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93
KQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3Qq
PihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2Vs
bCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCiBib29sIFN0
cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CkBAIC0xMzMsNiArMTQ0LDE0
IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
CiB9CiAKK2Jvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCit7CisgICAgU3RyaW5nT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOworICAgIGlmICh0aGlzT2Jq
ZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaSk7Cit9CisKIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFN0cmluZ09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDEyNzMw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw4ICs1MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKQEAgLTY2LDcgKzY4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgSlNTdHJpbmcqKTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTV3JhcHBlck9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyc2VjdHNPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nT2JqZWN0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0
cmluZ1Byb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENh
bGwuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MTI3MzA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0
YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJl
U3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAsIG1faW5k
ZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbERhdGEs
IHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6TWF5QmVO
dWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBlKQogICAg
ICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0IENsYXNz
SW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbCkKICAg
ICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKQorICAg
ICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMs
IGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTksNyBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJldmlvdXMp
CiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQorICAgICwgbV9p
bmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAg
ICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQcm90b3R5
cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAgICAsIG1f
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTI1MSw2ICsy
NTQsOCBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKCiAKICAgICBm
b3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5zaXplKCkgLSAyOyBpID49IDA7IC0taSkgewog
ICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOworICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQcm9w
ZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0dHJpYnV0
ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCkp
OwogICAgICAgICBtX3Byb3BlcnR5VGFibGUtPmFkZChlbnRyeSk7CiAgICAgfQpAQCAtNTAyLDYg
KzUwNywzOCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAgICAg
cmV0dXJuIHRyYW5zaXRpb247CiB9CiAKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQoreworICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAgICAKKyAgICBpZiAoU3Ry
dWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxl
LmdldCgwLCBhdHRyaWJ1dGVzKSkgeworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9u
LT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGF0dHJpYnV0ZXMpOworICAgICAgICBBU1NFUlQo
ZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5k
ZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAgICB9Cisg
ICAgCisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3Vz
ID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGluZGV4aW5n
VHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAgICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+
Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+
c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJv
cGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAgICAgICAg
dHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICB9
CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1dHVyZSB3
ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6OmlzU2Vh
bGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisj
aW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAi
SlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOworICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJ
bmRleGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBmcmVl
emVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogCiAg
ICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wgaXNGcm96
ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0KICAgICAg
ICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsg
fQogCisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlw
ZTsgfQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2JhbE9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
IHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCk7IH0K
QEAgLTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zm
c2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBAIC0zNjMs
NyArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhp
bmdUeXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAg
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00MTYsNiAr
NDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
YXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJbmZvIG1f
dHlwZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAgICAgICAg
CiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3ICs0NTcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3Bl
cnRpZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3Bl
cnRpZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVtZXJhYmxl
UHJvcGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJldmlvdXMg
OiA3OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7CiAgICAg
ICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAgICAgICAg
dW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fZGlk
VHJhbnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8s
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAg
ICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAg
ICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0
cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNs
YXNzSW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4
aW5nVHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7
CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJ
KHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJXZWFr
R0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNDZWxs
OwogY2xhc3MgU3RydWN0dXJlOwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhh
dmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCisKKy8vIFN1cHBvcnQgZm9yIGF0dHJp
YnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBwcm9wZXJ0
aWVzLgorLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRpb24gb2Yg
dGhlIGtleSBzaG91bGQgYmUgMC4KK2VudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9uIHsKKyAgICBB
bGxvY2F0ZUFycmF5U3RvcmFnZQorfTsKKworaW5saW5lIHVuc2lnbmVkIHRvQXR0cmlidXRlcyhO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gdHJhbnNpdGlv
biArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7Cit9CisKK2lubGluZSBJbmRleGluZ1R5cGUgbmV3
SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
dHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEFsbG9j
YXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5U3RvcmFn
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFnID0gMTsK
IApAQCAtNDQsNyArNjksMTAgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAg
ICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZD4gS2V5
OwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IHAuc2Vjb25kOworICAgICAgICAgICAgaWYgKHAuZmlyc3QpCisg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IHAuZmlyc3QtPmV4aXN0aW5nSGFzaCgpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL21vemlsbGEvanMxXzYvQXJyYXkvcmVncmVzcy0zMDQ4MjguanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvanMxXzYvQXJyYXkvcmVn
cmVzcy0zMDQ4MjguanMJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw3IEBAIHJlcG9ydENvbXBhcmUoZXhwZWN0LCBhY3R1YWwsIHN1bW1h
cnkgKyAKIAogLy8gcmV2ZXJzZQogdmFsdWUgID0gJzEyMyc7Ci1leHBlY3QgPSAnMTIzJzsKK2V4
cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKHZh
bHVlKSArICcnOwpAQCAtNzMsNyArNzMsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwgYWN0dWFs
LCBzdW1tYXJ5ICsgCiAKIC8vIHNvcnQKIHZhbHVlICA9ICdjYmEnOwotZXhwZWN0ID0gJ2NiYSc7
CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHBy
b3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNvcnQuY2FsbCh2
YWx1ZSkgKyAnJzsKQEAgLTExNCw3ICsxMTQsNyBAQCByZXBvcnRDb21wYXJlKCdhYmMnLCB2YWx1
ZSwgc3VtbWFyeSArICc6CiAKIC8vIHVuc2hpZnQKIHZhbHVlICA9ICdkZWYnOwotZXhwZWN0ID0g
NjsKK2V4cGVjdCA9ICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkg
cHJvcGVydHkuIjsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5j
YWxsKHZhbHVlLCAnYScsICdiJywgJ2MnKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCByZXBvcnRDb21w
YXJlKCdkZWYnLCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHNoaWZ0CiB2YWx1ZSAgPSAnYWJj
JzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4
cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVy
dHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc2hpZnQuY2FsbCh2YWx1
ZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUsIHN1bW1h
cnkgKyAnOgogCiAvLyBzcGxpY2UKIHZhbHVlICA9ICdhYmMnOwotZXhwZWN0ID0gJ1R5cGVFcnJv
cjogVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4nOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0
ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVh
bCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh2YWx1ZSwgMSwgMSkgKyAnJzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCShyZXZpc2lvbiAxMjcz
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsMTAgKzczLDExIEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBp
bmRleCwgRGljdGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNBcnJheSogYXJyYXkg
PSBhc0FycmF5KG1fdmFsdWUpOwotICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkK
KyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgIGlmICghYXJyYXkt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTVmFsdWUgaW5kZXhlZFZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICBKU1Zh
bHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgIGlm
IChpbmRleGVkVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCAhaW5kZXhlZFZhbHVlLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNyArMTE4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0Jsb2JDb25zdAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJh
eS0+Z2V0SW5kZXgoaSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBp
biBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
NjEwCisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAj
aWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVy
OjpzX2luZm8pKQogICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChjb250ZXh0LCB0b0Fy
cmF5QnVmZmVyKGl0ZW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw5
IEBAIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFdlYmsKIAogICAgIERhc2hB
cnJheSBkYXNoOwogICAgIEpTQXJyYXkqIHZhbHVlQXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKKyAg
ICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZUFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGVs
ZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleChpKS50b0Zsb2F0KGV4ZWMpOworICAgICAgICBmbG9h
dCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvRmxvYXQoZXhlYyk7CiAg
ICAgICAgIGlmIChlbGVtIDw9IDAgfHwgIWlzZmluaXRlKGVsZW0pKQogICAgICAgICAgICAgcmV0
dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDggKzMzLDkgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0b0RPTVN0cmluZ0xpcwog
CiAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gc3RyaW5nTGlzdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIC8vIEZJ
WE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjEwCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKQotICAgICAgICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJy
YXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIHN0
cmluZ0xpc3QtPmFwcGVuZChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1cm4gc3RyaW5nTGlzdC5yZWxlYXNlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczMDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDggQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5k
SG9zdDo6cG9ydChFeAogc3RhdGljIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIENvbnRleHRNZW51JiBtZW51KQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgSlNP
YmplY3QqIGl0ZW0gPSBhc09iamVjdChhcnJheS0+Z2V0SW5kZXgoaSkpOworICAgICAgICAvLyBG
SVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICBKU09iamVjdCogaXRlbSA9
IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgICAgICBKU1ZhbHVlIGxh
YmVsID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxhYmVsIikpOwogICAgICAg
ICBKU1ZhbHVlIHR5cGUgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidHlwZSIp
KTsKICAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJpZCIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNv
Y2tldEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7CiAgICAgICAgICAgICBKU0FycmF5KiBwcm90b2Nv
bHNBcnJheSA9IGFzQXJyYXkocHJvdG9jb2xzVmFsdWUpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9
IHByb3RvY29sc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAg
ICAgICAgICAgIHByb3RvY29scy5hcHBlbmQocHJvdG9jb2wpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTI3MzA3KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDQsNyArMTQ0LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9J
bgogICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxl
bWVudCA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBlbGVtZW50VmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0
U3RhdGUsIGVsZW1lbnQsIG1heERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRW
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlz
aW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOSBAQCBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0
aFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgp
KQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNl
IG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAg
ICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAg
ICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwog
ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRTcGFyc2VJbmRleChh
cnJheSwgaW5kZXgsIGhhc0luZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5jcHAJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRp
bWVBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVu
dGltZUFycmF5KSB9OwogCiBSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSkKKyAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1
cmUsIDApCiAgICAgLCBtX2FycmF5KDApCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDEyNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDEzICs3MywxMyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5KTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpBcnJheSopOwogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVj
dHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyc2VjdHNPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgSlNBcnJheTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgUnVu
dGltZUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9zY3JpcHQtdGVzdHMvcHJldmVudEV4dGVuc2lvbnMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvcHJldmVudEV4dGVuc2lvbnMuanMJKHJldmlz
aW9uIDEyNzMwNykKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL3ByZXZlbnRF
eHRlbnNpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTQgQEAgc2hvdWxkVGhy
b3coJyJ1c2Ugc3RyaWN0IjsgdmFyIG8gPSB7fTsgTwogc2hvdWxkQmUoJ09iamVjdC5wcmV2ZW50
RXh0ZW5zaW9ucyhNYXRoKTsgTWF0aC5zcXJ0KDQpJywgJzInKTsKIAogLy8gU2hvdWxkIG5vdCBi
ZSBhYmxlIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIGEgcHJldmVudEV4dGVuc2lvbnMgYXJyYXkuCitj
b25zb2xlLmxvZygiaGVyZSIpOwogc2hvdWxkQmVVbmRlZmluZWQoJ3ZhciBhcnIgPSBPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnMoW10pOyBhcnJbMF0gPSA0MjsgYXJyWzBdJyk7Citjb25zb2xlLmxv
ZygidGhhdCB3b3JrZWQuIik7CiBzaG91bGRCZSgndmFyIGFyciA9IE9iamVjdC5wcmV2ZW50RXh0
ZW5zaW9ucyhbXSk7IGFyclswXSA9IDQyOyBhcnIubGVuZ3RoJywgJzAnKTsKK2NvbnNvbGUubG9n
KCJhbmQgaGVyZS4iKTsKIC8vIEluIHN0cmljdCBtb2RlLCB0aGlzIHRocm93cy4KIHNob3VsZFRo
cm93KCcidXNlIHN0cmljdCI7IHZhciBhcnIgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoW10p
OyBhcnJbMF0gPSA0MjsgYXJyWzBdJyk7Citjb25zb2xlLmxvZygiYW5kIGhlcmUyLiIpOwogCiAv
LyBBIHJlYWQtb25seSBwcm9wZXJ0eSBvbiB0aGUgcHJvdG90eXBlIHNob3VsZCBwcmV2ZW50IGEg
W1tQdXRdXSAuCiBmdW5jdGlvbiBDb25zdHJ1Y3RvcigpIHt9CkBAIC05Niw2ICsxMDAsOCBAQCBm
dW5jLnByb3RvdHlwZSA9IDQyOwogc2hvdWxkQmVGYWxzZSgnZnVuYy5wcm90b3R5cGUgPT09IDQy
Jyk7CiBzaG91bGRCZUZhbHNlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmMs
ICJwcm90b3R5cGUiKS53cml0YWJsZScpCiAKK2NvbnNvbGUubG9nKCJzdHVmZi4iKTsKKwogLy8g
Q2hlY2sgdGhhdCBmcmVlemluZyBhIHN0cmljdCBmdW5jdGlvbiB3b3JrcyBjb3JyZWN0bHkuCiB2
YXIgc3RyaWN0RnVuYyA9IGZyZWV6ZShmdW5jdGlvbiBmb28oKXsgInVzZSBzdHJpY3QiOyB9KTsK
IHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmlzRnJvemVuKHN0cmljdEZ1bmMpJykKQEAgLTEwMywxNiAr
MTA5LDI1IEBAIHN0cmljdEZ1bmMucHJvdG90eXBlID0gNDI7CiBzaG91bGRCZUZhbHNlKCdzdHJp
Y3RGdW5jLnByb3RvdHlwZSA9PT0gNDInKTsKIHNob3VsZEJlRmFsc2UoJ09iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Ioc3RyaWN0RnVuYywgInByb3RvdHlwZSIpLndyaXRhYmxlJykKIAor
Y29uc29sZS5sb2coInd0Zi4iKTsKKwogLy8gQ2hlY2sgdGhhdCBmcmVlemluZyBhcnJheSBvYmpl
Y3RzIHdvcmtzIGNvcnJlY3RseS4KIHZhciBhcnJheSA9IGZyZWV6ZShbMCwxLDJdKTsKIHNob3Vs
ZEJlVHJ1ZSgnT2JqZWN0LmlzRnJvemVuKGFycmF5KScpCitjb25zb2xlLmxvZygiZGdzYWhqIik7
CiBhcnJheVswXSA9IDM7Citjb25zb2xlLmxvZygiYWJvdXQgdG8gYmxhaCIpOwogc2hvdWxkQmUo
J2FycmF5WzBdJywgJzAnKTsKK2NvbnNvbGUubG9nKCJncmhqbGdydyIpOwogc2hvdWxkQmVGYWxz
ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcnJheSwgImxlbmd0aCIpLndyaXRh
YmxlJykKIAorY29uc29sZS5sb2coImJsYXJoLiIpOworCiAvLyBDaGVjayB0aGF0IGZyZWV6aW5n
IGFyZ3VtZW50cyBvYmplY3RzIHdvcmtzIGNvcnJlY3RseS4KIHZhciBhcmdzID0gZnJlZXplKChm
dW5jdGlvbigpeyByZXR1cm4gYXJndW1lbnRzOyB9KSgwLDEsMikpOworY29uc29sZS5sb2coImhh
dmUgYXJncyIpOwogc2hvdWxkQmVUcnVlKCdPYmplY3QuaXNGcm96ZW4oYXJncyknKQorY29uc29s
ZS5sb2coInlvIik7CiBhcmdzWzBdID0gMzsKIHNob3VsZEJlKCdhcmdzWzBdJywgJzAnKTsKIHNo
b3VsZEJlRmFsc2UoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJncywgImxlbmd0
aCIpLndyaXRhYmxlJykKQEAgLTEyMiwxMSArMTM3LDE3IEBAIHNob3VsZEJlRmFsc2UoJ09iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2MKIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zRnJlZXplSXNG
cm96ZW4oeCkKIHsKICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoeCk7CisgICAgY29uc29s
ZS5sb2coeFswXSk7CisgICAgY29uc29sZS5sb2coeFsxXSk7CisgICAgY29uc29sZS5sb2coeFsy
XSk7CisgICAgY29uc29sZS5sb2coeC5sZW5ndGgpOwogICAgIE9iamVjdC5mcmVlemUoeCk7CiAg
ICAgcmV0dXJuIE9iamVjdC5pc0Zyb3plbih4KTsKIH0KIHNob3VsZEJlVHJ1ZSgncHJldmVudEV4
dGVuc2lvbnNGcmVlemVJc0Zyb3plbihmdW5jdGlvbiBmb28oKXt9KScpCiBzaG91bGRCZVRydWUo
J3ByZXZlbnRFeHRlbnNpb25zRnJlZXplSXNGcm96ZW4oZnVuY3Rpb24gZm9vKCl7ICJ1c2Ugc3Ry
aWN0IjsgfSknKQogc2hvdWxkQmVUcnVlKCdwcmV2ZW50RXh0ZW5zaW9uc0ZyZWV6ZUlzRnJvemVu
KFswLDEsMl0pJykKK2NvbnNvbGUubG9nKCJBYm91dCB0byBkbyBzdHVmZiIpOwogc2hvdWxkQmVU
cnVlKCdwcmV2ZW50RXh0ZW5zaW9uc0ZyZWV6ZUlzRnJvemVuKChmdW5jdGlvbigpeyByZXR1cm4g
YXJndW1lbnRzOyB9KSgwLDEsMikpJykKK2NvbnNvbGUubG9nKCJEb25lIHN0dWZmLiIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161814</attachid>
            <date>2012-08-31 20:50:38 -0700</date>
            <delta_ts>2012-09-04 17:17:55 -0700</delta_ts>
            <desc>almost there in fast/js</desc>
            <filename>butterflies_patch_31.diff</filename>
            <type>text/plain</type>
            <size>411856</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIFBhcmVudDo6bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2
ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25z
dCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+
KG9iamVjdCk7CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAg
LTQ4NCw3ICs0OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDcgQEAKIAkJMEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENh
bGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I3MTRC
Q0Y4RTEwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEds
b2JhbFJlc29sdmVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0
ZWNvZGVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1
RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0
IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUz
N0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxNjAxNUExNTYxOThCRjAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTg4LDYgKzE4OSwxNyBAQAogCQkwRkI1
NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2
ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCNTQ2
N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdBMTRGNUM3
RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2N0QxNEY1Q0ZENjAw
MkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0MxNEY1Q0ZEMzAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwICovOyB9OworCQkwRkI3RjM5NTE1
RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8qIEFy
cmF5Q29udmVudGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QTE1RUQ4
RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRl
cmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
N0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEQxNUVEOEUz
ODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhGMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUQxNUVEOEU0
NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlFMTVFRDhF
NDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCN0YzOTMxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU0MTQ5
NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQkMwQUU4MTQ5
NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4
aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4
MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTU2Niw3ICs1NzgsNiBAQAogCQlBNzY2QjQ0RjBFRThEQ0QxMDA5NTE4
Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlBNzZDNTE3NjExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkM1MTc0MTE4Mjc0OEQw
MDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLzsgfTsKLQkJ
QTc4MUUzNTkxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzgxRTM1ODE0MTk3MEM3MDAwOTRE
OTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzQx
MUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgfTsKIAkJQTc4NEEyNjQxMUQxNjYy
MjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVj
a2VyLmggKi87IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLzsg
fTsKQEAgLTgyNyw2ICs4MzgsNyBAQAogCQkwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0
aG9kQ2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGhv
ZENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNCNjE0
QkNGOERGMDA4ODVCNEYgLyogR2xvYmFsUmVzb2x2ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2xvYmFsUmVzb2x2ZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENh
bGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxM
aW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNB
MDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0Myw2ICs5NTUs
MTcgQEAKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlDb252
ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4QTE1RUQ4RTM4
MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4
QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hl
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RTE1RUQ4RTM4MDBG
MTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyog
UHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3Bl
cnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MTE1RUQ4
RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MjE1RUQ4RTM4
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1
IC8qIENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9y
aWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzNyw3ICsxMzYwLDYgQEAK
IAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNl
SklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODFF
MzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0
RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5
bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMTEsNiArMjAz
MywxOSBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYwQ0Q0QzAxNUYxQTYwNDAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovLAorCQkJCTBGQjdGMzg5MTVFRDhFMzgw
MEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAw
RjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdC
MiAvKiBCdXR0ZXJmbHkuaCAqLywKKwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAv
KiBJbmRleGluZ0hlYWRlci5oICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJ
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBG
MTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0Iy
IC8qIFByb3BlcnR5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAv
KiBSZWplY3QuaCAqLywKKwkJCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oICovLAorCQkJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIx
QTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgw
MEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQg
LyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVu
dHMuY3BwICovLApAQCAtMjE5Niw3ICsyMjMxLDYgQEAKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZB
IC8qIFNtYWxsU3RyaW5ncy5oICovLAotCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBT
dG9yYWdlQmFycmllci5oICovLAogCQkJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8sCiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8q
IFN0cmljdEV2YWxBY3RpdmF0aW9uLmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYw
IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTI3NDUsNyArMjc3OSw2IEBACiAJCQkJ
RTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8q
IFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcw
QzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2
MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjg5NCw2ICsyOTI3LDE4IEBACiAJCQkJMTQ4NzRBRTYx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0Iy
MTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0
MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVE
OEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFn
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlGMTVFRDhFNDYwMEYx
NjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQ
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fy
cmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBU
aGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5
cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAg
dG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVk
ZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJy
YXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBh
c0FycmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBl
KSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJh
eTo6c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFy
cmF5OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcwLDcg
KzE2NzAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3Rv
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3Bl
cnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7
CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1Nyw4ICs4NTcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgbW9yZSBjb25zZXJ2YXRpdmUg
aGFuZGxpbmcgb2YgdGhlIG91dC1vZi1ib3VuZHMKICAgICAgICAgICAgIC8vIGNhc2UuCiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTE5
LDEwICs5MTgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMzQ0LDcgKzEzNDMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xMzYyLDggKzEzNjEsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhp
bmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAg
Ly8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3Qg
aGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5j
eUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVi
bGljOgogICAgIAogICAgIGVudW0geyBTaXplID0gMyB9OwogICAgIAorICAgIEFkamFjZW5jeUxp
c3QoKSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAg
ICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJyYXk6OlVu
ZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8g
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtl
U2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3Jh
Z2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAg
ICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlz
IHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwog
ICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFi
bGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29s
IG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwog
ICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgog
ICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Np
bmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAg
ICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGlu
Z1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBA
IC0xNzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUg
bW9kCiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAg
ICAgICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKLSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBy
ZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjczNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUgewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGll
cyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28g
d2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBHZW5lcmljLAogICAgIFN0cmluZywKLSAgICBK
U0FycmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5kcywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAg
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAg
IEFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHMsCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LApAQCAt
NjEsNiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisv
LyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2Fz
ZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlw
bGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8g
aGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlf
QVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBc
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUwor
I2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2Rl
cyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03NCw4ICsxMDEsMTcgQEAgY29uc3QgY2hhciog
bW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIGlubGluZSBib29sIG1vZGVJc0pTQXJyYXkoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Cisg
ICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lu
bGluZSBib29sIGlzSW5Cb3VuZHNBY2Nlc3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTE0LDI1ICsxNTAsNiBAQCBpbmxpbmUgQXJyYXk6Ok1vZGUgbW9kZUZvclB1
dChBcnJheTo6TW9kCiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBtb2Rlc0NvbXBhdGlibGVGb3JT
dG9yYWdlTG9hZChBcnJheTo6TW9kZSBsZWZ0LCBBcnJheTo6TW9kZSByaWdodCkKLXsKLSAgICBp
ZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgYm9vbCBs
ZWZ0SXNKU0FycmF5ID0KLSAgICAgICAgbGVmdCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8
fCBsZWZ0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgYm9vbCByaWdo
dElzSlNBcnJheSA9Ci0gICAgICAgIHJpZ2h0ID09IEFycmF5OjpKU0FycmF5Ci0gICAgICAgIHx8
IHJpZ2h0ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM7Ci0gICAgCi0gICAgaWYgKGxlZnRJ
c0pTQXJyYXkgJiYgcmlnaHRJc0pTQXJyYXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogaW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6
Ok1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKQEAgLTE0Nyw3ICsxNjQsMTUgQEAg
aW5saW5lIGJvb2wgbW9kZUlzU3BlY2lmaWMoQXJyYXk6Ok1vZGUgbQogCiBpbmxpbmUgYm9vbCBt
b2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gbW9kZUlz
U3BlY2lmaWMobW9kZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBBcnJheTo6VW5k
ZWNpZGVkOgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY3NCw3ICsxNjc0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0
QnlPZmZzZXQoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgZWxzZQotICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICBzZXQoZGVzdGluYXRp
b25PcGVyYW5kLAogICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAgR2V0QnlPZmZzZXQs
IE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLApAQCAtMjMwOSw3ICsyMzA5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlk
U3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJh
c2UpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEgc3RvcmFnZUFjY2Vzc0RhdGE7CkBAIC0yMzYwLDEzICsyMzYwLDEzIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
LCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDcgKzU4Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxk
MSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTE2MCw3ICsxMTYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlT
dG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDggKzM4MSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAg
bV9ncmFwaC5yZWYoYXJyYXkpOwotICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UoCi0gICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBP
cEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOworICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U7CisgICAgICAgIGlmIChtb2RlSXNKU0FycmF5KGFycmF5TW9kZSkpCisgICAgICAg
ICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0gTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVP
cmlnaW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwg
T3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQog
ICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZS5yZWYoKTsKICAgICAgICAgTm9k
ZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9wKCkgPT0gR2V0QnlW
YWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5mbyB7CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51
bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAKKyAgICBOb2RlKCkgeyB9CisgICAgCiAgICAg
Ly8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2
YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2Vz
Tm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0gICAgbWFjcm8oR2V0UHJvcGVydHlTdG9y
YWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1hY3JvKEdldEJ1dHRlcmZseSwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2Up
IFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyNzM1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAKICNp
bmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpAQCAtMjI2LDE0ICsyMjcsMTQgQEAgc3Rh
dGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICBpZiAoaXNKU0FycmF5KGJh
c2VWYWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7
Ci0gICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKSB7Ci0gICAgICAgICAgICBh
cnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKKyAgICBpZiAoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpbmRleCkp
IHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGluZGV4
LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBKU0Fy
cmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CisgICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4
LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQxLDExICsz
NDIsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeAogICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAgICAvLyBG
SVhNRTogdGhlIEpJVCB1c2VkIHRvIGhhbmRsZSB0aGVzZSBpbiBjb21waWxlZCBjb2RlIQotICAg
IGlmIChpc0pTQXJyYXkoYmFzZSkgJiYgYXNBcnJheShiYXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzQXJyYXkoYmFzZSktPmdldEluZGV4
KGluZGV4KSk7CisgICAgaWYgKGJhc2UtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgIH0KIAotICAgIC8vIEZJWE1FOiB0aGUg
SklUc3R1YiB1c2VkIHRvIHJlbGluayB0aGlzIHRvIGFuIG9wdGltaXplZCBmb3JtIQogICAgIGlm
IChpc0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJhc2UpLT5jYW5HZXRJbmRleChpbmRleCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNTdHJpbmcoYmFzZSktPmdldEluZGV4
KGV4ZWMsIGluZGV4KSk7CiAKQEAgLTUzNCwxNSArNTM2LDE1IEBAIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPGZh
bHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2Rl
ZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7
CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
Z2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAg
ICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAgICAgICBKU0FycmF5Ojpw
dXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHRydWUpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4
ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NTEsMTUgKzU1MywxNSBAQCB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgICAgIGFycmF5LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNs
b3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJh
eUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBpbnQzMl90
IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVj
KTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0b3IuCi0gICAg
ICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6
OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleFF1aWNrbHko
aW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoYXJyYXks
IGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI2OCwyMCArMTI3MCwyOSBAQCB2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0CiAKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1
ZSksICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsgaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5ICsgMSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHksIGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmcmVzdWx0KSkKLSAgICAgICAg
Q1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIDEpICsgbmV3U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIG5ld1NpemUsIGZhbHNlLCAwKSk7Cit9CisKK2NoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9y
YWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOwor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworfQorCitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0
b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkK
K3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1
bHQpOwogfQogCiBkb3VibGUgREZHX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMy
X3QgYSwgaW50MzJfdCBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHR5cGVkZWYg
c2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXIKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVS
QVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwog
dHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERG
R19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVm
IHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpT
QXJyYXkqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSWNmKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVD
YWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
RUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
KTsKQEAgLTEwNSw4ICsxMDUsMTAgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FUFpK
KShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7CiB0
eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUq
KTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVj
U3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90
KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VQUykoRXhl
Y1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKIAogLy8gVGhlc2Ugcm91dGlu
ZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25zIG9mIG9w
ZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld09iamVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkBAIC0xMzgsOCArMTQwLDgg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaQogdm9pZCBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbE5vblN0cmlj
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwg
SlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJy
YXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4
cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwpAQCAtMTg1
LDYgKzE4Nyw4IEBAIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklzRnVuY3Rpb24KIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3RvcmFnZUFuZEZpbmlzaFB1dChF
eGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5B
TDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jv
d1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCBuZXdTaXplKSBX
VEZfSU5URVJOQUw7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiAKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAog
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTIgKzE5OSwxMiBAQCBzdGF0aWMgdm9pZCBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CiAjZW5kaWYKICAgICB9IGVs
c2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmFkZHJlc3NPZk91dE9m
TGluZVN0b3JhZ2UoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3Rv
T2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfQog
CkBAIC0yNTMsMTAgKzI1MywxMCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBlCiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZUNhc2VzOwogICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAg
ICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0
dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
NDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQK
ICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBz
Y3JhdGNoR1BSKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2Vsc2UKQEAgLTQ3Myw3ICs0NzMsNyBA
QCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAg
ICAgfQogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRH
UFIpOwogI2Vsc2UKQEAgLTY4MSwxNyArNjgxLDE3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBs
YWNlU3R1YigKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAg
ICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAg
IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsK
ICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiAg
ICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hH
UFIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0
LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC04MzAsNyArODMwLDcg
QEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQ
UjMpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwogICAgICAgICAgICAgc3R1YkppdC5z
dG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5n
KTsKQEAgLTg0NCw3ICs4NDQsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIo
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9yYWdlID0g
dHJ1ZTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NTQsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFn
ZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSB7CkBAIC04NjMsOSArODYzLDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkp
OworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgICAgICAgICAgCkBAIC0xMDIw
LDYgKzEwMjAsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAog
ICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUg
c3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAg
ICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAgICAg
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU8KICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1f
aml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVM
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxl
TG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0
IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0
Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAK
ICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTUz
NCw3ICs1MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAg
ICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAgSklUQ29tcGlsZXI6OkNvbnZl
cnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252
ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmNv
bnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKIAogICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtMjU0Nywy
MyArMjU0NywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJh
eToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0
IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwKLSAgICAgICAgICAgIC8vIGF0IHRoaXMg
cG9pbnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIo
KSk7CkBAIC0yNjUzLDYgKzI2NDcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoZSBiYXNlIG1heSBub3QgYmUgbmVjZXNz
YXJ5IGZvciBzb21lIGFycmF5IGFjY2VzcyBtb2Rlcy4gQnV0IHdlIGhhdmUgdG8KKyAgICAgICAg
Ly8ga2VlcCBpdCBhbGl2ZSB0byB0aGlzIHBvaW50LCBzbyBpdCdzIGxpa2VseSB0byBiZSBpbiBh
IHJlZ2lzdGVyIGFueXdheS4gTGlrZWx5CisgICAgICAgIC8vIG5vIGhhcm0gaW4gbG9ja2luZyBp
dCBoZXJlLgogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7
CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGls
ZDIpOwogICAgICAgICAKQEAgLTI2NjAsOCArMjY1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBB
cnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7
CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIC8vIE1hcCBi
YXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2gg
cmVnaXN0ZXIuCkBAIC0yNjg4LDggKzI2ODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpK
U0FycmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vz
cyhhcnJheU1vZGUpKQogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAg
ICAgICBiYXNlLnVzZSgpOwpAQCAtMjcwMiw5ICsyNjk4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJh
eTsgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVw
ZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUz
Mihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwogCiAgICAgICAgICAgICBsZW5ndGhEb2Vz
Tm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CkBAIC0yNzEzLDcgKzI3MDksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBTdG9yZSB0
aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CiAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJy
YXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5
TW9kZSkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgYmV5b25k
QXJyYXlCb3VuZHMsIHRoaXMsCkBAIC0yODgyLDE3ICsyODc4LDE3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9y
YWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXph
cnJlIGxlbmd0aHMuCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBz
dG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0g
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0
b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
IApAQCAtMjkxOCwxOCArMjkxNCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAg
ICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0
aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRD
YXNlczsKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAg
ICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSksIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BS
KSk7CiAgICAgICAgIApAQCAtMzUxNSwxNCArMzUxMSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9w
ZXJ0eVN0b3JhZ2U6IHsKKyAgICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAg
ICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVh
azsKQEAgLTM4NjUsNyArMzg2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICNlbmRpZgogICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CiAg
ICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5m
b0dQUik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFs
T2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2
ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2FsZVB0ciwgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTkgKzMxNSwyOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAg
ICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJv
dW5kczogewotICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBp
biBhbnRpY2lwYXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCi0gICAgICAgIC8vIHN1YnN0YW50aWFs
bHkgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JB
R0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoOCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzAwNiwxMSArMzAxNSw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwpAQCAtMzEyNSwxMyArMzEyOSwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9k
ZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgY2Fz
ZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMjI3LDYgKzMy
MzAsMjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9k
ZSkKIHsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVy
dHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSKTsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKICAgICAgICAgCkBAIC0zMjQ4LDEzICszMjY1LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAgICAgICAgCi0gICAg
bV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQ
dHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQ
UiwgbV9jb21waWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIHNpemVfdCBvbGRTaXpl
ID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBuZXdTaXplID0g
b2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKKyAgICBBU1NFUlQobmV3U2l6ZSA9PSBu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2Nh
dGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwg
bmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkBAIC0zMjY3LDkgKzMzMDIsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIAogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogICAgICAgICAKLSAgICBzaXplX3Qgb2xkU2l6ZSA9
IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG9s
ZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3BpZWRBbGxv
Y2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKICAg
ICAgICAgCiAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1h
aW5pbmcsIHNjcmF0Y2hHUFIyKTsKQEAgLTMyODAsMTMgKzMzMTIsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKICAgICAgICAg
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBu
ZXdTaXplKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXplIC8gc2l6ZW9mKEpT
VmFsdWUpKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdlLCBzY3Jh
dGNoR1BSMSA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KSkgewogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3Jh
Z2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3Jh
dGNoR1BSMSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXpl
b2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIAogICAg
IHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE1Niw2ICsxMTU2LDE2IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CkBAIC0xMzY4LDcg
KzEzNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMTY2Niw3ICsxNjc2LDcgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
RUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJn
M1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJh
dGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
M1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQ
YXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKQEAgLTIxMzksNyArMjE0OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkNsYXNzVHlwZTo6
c19pbmZvKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBvYmpl
Y3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSk7CiAgICAgfQogCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0cnVjdHVyZSBi
ZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAg
ICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
aAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIG92
ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAotICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9j
YXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNr
ZWRCb29sZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNr
ZWRCb29sZWFuIHRyeUFsbG9jYXRlT3ZlcnNpemUoc2l6ZV90LCB2b2lkKiopOwogICAgIENoZWNr
ZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVPdmVyc2l6ZSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcg
KzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIo
SlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBXcml0
ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlw
ZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVy
SUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKKyAgICAgICAgdm9p
ZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJh
c2UsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0Fy
cmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQg
Y2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQ
dHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHIKICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIEFkZHJlc3MocmVzdWx0LCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBvYmplY3QncyBw
cm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBB
ZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTQzNCw3ICs0MzQsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNK
U09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1bHQsIHNjcmF0
Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXpl
X3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0
ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgcHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdp
c3RlcklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2ds
b2JhbERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCkBAIC00NDMsMzcgKzQ0MywzMiBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAgICAgc3RvcmVQdHIo
cmVzdWx0LCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG5lZ1B0cihyZXN1
bHQpOwogICAgIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9jdXJyZW50UGF5
bG9hZEVuZCksIHJlc3VsdCk7Ci0gICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplKSwgcmVzdWx0
KTsKKyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUgLSBvZmZzZXRGcm9tQmFzZSksIHJlc3Vs
dCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2
YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJl
Z2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQogewogICAgIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsKLSAgICBzaXplX3Qg
aW5pdGlhbFN0b3JhZ2UgPSBKU0FycmF5OjpzdG9yYWdlU2l6ZShpbml0aWFsTGVuZ3RoKTsKKyAg
ICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOwogCiAgICAgLy8gV2UgYWxs
b2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2FyYmFnZSBjb2xs
ZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGluaXRpYWxpemF0
aW9uLgotICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFnZSwgc3RvcmFn
ZVJlc3VsdCk7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8vIEFsbG9jYXRl
IHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxK
U0FycmF5LCBmYWxzZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkt
PmFycmF5U3RydWN0dXJlKCkpLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAogICAgIC8vIFN0
b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4KLSAgICBzdG9y
ZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
YWxsb2NCYXNlT2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN0b3Jl
MzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Om51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5n
dGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVz
dWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnNwYXJz
ZU1hcE9mZnNldCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxsb2NhdGVkIEFycmF5
U3RvcmFnZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQs
IEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAKLSAg
ICAvLyBTdG9yZSB0aGUgdmVjdG9yIGxlbmd0aCBhbmQgaW5kZXggYmlhcy4KLSAgICBzdG9yZTMy
KEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Mo
Y2VsbFJlc3VsdCwgSlNBcnJheTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLQotICAgIC8vIEluaXRp
YWxpemUgdGhlIHNwYXJzZSB2YWx1ZSBtYXAuCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigw
KSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzcGFyc2VWYWx1ZU1hcE9mZnNldCgpKSk7
Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgorICAgIC8vIFN0b3JlIHRo
ZSB2YWx1ZXMgd2UgaGF2ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0
b3JhZ2VQdHIpOwpAQCAtNDg1LDE2ICs0ODAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxv
Y2F0ZUpTQXJyYXkodW5zCiAgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlmCiAgICAgfQot
Ci0gICAgLy8gWmVybyBvdXQgdGhlIHJlbWFpbmluZyBzbG90cy4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZW5ndGg7IGkgPCBpbml0aWFsTGVuZ3RoOyBpKyspIHsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1
bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIGkpKTsKLSNlbHNlCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludD4oSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1
bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwot
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0j
ZW5kaWYKLSAgICB9CiB9CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NjcsNyArMTY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jX2V4cChJbnN0
cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdl
U2l6ZShsZW5ndGgpKSkgeworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkp
KSB7CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZXdfYXJyYXkp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMTY4Niw3ICsx
Njg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVjdAogICAgIC8v
IElmIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFscmVhZHkgbWFr
ZSB0aGUgcHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29wX25ld19hcnJh
eS4KICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAg
ICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3Ro
KSkpCisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gQ29w
aWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5v
dWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWRQYXlsb2FkKGl0ZXIs
IHJlZ1QxKTsKICAgICAKICAgICAvLyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7CiAgICAgbG9hZDMy
KGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDEwICsxMTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVj
dGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVj
dHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
JkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZWdUMCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwpAQCAtMTYyLDcgKzE2
Miw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAg
ICBpZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lu
bGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAg
ICAgIG5lZzMyKG9mZnNldCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAg
aXNJbmxpbmUubGluayh0aGlzKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAg
aXNPdXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwpAQCAtMjM5LDEwICsyMzksMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxF
UikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBlbXB0eSA9IGJy
YW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAgTGFiZWwgc3Rv
cmVSZXN1bHQodGhpcyk7CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhz
dG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsK
LSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMSk7CiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKQEAgLTQw
Myw3ICs0MDMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCBiYXNlCiAg
ICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVj
dHVyZUNoZWNrKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9m
T3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHBy
b3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIERhdGFMYWJlbENvbXBhY3Qg
ZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
QWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAg
IExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRv
Q29tcGFyZTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBh
cmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSkpKSk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QyKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBEYXRhTGFiZWwz
MiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdU
MSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwogCiAgICAgRU5E
X1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKQEAgLTUwOSw4ICs1MDks
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwotICAgIHN0b3JlUHRyKHZhbHVlLCBB
ZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShj
YWNoZWRPZmZzZXQpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2Us
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKIH0K
IAogLy8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlLiAg
TWF5IG92ZXJ3cml0ZSBiYXNlLgpAQCAtNTIxLDggKzUyMSw4IEBAIHZvaWQgSklUOjpjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1
ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zm
c2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQpAQCAtNTMyLDggKzUzMiw4IEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBsb2FkUHRyKGJhc2UtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVz
dWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02NjAsMTEgKzY2MCwxMSBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAjaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QzLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRB
cnJheVByb2ZpbGUoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZMYXN0U2VlblN0
cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9
IGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAKICAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDMp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlZ1QyKTsKICAgICBKdW1wIGZhaWx1
cmVDYXNlczIgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7CiAK
ICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MTcsOCArMTUxNyw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0
X2IKICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNl
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAq
c3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0g
YmFzZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7
Ci0gICAgYmFzZS0+c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBu
ZXdTdHJ1Y3R1cmUpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0
QnV0dGVyZmx5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHJl
dHVybiBiYXNlOwogfQpAQCAtMjQzNSw3ICsyNDM1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04o
RW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1l
LmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5h
cmdzWzFdLmpzVmFsdWUoKTsKLQorICAgIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2Vs
bCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1
bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFz
U3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7CiAgICAgICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CkBAIC0yNTI4LDEyICsyNTI4LDEyIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0Lmlz
VUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsK
LSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5
KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXkt
PmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9i
YWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAg
ICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAg
ICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXks
IGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
b2JqZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5
SW5kZXgoY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCkpOwogICAgIH0gZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5n
ZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAg
IExMSU5UX09QKDEpID0gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUND
RVNTX1NMT1cKICAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGUoKQpAQCAtODc3LDcgKzg3Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGlu
dF9vcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAgICAgIHBjWzVdLnUub3Bl
cmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTkzOSw3ICs5MzksNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0u
dS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHBjWzZdLnUuc3RydWN0dXJlLnNldCgK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkBAIC05NjcsNyArOTY3
LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAg
ICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZF9v
dXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQ2LDEyICsxMDQ2LDEyIEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICAKICAgICBpZiAoTElL
RUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2Ny
aXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAg
ICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5
LT5zZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUu
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkp
CisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaSwg
dmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5
SW5kZXgoanNBcnJheSwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmlj
dE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgICAgICAgICBMTElOVF9FTkQoKTsKICAgICAgICAgfQogICAgICAgICBiYXNl
VmFsdWUucHV0QnlJbmRleChleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3Ry
aWN0TW9kZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtOTQzLDIxICs5NDMsMjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoK
IG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5
T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3Jv
IChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVu
ZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZM
aW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRp
IFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3Rv
cmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsg
KElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0
eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2Jq
ZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9h
ZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhp
bmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBl
bmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwg
b2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQs
IElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1f
b3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxp
bmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3Rv
cmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFs
T2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4
ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAg
bG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBt
YWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwMiwyMCArODAyLDIwIEBAIF9sbGludF9vcF9p
c19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5h
bChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAg
YXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVT
dG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVy
Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdl
XSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAy
KSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1
ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDgg
LSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRB
c1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVP
ZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAg
YmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGlu
ZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFn
ZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2Jq
ZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0
QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50
CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9p
bmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5k
U3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0
QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAy
KSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisg
ICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGlu
Z0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUK
IGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBAIC0xMTMyLDggKzExMzIs
OCBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
RGF0YVt0Ml0sIHQyCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3Qy
XSwgdDIKICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5
VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEg
dDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJ
bmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFs
U2xvdwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdl
OjptX3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpA
QCAtMTIxNyw4ICsxMjE3LDggQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0MAogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNB
cnJheUNsYXNzSW5mb1t0MF0sIHQwCiAgICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0
M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JM
ZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2Vb
dDFdLCB0MAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlh
ZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAs
IHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBs
b2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEyMjksOSArMTIyOSw5IEBAIF9sbGludF9vcF9w
dXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdl
OjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3Jh
Z2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9m
ZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxp
ZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3Qg
QWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBl
ID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEzCkBAIC0zMjMsNyArMzI4LDcgQEAgbWFjcm8gYWxs
b2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFzc0luZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9P
ZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgogICAgICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1
bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0
XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRd
CisgICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVu
ZAogZW5kCiAKQEAgLTQ5OCw3ICs1MDMsNyBAQCBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmpl
Y3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBw
cm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRP
ZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0
OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRo
YXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdpc3RlciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMg
cHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhlIG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1
c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKUwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiB9CiAKIGJvb2wgQXJndW1lbnRzOjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgCkBAIC0zMDgsNyArMzA4LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZQogICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHlldCBw
cmVzZW50IG9uIHRoZSBvYmplY3QsIGFuZCBpcyBub3QgeWV0IG1hcmtlZCBhcyBkZWxldGVkLCB0
aGVuIGFkZCBpdCBub3cuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICBpZiAo
KCF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxl
dGVkQXJndW1lbnRzW2ldKSAmJiAhSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICAgICAgb2JqZWN0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3Vt
ZW50KGkpLmdldCgpLCAwKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRl
eChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLmdldCgpKTsKICAg
ICAgICAgaWYgKCFCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDggQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBcnJheVBy
b3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJh
eUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJ
bmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCisKKy8vIE92ZXJ2aWV3
IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUg
c3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNP
YmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBz
cGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1u
dW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNl
bnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMg
Z3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMg
b25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQg
MzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQg
d2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwg
cHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4g
dW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJl
IGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9y
YWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBo
YW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChp
IDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRo
ZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1v
ZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICog
V2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
SU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3Rv
cmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5z
aXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChh
IHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5
TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBX
aGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRo
ZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5
LgorCisvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJe
MzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyBy
aXNrIG9mIG92ZXJmbG93LgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpKQorCisvLyBU
aGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWlu
KCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmll
cywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0g
aXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZp
bmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RP
Ul9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxv
Y2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBs
ZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4g
NFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVy
byBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVm
aW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNl
IGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5
IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZl
Y3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzgg
ZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQor
eworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGgg
LyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGlu
Z0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQu
c2V0QXV4V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGgodmVjdG9yTGVuZ3RoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4
aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGlu
Z0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWls
ZGVyLmgiCkBAIC0xMTQsOSArMTE2LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlw
ZTo6c19pbmZvID0KIEBlbmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseShleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBl
KiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4o
KmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5
cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KQogewogfQogCkBAIC0yOTIsOCArMzAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxl
bmd0aDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNP
YmotPmNhbkdldEluZGV4KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldElu
ZGV4KGspOworICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAg
ICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAg
ICAgCkBAIC00MTMsMTAgKzQyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAog
ICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5
LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVp
Y2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBl
bGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQo
ZWxlbWVudC50b1dURlN0cmluZ0lubGluZShleGVjKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC02
MjgsNyArNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKIAotICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNwYXJzZU1vZGUoKSkg
eworICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvICYmICFh
c0FycmF5KHRoaXNPYmopLT5pblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChp
c051bWVyaWNDb21wYXJlRnVuY3Rpb24oZXhlYywgY2FsbFR5cGUsIGNhbGxEYXRhKSkKICAgICAg
ICAgICAgIGFzQXJyYXkodGhpc09iaiktPnNvcnROdW1lcmljKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEpOwogICAgICAgICBlbHNlIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5v
bmUpCkBAIC03ODgsOSArNzk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAg
ICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsg
PCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlm
ICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0
SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJy
YXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhh
cHBseVRoaXMpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCB2KTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwpAQCAtODQ2
LDExICs4NTYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hl
ZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGgg
JiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJy
YXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtOTA5LDExICs5
MTksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJy
YXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGsp
KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC05NjUsMTEgKzk3NSwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNo
ZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+
aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+
Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC0xMDE3LDExICsxMDI3LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENh
bGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRF
eGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5H
ZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtMTA3NSw4ICsxMDg1LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAg
IGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleCgwKSl7Ci0gICAgICAgIHJ2ID0g
YXJyYXktPmdldEluZGV4KDApOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJ
bmRleFF1aWNrbHkoMCkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoMCk7
CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewpAQCAtMTA5Nyw4ICsxMTA3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5k
ZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBydik7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHY7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5H
ZXRJbmRleChpKSkpCi0gICAgICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAg
ICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpKSkpCisgICAg
ICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVlbiBtYWRlIHVuc2Fm
ZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIHYpOwpAQCAtMTE1Miw4ICsxMTYyLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIAogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAg
ICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgobGVuZ3RoIC0gMSkpewotICAg
ICAgICBydiA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAxKTsKKyAgICBlbHNlIGlmIChhcnJh
eSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEpKXsKKyAgICAgICAgcnYg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEpOwogICAgICAgICBpID0gMTsKICAg
ICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTEx
NzQsOSArMTE4NCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgICAgIHVuc2lnbmVkIGlkeCA9IGxlbmd0aCAtIGkgLSAxOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgwLCBydik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleChpZHgpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdl
dEluZGV4UXVpY2tseShpZHgpKSkKICAgICAgICAgICAgICAgICBicmVhazsgLy8gbGVuZ3RoIGhh
cyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBmYWxsYmFjayB0byBzbG93IHBh
dGgKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4
KGlkeCkpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0
SW5kZXhRdWlja2x5KGlkeCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgy
LCBqc051bWJlcihpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMywg
YXJyYXkpOwogICAgICAgICAgICAgcnYgPSBjYWNoZWRDYWxsLmNhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToK
LSAgICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICAgICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJm
bHkqKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAKLSAg
ICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5
cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcHJvdG90eXBlLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsK
LSAgICAgICAgfQorICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtNDcsNyArNDIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5
V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlTdG9y
YWdlX2gKKworI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCdXR0ZXJm
bHkuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5
VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJy
YXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3Jh
Z2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29u
dGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8v
IHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVy
ZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQg
dG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVk
IHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1f
aW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0
b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3Jl
YXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBB
cnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0
b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRl
eGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAg
ICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRl
cjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0
aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2
b2lkIHNldExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4
V29yZChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5k
ZXhpbmdIZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNp
Z25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVy
Zmx5OjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAg
ICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb20oY29uc3QgQXJyYXlTdG9y
YWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwID0gb3RoZXIubV9zcGFyc2VN
YXA7CisgICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVy
Lm1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
biA9IG90aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9CisgICAg
CisgICAgYm9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3BhcnNl
TWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7CisgICAgfQorICAgIAorICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOwor
ICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBv
c2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90
IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
bV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhp
bmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0
b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9pbmRleEJpYXMpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3NwYXJzZU1hcCk7IH0KKyAgICAKKyAgICBzdGF0aWMg
c2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyB2ZWN0b3JMZW5ndGggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0
dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVy
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3Jh
Z2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNs
b3RWaXNpdG9yOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJm
bHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMg
c2l6ZV90IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMg
PyBoYXNJbmRleGluZ0hlYWRlciA6IHRydWUpOworICAgICAgICBBU1NFUlQoc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgcmV0dXJuIChw
cmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAr
IChoYXNJbmRleGluZ0hlYWRlciA/IHNpemVvZihJbmRleGluZ0hlYWRlcikgOiAwKSArIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZy
b21CYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkq
PihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9w
ZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgp
IHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZz
ZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7
IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEm
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVV
bmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgCisgICAgSW5kZXhpbmdIZWFk
ZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7
IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJl
dHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdl
KCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQorICAgIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0YXRp
YyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9w
ZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAgICB2b2lkKiBiYXNlKFN0cnVjdHVyZSog
c3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRo
b2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55
CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlv
biBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9mCisgICAgLy8gbWV0aG9kcyBpcyBub3Qg
ZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJs
ZSBhbGxvY2F0aW9uCisgICAgLy8gbW9kZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29k
ZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVzIGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJl
Y3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQ
cm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
b2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAg
QnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNp
dHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4
aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0
eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5
UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0ds
b2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJl
Q2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5v
dCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFk
ZXIuCisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2Rl
ZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5o
IgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
Cit7CisgICAgdm9pZCogdGVtcDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2Uoc2l6ZSwgJnRlbXApKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0
ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAg
ICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCisgICAgICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVy
KCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAorICAgICAgICB2
aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwK
KyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlD
YXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5l
d1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgbWVtY3B5KAorICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgp
IC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgYmFzZShwcmVDYXBhY2l0eSwgb2xkUHJv
cGVydHlDYXBhY2l0eSksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9w
ZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRh
LCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkK
K3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
b2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3Bl
cnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJh
eVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5n
SGVhZGVyKCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAgIEFTU0VSVF9VTlVTRUQo
b2xkU3RydWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwg
cHJvcGVydHlDYXBhY2l0eSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1Np
emUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwg
cHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jv
d0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVy
biBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVy
KG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigp
LT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVz
aXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIG5l
d1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJl
IG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAor
ICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlT
dG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4o
CisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hl
YWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICB0b3RhbFNpemUo
MCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
ZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorewor
ICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVBcnJheSgKKyAgICAgICAg
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hl
YWRlciwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVy
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9m
U2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigp
LT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdl
IGtub3cgaW4gd2hpY2gKKyAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3
ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAg
ICAvLyBtb3ZpbmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBz
byB0aGUgdGhyb3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92
ZXJoZWFkIG9mIGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBj
b21waWxlciB0bworICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhl
IHNpemUgYXJndW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8v
IHdlIHJlbHkgb24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhl
IHBvaW50ZXIgYXJndW1lbnRzIChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFy
aWFibGUgYW5kIGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIg
a25vd3MpLgorICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVy
T2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3Bl
cnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0
b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJl
ck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNo
aWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0g
cHJvcGVydHlDYXBhY2l0eSArIG51bWJlck9mU2xvdHMsCisgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9w
ZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEy
NzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0
cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBN
ZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3Qs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFt
ZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05h
bWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAi
UHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CitjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGlu
Z0hlYWRlciB7CitwdWJsaWM6CisgICAgLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVj
dG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhh
dAorICAgIC8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisgICAgZW51bSB7IG1heGlt
dW1MZW5ndGggPSAweDEwMDAwMDAwIH07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQXV4V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9h
dXhXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIsIG1fbGVuZ3RoKTsgfQorICAgIAorICAg
IC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5kZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8n
cyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0IG9mIHRoaXMgY2xhc3MgYW5kIHNob3Vs
ZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0MgZGVwZW5kCisgICAgLy8gb24gaXQuCisg
ICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fYXV4V29yZCgwKQorICAgICAgICAsIG1f
bGVuZ3RoKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoKHVpbnQzMl90
IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7
CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBh
dXhXb3JkKCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQz
Ml90IGF1eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJ
bmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJbmRleGluZ0hlYWRlciogZnJvbShjb25z
dCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFycmF5U3Rv
cmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVh
ZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGlu
Z0hlYWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAg
eworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KHByb3Bl
cnR5U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0
b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlT
dG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxC
dXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAg
Ly8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVD
YXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoU3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CisgICAgCisgICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVh
bmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMy
X3QgbV9sZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFn
ZSBhbmQgaXRzIHR5cGUuCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIElu
ZGV4aW5nSGVhZGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVfdCBJbmRl
eGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYg
KExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2lu
ZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSgh
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2RlZmluZSBJbmRleGluZ1R5cGVfaAorCitu
YW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKKworLy8gRmxh
Z3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSGFzQXJyYXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRp
b25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFy
ZSB1c3VhbGx5CisvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5
Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAx
NjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRo
ZSBwYXN0LgorCisvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFn
ZTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXkgICAgICAgICAgICAgICAgICAgID0g
SXNBcnJheTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
ICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2li
bGUgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAg
ICAgICA9IDE1OworCisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhl
IGhpc3RvcnkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0
b3J5ICA9IDMxOworCitpbmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihJbmRleGluZ1R5cGUg
dHlwZSkKK3sKKyAgICByZXR1cm4gISEodHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdUeXBlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTQWN0aXZhdGlvbjo6SlNBY3Rp
dmF0aW9uKENhbGxGcmFtZSogY2EKICAgICAgICAgY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFsdWUo
KSwKICAgICAgICAgY2FsbEZyYW1lLT5zY29wZSgpCiAgICAgKQotICAgICwgbV9yZWdpc3RlckFy
cmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlzLCAwKQorICAgICwgbV9yZWdpc3RlckFy
cmF5KDApCiAgICAgLCBtX251bUNhcHR1cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCksIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251
bUNhcHR1cmVkVmFycyhmdW5jdGlvbkV4ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgp
KQogICAgICwgbV9pc1Rvcm5PZmYoZmFsc2UpCkBAIC03NCwxMiArNzQsMTIgQEAgdm9pZCBKU0Fj
dGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICAvLyBObyBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lz
dGVycyBpZiB0aGV5J3JlIHN0aWxsIGluIHRoZSBSZWdpc3RlckZpbGUuCi0gICAgUHJvcGVydHlT
dG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7
CisgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lz
dGVyQXJyYXk7CiAgICAgaWYgKCFyZWdpc3RlckFycmF5KQogICAgICAgICByZXR1cm47CiAKICAg
ICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoYml0d2lzZV9jYXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJy
YXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlT
aXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJh
eSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7CisgICAgdGhpc09iamVjdC0+bV9yZWdpc3Rl
ckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJl
Z2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rlck9mZnNldCgpOwogCiAgICAgLy8gVXBk
YXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBpdCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4K
QEAgLTEzOCw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxl
UHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2
YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
Y3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTUzLDggKzE1Myw4IEBAIHZvaWQgSlNBY3RpdmF0
aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwog
ICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9m
IGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBTa2lwIHRoZSBK
U1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGlubGluZSBib29sIEpTQWN0aXZh
dGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5h
bWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplKCk7CiAgICAgICAgIHNpemVfdCByZWdp
c3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAgICBTdG9yYWdlQmFycmllciBtX3JlZ2lz
dGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2
YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBm
aWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVu
ZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGll
cyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgdW5zaWdu
ZWQgbV9udW1DYXB0dXJlZEFyZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJz
IDogMjg7CiAgICAgICAgIHVuc2lnbmVkIG1faXNUb3JuT2ZmIDogMTsKQEAgLTE2NCw3ICsxNjQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGZyb207IGkgPCB0bzsg
KytpKQogICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX3Jl
Z2lzdGVyc1tpXS5nZXQoKSk7CiAKLSAgICAgICAgbV9yZWdpc3RlckFycmF5LnNldChnbG9iYWxE
YXRhLCB0aGlzLCByZWdpc3RlckFycmF5KTsKKyAgICAgICAgbV9yZWdpc3RlckFycmF5ID0gcmVn
aXN0ZXJBcnJheTsKICAgICAgICAgbV9yZWdpc3RlcnMgPSByZWdpc3RlcnM7CiAgICAgICAgIG1f
aXNUb3JuT2ZmID0gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKgpAQCAtMjQsMTMgKzI0
LDE3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRl
ICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRl
ICJSZWplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5o
IgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw0ODAgKzQ5LDIzIEBAIG5hbWVzcGFjZSBK
U0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJ
VklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwot
Ly8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2Yg
dGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1h
cC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJh
eSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVy
cywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4g
dW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFY
X0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5
IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdl
cikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGlu
IHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBh
IG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIg
aSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBh
bmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhl
IHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9s
bG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Is
Ci0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2Ug
YWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNF
X0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUg
d2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGlu
IHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRh
dGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNl
ZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRo
ZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdF
X1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdh
eXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmlu
aXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRl
ZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8v
IHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2Up
IC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hp
Y2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFy
cmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3Jv
cyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBh
IFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEz
OTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhf
U1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8g
MHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0
aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZG
RVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3
YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEy
MykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5k
IHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJz
dCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQot
Ly8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEg
c3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0
ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVj
dG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRo
YXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlw
bGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5Iiwg
JkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5KX07CiAKLS8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkg
YWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3Rp
YyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0v
LyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cg
ZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3Rh
dGljIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1
bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsK
LX0KLQotc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2Vw
dGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0g
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQotCi1pbmxpbmUgdm9pZCBKU0FycmF5
OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlKQorQnV0dGVyZmx5KiBjcmVh
dGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiB7Ci19Ci0KLSNlbmRpZgotCi12b2lk
IEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgdW5zaWduZWQgaW5pdGlh
bFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3Rv
cmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQq
IG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsK
ICAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9y
YWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3Rv
cmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5p
dGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAw
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAg
IGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcigwKSk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0aCk7CisgICAg
c3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwID0g
MDsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IGZhbHNlOworICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CiAjZW5kaWYKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25V
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2Vy
IHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVjdG9yLgotICAgIGlmIChpbml0aWFsTGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1
bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gbWF4KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVD
VE9SX0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUo
aW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBp
ZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXpl
LCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0g
c3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5t
X2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlh
bExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAg
bV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKLQotI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5k
ZXggPSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7
Ci0jZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBi
ZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5
OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNw
YXJzZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNw
YXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAg
ICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGks
IGVudHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlm
IChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChh
cnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNp
dHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
OwotICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwg
aSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdh
eXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRo
YXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBl
eHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28g
cmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0
ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgewotICAgICAgICBpZiAo
ZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFz
ZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpT
T2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAg
IAotICAgIGlmICghc2V0dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
LSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAg
ICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCi17Ci0gICAgQWRkUmVz
dWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkg
PSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBm
aW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8v
IEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRo
ZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQg
dGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChtb2RlICE9IFB1
dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXkt
PmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVu
dHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3Qm
IHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFT
U0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkg
ewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigp
OwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0K
LQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6
Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5
OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYg
KExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRl
cigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQot
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4g
Y2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5
TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3Bh
cnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4g
QmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9t
YXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lk
IEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsK
LSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xv
YmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNB
cnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVN
YXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJE
aWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNw
YXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAg
ICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwg
YWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2Ug
Y2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBu
ZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFk
ZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFn
ZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdl
ID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5
KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwot
ICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQg
SlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkq
IGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNj
cmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAg
ZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1
ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nl
c3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9
IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2Ny
aXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIg
PSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNj
cmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3Ig
PSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAg
ICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwot
ICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVj
LT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRy
aWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVm
aW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAg
ICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgp
KSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVy
dHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2lt
aXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5
J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3Bl
cnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJv
bSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Q
cm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBl
bnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRl
cygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRl
c2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQo
bWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkg
bmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAt
PmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRo
ZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAg
ICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwg
dGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVu
c2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAg
ICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQu
aXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNE
ZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBj
cmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3Qg
TyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29u
ZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5
IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNl
bnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVy
dHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVsc2UsIERl
c2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4g
b3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hv
c2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0g
YXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRo
ZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRy
aWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRv
IGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0
V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+
YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBl
bnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywg
ZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0g
bV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBp
bmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUuIFJldHVy
biB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1
cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFu
ZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0
aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhl
IFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJy
ZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5p
c0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkg
ewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVz
ZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1
cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAv
LyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJl
c2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFy
ZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAoZGVzY3Jp
cHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2Ny
aXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElmIElzR2Vu
ZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24g
aXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkg
ewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAg
ICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlmICghY3Vy
cmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBm
b3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5LmIuIElm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9w
ZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0YSBwcm9w
ZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVl
cyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tDb25maWd1
cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9m
IHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVm
YXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRh
dGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVz
IG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51
bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2Yg
dGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAg
ICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRh
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0
cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBm
aWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAg
IC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQg
aXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAg
ICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0g
ICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWpl
Y3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3Jp
cHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFs
dWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
dHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50
LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAg
ICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNz
b3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3Vy
cmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwg
aWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVz
Yy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1
cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWpl
Y3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVl
KERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAh
PSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBh
biB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0
IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0
aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxk
LgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVu
dCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBidXR0ZXJmbHk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0
YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQpAQCAtNTI3LDkgKzc0LDkgQEAgdm9pZCBKU0FycmF5
OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdAogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgp
IHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2Rl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcDsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElz
UmVhZE9ubHkoKTsKIH0KQEAgLTYzMCwzOCArMTc3LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QKICAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1Zh
bHVlXV0gdG8gaW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtb
RGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5n
ICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwg
d2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgotICAg
ICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYg
KGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1
ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9
IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXkt
PmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwor
ICAgIHJldHVybiBhcnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wg
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIs
MTAgKzE5MSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAg
ICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpLCBzbG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4Nywy
NiArMjAyLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0g
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAg
ICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNv
bmQuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7CiB9CiAKQEAgLTcxNCwxMSArMjA5LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAg
ICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUu
dG9VSW50MzIoZXhlYyk7CkBAIC03MzMsMTk2ICsyMjMsOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsK
LQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQot
ICAgIC8vIEZhc3QgY2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBt
X251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
bGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxl
IDJeMzItMSAtIHRoaXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFu
ZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+
IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxk
VGhyb3cpOwotICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRC
eUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2Jq
ZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBp
bmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChp
ID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwot
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxl
IGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBp
ZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5z
aWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVk
IHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0g
ICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsg
MTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVz
aW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBp
ZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7
Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFz
IGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAg
ICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xk
IHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgot
ICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBk
YXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQg
Z3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYg
KG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAg
ICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNp
bmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0g
ICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2Rl
IGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBm
YWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAg
bWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rv
ckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJh
eTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9y
LCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9y
ZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOwotfQotCi1ib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxp
ZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAg
IEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlf
SU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJz
dCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1h
cC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBu
b3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFu
ZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7
Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgot
ICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBp
ICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2lu
Y2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rv
ci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEg
dmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFk
ZCB0aGUgdmFsdWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEo
KSk7Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAt
PnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgbW9kZSk7Ci0gICAgfQotCi0gICAgLy8g
VXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9y
YWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGli
aXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAg
aWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KSB7Ci0gICAgICAgICAgICBp
ZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJ
bmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0
IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0g
aSArIDE7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAg
IC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxs
IHdhbnQgdG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEg
c3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNw
YXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFy
cmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlm
IChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51
bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRh
KCksIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgbW9kZSk7Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VW
ZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0lu
QXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZl
Y3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdl
dE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0g
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBK
U0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkzMCwzNSArMjMz
LDYgQEAgYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbAogICAgIHJldHVy
biBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKIH0KIAotYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICBpZiAoaSA8IHRoaXNPYmplY3Qt
Pm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAg
ICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBp
ZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5h
dHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlz
T2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRp
YyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQog
ewogICAgIHVuc2lnbmVkIGRhID0gKnN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4oYSk7CkBA
IC05NjYsMTI3ICsyNDAsMjYgQEAgc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0
IHZvaQogICAgIHJldHVybiAoZGEgPiBkYikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheSo+KG9iamVjdCk7Ci0gICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJy
YXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCi0gICAgLy8gaXMgaW5jcmVk
aWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFw
cHJvYWNoLAotICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQg
c3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KLQotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkgewotICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1h
cCkgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGtleXM7Ci0gICAgICAgIGtleXMucmVzZXJ2
ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAg
ICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBxc29ydChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXpl
b2YodW5zaWduZWQpLCBjb21wYXJlS2V5c0ZvclFTb3J0KTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKLSAgICB9CiAKICAgICBpZiAo
bW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCh1
bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQotewotICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotCi0gICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3Ro
OwotICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwg
MTAwMDAwVSk7Ci0KLSAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCi0gICAg
ICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7Ci0gICAgZWxzZSBpZiAoIW1fdmVj
dG9yTGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwg
bGFzdEFycmF5U2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVx
dWl2YWxlbnQgdG86Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAq
IDMgKyAxKSAvIDI7Ci0gICAgICAgIC8vIG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0
aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZv
cm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRM
ZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExl
bmd0aCAmIDEpOwotICAgIH0KLQotICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJl
ZExlbmd0aCk7Ci0KLSAgICBsYXN0QXJyYXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklS
U1RfVkVDVE9SX0dST1cpOwotCi0gICAgcmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotfQotCi1ib29sIEpTQXJyYXk6OmluY3JlYXNlVmVjdG9y
TGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQotewot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGlu
Y29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJv
bSBzcGFyc2UgdmFsdWUgbWFwCi0gICAgLy8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRv
IGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRs
eS4KLSAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgQVNT
RVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbmV3VmVjdG9yTGVu
Z3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7Ci0KLSAgICAvLyBGYXN0IGNhc2Ug
LSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2Vz
IHNlbnNlLgotICAgIGlmIChMSUtFTFkoIW1faW5kZXhCaWFzKSkgewotICAgICAgICB2b2lkKiBu
ZXdTdG9yYWdlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZuZXdTdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0
b3JMZW5ndGgpLCBzdG9yYWdlU2l6ZShuZXdWZWN0b3JMZW5ndGgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1N0b3JhZ2UpKTsK
LSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgICAgIEFT
U0VSVChtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLQotICAgICAgICBtX3ZlY3Rvckxlbmd0aCA9
IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0
b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KLSAgICB1
bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBtaW4obV9pbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgLy8gQ2FsY3VsYXRlIG5ldyBz
dG9hcmdlIGNhcGNpdHksIGFsbG93aW5nIHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCi0gICAg
dW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhC
aWFzOwotICAgIHZvaWQqIG5ld0FsbG9jQmFzZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKG5ld1N0b3JhZ2VDYXBhY2l0eSksICZu
ZXdBbGxvY0Jhc2UpKSAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRoZSBzdW0g
b2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3Zl
Y3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotCi0gICAgbV92ZWN0b3JMZW5ndGggPSBuZXdW
ZWN0b3JMZW5ndGg7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgbV9zdG9y
YWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2Fz
dDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwot
Ci0gICAgLy8gQ29weSB0aGUgQXJyYXlTdG9yYWdlIGhlYWRlciAmIGN1cnJlbnQgY29udGVudHMg
b2YgdGhlIHZlY3Rvci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNp
emUodmVjdG9yTGVuZ3RoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBk
YXRlIG1fYWxsb2NCYXNlLgotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jh
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiAv
LyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhlIG5l
dyBzcGFjZSB1bmNsZWFyZWQuCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgLy8gSWYgbm90
LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KLSAgICBBU1NF
UlQoY291bnQgPiBtX2luZGV4Qmlhcyk7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5z
dXJlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6
ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVk
IHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KKyAgICBBU1NFUlQoY291bnQgPiBzdG9yYWdlLT5tX2lu
ZGV4Qmlhcyk7CiAKICAgICAvLyBTdGVwIDE6CiAgICAgLy8gR2F0aGVyIDQga2V5IG1ldHJpY3M6
CkBAIC0xMDk1LDggKzI2OCw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
SlNHbG8KICAgICAvLyAgKiBjdXJyZW50Q2FwYWNpdHkgLSB3aGF0IGlzIHRoZSBjdXJyZW50IHNp
emUgb2YgdGhlIHZlY3RvciwgaW5jbHVkaW5nIGFueSBwcmUtY2FwYWNpdHkuCiAgICAgLy8gICog
ZGVzaXJlZENhcGFjaXR5IC0gaG93IGxhcmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZl
Y3RvciB0byAtIGJhc2VkIG9uIDJ4IHJlcXVpcmVkVmVjdG9yTGVuZ3RoLgogCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihtX3ZlY3Rvckxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWlu
KHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpLCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9y
TGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQg
cmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBpcyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBm
YXNoaW9uLgogICAgIGlmIChjb3VudCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2Vk
VmVjdG9yTGVuZ3RoKQpAQCAtMTEwNCw4ICsyNzcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5zaWduZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGggPSB1
c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7CiAgICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9yTGVuZ3Ro
IDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwogICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0
b3JMZW5ndGggYW5kIG1faW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEguCi0gICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0
aCkgPj0gbV9pbmRleEJpYXMpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IG1fdmVj
dG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7CisgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEggLSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJpYXMp
OworICAgIHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
ICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRlc2ly
ZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxvdywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RILgogICAgIHVuc2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILCBtYXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rv
ckxlbmd0aCkgPDwgMSk7CiAKQEAgLTExMTYsMTAgKzI4OSwxMSBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5
OwogICAgIC8vIElmIHRoZSBjdXJyZW50IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxh
cmdlIChidXQgbm90IHRvbyBsYXJnZSEpIHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgogICAgIGlm
IChjdXJyZW50Q2FwYWNpdHkgPiBkZXNpcmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihjdXJyZW50Q2FwYWNpdHksIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICBu
ZXdBbGxvY0Jhc2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKKyAgICAgICAgbmV3QWxsb2NCYXNl
ID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSgpKTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFj
aXR5ID0gY3VycmVudENhcGFjaXR5OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShkZXNpcmVkQ2FwYWNpdHkp
LCAmbmV3QWxsb2NCYXNlKSkKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
ZGVzaXJlZENhcGFjaXR5KSk7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShuZXdTaXplLCAmbmV3QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAg
IH0KQEAgLTExMzIsNDUgKzMwNiw0MCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKEpTR2xvCiAgICAgLy8gSWYgaXQgZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3VudCB0aGF0
IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFuIGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQogICAgIC8v
IHZlY3RvciB3aXRoIGhhbGYgdGhlIHBvc3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3VzbHkuCiAg
ICAgdW5zaWduZWQgcG9zdENhcGFjaXR5ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgbV92ZWN0b3JM
ZW5ndGgpIHsKKyAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAg
ICAgICAgLy8gQXRvbWljIGRlY2F5LCArIHRoZSBwb3N0LWNhcGFjaXR5IGNhbm5vdCBiZSBncmVh
dGVyIHRoYW4gd2hhdCBpcyBhdmFpbGFibGUuCi0gICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigo
bV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVp
cmVkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWly
ZWRWZWN0b3JMZW5ndGgpOwogICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0
aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVj
ZWQuCi0gICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jhc2Ug
fHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpOwotICAgIH0KLQotICAg
IG1fdmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7Ci0g
ICAgbV9pbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0aDsKLSAg
ICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVy
cHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4
Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6Ci0gICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVy
IGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55
IG9sZCBhbGxvY2F0aW9uLgotCi0gICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4g
dGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0
YQotICAgIC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1
Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZSht
X3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9z
dG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWlu
ZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1
cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdB
bGxvY0Jhc2U7CisgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNl
KHN0cnVjdHVyZSgpKSB8fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAt
IGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJl
cXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4
QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIG5l
d0luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgbWVtbW92ZShuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rv
ciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShuZXdC
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0
eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDAp
KTsKKyAgICAKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1
dHRlcmZseTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3Rl
bmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlz
IHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhl
IGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFy
c2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5t
X3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFy
c2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdy
aXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTE5Nyw3ICszNjYsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBk
ZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgbWFwLT5yZW1vdmUoaXQpOwpAQCAtMTIwNiwxNCArMzc1LDE0IEBAIGJvb2wgSlNBcnJh
eTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbWFw
LT5yZW1vdmUoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+aXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAvLyBE
ZWxldGUgcHJvcGVydGllcyBmcm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2
YWx1ZVNsb3Q7CkBAIC0xMjIyLDUzICszOTEsNjUgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBuZXdMZW5ndGg7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7CiAKLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIAotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKSB7
Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAg
ICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5zaWduZWQgaW5k
ZXggPSBsZW5ndGggLSAxOwotICAgIGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aW5kZXhdOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1
ZVNsb3QuZ2V0KCk7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoaW5kZXggPCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07CisgICAgICAgICAgICBpZiAodmFsdWVT
bG90KSB7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0
aCA9IGluZGV4OwotICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUo
KSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIExl
dCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0gICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0
KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwg
bWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBpZiAoIWRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBp
bmR4LgorICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgorICAgICAgICBpZiAoIWRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tQdXRd
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5k
IHRydWUuCisgICAgICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7CisgICAgICAgIC8v
IFJldHVybiBlbGVtZW50LgorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAg
ICB9Ci0gICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFy
Z3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4ZWMsIGlu
ZGV4LCB0cnVlKTsKLSAgICAvLyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxt
b3N0IGlkZW50aWNhbCwgd2l0aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc2LDYzICs0
NTcsNzcgQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVz
aGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1
dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHB1c2gg
d2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0
b3IuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGxl
bmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0
aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGxlbmd0aCArIDE7Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIDAsIHZhbHVlLCB0
cnVlLCBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAg
ICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKIAotICAgIC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzIt
MSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYg
KFVOTElLRUxZKHN0b3JhZ2UtPm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBt
ZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2
YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40
LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBh
cnJheSBsZW5ndGgiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIEZhc3Qg
Y2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVt
VmFsdWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCAr
IDEpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAg
ICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMy
LTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAg
ICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAg
ICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxl
bmd0aCgpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcg
c3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFs
dWUsIHRydWUpOwotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFuZGxlZCB0
aGUgc2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBz
dG9yYWdlKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgCi0g
ICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQg
b2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5
IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAg
ICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlm
IChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1v
ZGUoKSkKKyAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
fHwgaW5TcGFyc2VJbmRleGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFvbGRMZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0g
Y291bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAK
LSAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JM
ZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBj
b3VudCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAg
ICAgICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNv
dW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciog
bmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5l
d0Jhc2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0
b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFn
ZSk7Ci0KLSAgICAgICAgICAgIG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBpZiAodmVj
dG9yTGVuZ3RoKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlm
dChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNv
dW50OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTM0MSw1OSArNTM2
LDMwIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2su
ICAgIAogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBjb3VudCkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkg
Y29udGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAg
IC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYg
KGxlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgp
KQorICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9y
YWdlLT5pblNwYXJzZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
aW5kZXhCaWFzID49IGNvdW50KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAg
ICAgICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3Jh
Z2UpIC0gY291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVt
bW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBt
X3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3Rv
cmFnZSk7Ci0gICAgICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdl
LT5tX2luZGV4QmlhcyA+PSBjb3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50
U2xvd0Nhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNs
ZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0
dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
V2l0aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhp
c09iamVjdC0+bV9zdG9yYWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAi
LCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0
b3JhZ2UtPm1fYWxsb2NCYXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1f
dmVjdG9yLT5zbG90KCksIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBp
ZiAoYmFzZVN0b3JhZ2UgIT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewot
ICAgICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
QXJyYXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihK
U1ZhbHVlKSAqIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3Nw
YXJzZVZhbHVlTWFwKQotICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0K
IHN0YXRpYyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2
b2lkKiBiKQogewogICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihh
KS0+YXNOdW1iZXIoKTsKQEAgLTE0MTAsMTEyICs1NzYsMTM3IEBAIHN0YXRpYyBpbnQgY29tcGFy
ZUJ5U3RyaW5nUGFpckZvclFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwg
Y29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkp
OwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAg
IGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBib29sIGFs
bFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAg
ICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERh
dGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTs7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAp
IHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBi
b29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAgIHJldHVy
biBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFz
b3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBkb24ndCBy
ZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2li
bGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1
YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNp
emUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0
KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICghYWxs
VmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNv
biwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAg
IC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJl
J3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUg
b3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5tX3Zl
Y3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJz
Rm9yUVNvcnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7
CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNTRVJU
KCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmICht
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQg
dmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBm
cm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFi
bGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdo
IGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0
aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9t
IHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNl
IGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGlu
Y29uc2lzdGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVhcDo6aGVh
cCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNV
bmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBp
c1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFs
dWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBs
b29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4g
YWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKysp
Ci0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJ
bmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5n
IHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRo
YXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252
ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28g
d2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAv
LyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2Ug
cGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAg
ICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBp
ZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgor
ICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2
ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZh
bHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2Vx
dWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2Vz
IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0u
c2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNv
cnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJh
ZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4g
bG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAg
cXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAv
LyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBh
IHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBz
dGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNv
cnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBG
SVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0
YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEg
c3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBz
b3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9m
KFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYK
LQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGgg
dG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmICht
X3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3Jp
Z25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5m
aXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0K
IAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTcsMjUzICs3ODgs
MjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBK
U0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENh
bGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJU
KCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBj
b21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAg
IC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5t
X2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5n
dGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9y
TGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAw
KTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVl
PEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQg
aXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0g
ZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVG
dW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxU
eXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRh
OwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9u
IG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlm
aWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcg
dGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2ln
bmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBp
Z25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNl
cnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5l
ZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYg
fHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmlu
c2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMg
ZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIu
CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVk
IGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8v
IGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxl
bmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5z
aWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1h
cCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
QVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERl
cHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5j
dGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21w
YXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21w
YXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBh
ZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVG
dW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2
ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQg
ZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51
bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFy
cmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFu
ZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFs
dWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0g
ICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51
bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXApIHsKKyAgICAgICAgICAgIG5l
d1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJn
ZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAgaWYgKChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52
YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVm
aW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rp
b24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBi
ZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAgICAgICAg
CisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9y
IGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0K
LSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAgLy8gUHV0
IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
RGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsK
KyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFT
U0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQot
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRo
ZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRv
IG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQ
dXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQg
dmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lz
dGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+
bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5n
dGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsr
aSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkp
OwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9y
ICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBt
aW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwg
dmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9
IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNh
bGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNB
cnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAg
IEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwor
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBudW1E
ZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAg
IGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4g
MDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsK
KyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVk
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0g
ICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0
aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
KytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
LQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
LSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmlu
ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5n
dGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAg
IHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQot
dm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUp
Ci17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJU
KCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9y
YWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNT
RVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9y
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkg
ewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAg
ICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAg
ICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0
IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVj
aykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBu
dW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAgICAgICBu
ZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFy
Z2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAg
ICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlm
ICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5l
d1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5W
ZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZh
bHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZh
bHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsK
LSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25k
KTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQot
ICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVk
KCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAg
ICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShy
ZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQyICsy
MSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNsdWRl
ICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZW51bSBQdXREaXJlY3RJbmRleE1vZGUgeyBQ
dXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cs
IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsKLQotICAgIHN0cnVjdCBTcGFyc2VBcnJheUVu
dHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYgV3Jp
dGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDog
YXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJy
YXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAg
ICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVl
IGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWlu
dDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1h
cDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAg
ICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAy
LAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0
b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9ybWFs
KQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAgICAg
ICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxh
Z3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VNb2Rl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGxlbmd0aElz
UmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0
aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9u
bHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+
KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRo
ZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAgICAgICB2
b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5Kiwg
dW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSk7Ci0gICAgICAgIEFkZFJlc3Vs
dCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25l
ZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFT
U0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4K
LSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQot
ICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0g
ICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhl
IG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsg
fQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7
IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21h
cC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVy
YXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAg
ICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5Owot
ICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVz
IG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQg
QXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8g
YWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9y
YWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50
IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2Ug
dGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24u
ICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAg
ICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAg
ICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRo
ZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8g
YmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIg
ZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0j
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50
cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlh
bGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVj
dG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1W
YWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7
IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xh
c3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxp
Y2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgw
KQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpT
QXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShK
U0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0
cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFy
cmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5LDI2ICs1NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAg
ICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2Rz
OgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAg
ICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyAgLSBpdCB3
aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQdXRE
aXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBtb2RlICh0aGUgZGVmYXVs
dCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJp
YnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRy
dWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlID0g
UHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
Y2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgbW9kZSk7
Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVzZSBv
biBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4K
ICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhyb3dF
eGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIwMiwxNDIgKzc1LDg0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwog
ICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAK
LSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0
b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJ
bmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyBy
ZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0g
ICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNl
cXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVt
VmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVj
ayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHBy
b3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkg
PCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQg
Y29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3Bl
cnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3
TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBw
cm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAg
ICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAg
JiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29w
eVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZz
ZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJy
YXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZl
Y3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERh
dGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7
CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8o
KTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcDsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9u
bHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0
YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0gICAgICAgIHZvaWQgcHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNj
cmlwdG9yJiBvbGQpOwotICAgICAgICBib29sIGRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVj
U3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlv
bik7Ci0gICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJik7Ci0gICAg
ICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCi0gICAgICAgIHZvaWQgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlKTsKLQotICAgICAgICB1bnNp
Z25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAg
IGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVu
Z3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29y
dGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9OwogCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lD
aGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92
ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNW
YWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9y
YWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFs
dWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOworICAgIGlubGluZSBCdXR0ZXJmbHkqIGNy
ZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5p
dGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcCA9IDA7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9
IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBw
dHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBp
bmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRl
eEJpYXMpOyB9Ci0gICAgfTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5E
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0
ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERh
dGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
ICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBh
cnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBK
U0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5
RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOwor
ICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4s
IGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAg
dm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsK
KyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+
bV9zcGFyc2VNYXAgPSAwOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxE
YXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAg
ICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4g
YXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1Niwz
MCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpT
Q2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5m
bzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXND
ZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9m
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9u
IHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNh
bGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1h
eGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUg
dXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJh
bmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNk
ZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0Vf
VkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUg
c2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5l
ZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBj
YWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVv
ZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNz
ZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9u
IChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NF
UlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0
aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAg
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAko
cmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgp
OyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAg
ICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAg
ICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5s
ZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkp
KTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkK
ICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
YwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
IFN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQot
CisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUq
IHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRH
ZXQoKTsgfQogI2VuZGlmCkBAIC0xNjAsNiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5j
dGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0
YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19B
U1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7
CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
SlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
Cit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0
RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAt
MzI4LDcgKzMyOCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08K
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7
CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBK
U0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MTgsOCArNTE4LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmRO
ZXh0UHJvcAogICAgIGlmIChtX2lzQXJyYXkpIHsKICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZS4K
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAgaWYgKG1faXNKU0FycmF5ICYmIGFzQXJy
YXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgICAgICB2YWx1
ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleChpbmRleCk7CisgICAgICAgIGlm
IChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGluZGV4KSkKKyAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5nZXQoKSkt
PmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFtX29iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVjdC5nZXQo
KSwgZXhlYywgaW5kZXgsIHNsb3QpKQpAQCAtNjg0LDggKzY4NCw4IEBAIE5FVkVSX0lOTElORSBK
U1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFj
ay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2Fu
R2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdl
dEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaW5W
YWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFycmF5LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4LCBzbG90KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmlj
QHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDEwICsyNCwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMuaCIKQEAgLTM4LDEyICs0MCwxOSBAQAog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIK
ICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgogI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9m
IHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0
aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRo
ZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhl
IGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWdu
ZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpT
Q2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSgpOwpAQCAtODYsMjkgKzk1LDgwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3Bl
cnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRP
dXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgQVNTRVJU
KHN0b3JhZ2VTaXplKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIHNpemVfdCBjYXBh
Y2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBh
Y2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9y
YWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVz
KSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3Rv
cmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1
cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9
IHN0b3JhZ2UgLSAxOworICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAg
aWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9
IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0
ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMu
CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2Ug
PSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAg
ICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsK
ICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0
b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAg
ICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbSgqYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291
cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZh
bHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hp
bGRyZW4odmlzaXRvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZs
eTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3Rv
cmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFy
cmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkK
KyAgICAgICAgICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBK
U09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQpAQCAtMTIyLDkgKzE4Miw5IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGlu
ZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRP
dXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkp
CisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2Jq
ZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOwpAQCAtMTQyLDkgKzIwMiw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9m
TGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlz
aXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkp
CisgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0
KCkpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
PmlubGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXModGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAg
KzIyMSw1MCBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjCiAgICAg
cmV0dXJuIGluZm8tPmNsYXNzTmFtZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUg
ZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBp
cyBub3QKKyAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5
U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCisgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCgpLgorICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHBy
b3BlcnR5TmFtZSksIHNsb3QpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQor
ICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwor
ICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7Cisg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
KTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBFQ01BIDguNi4y
LjIKQEAgLTE3NCw2ICsyNzQsMTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YQogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAg
Ly8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAg
ICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIENoZWNrIGlmIHRoZXJl
IGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KICAgICBK
U1ZhbHVlIHByb3RvdHlwZTsKQEAgLTIzNSw5ICszNDIsMTQ2IEBAIHZvaWQgSlNPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQogewotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNo
b3VsZFRocm93KTsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsK
KyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBp
ZiAoVU5MSUtFTFkocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUg
bGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0eU5h
bWUgKyAxOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSBpZiAo
IXZhbHVlU2xvdCkKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgCisgICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
T2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVj
dC0+cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzaG91bGRUaHJvdyk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KCk7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9
IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFy
c2VNb2RlKCkpCisgICAgICAgIHJldHVybiBzdG9yYWdlOworCisgICAgbWFwLT5zZXRTcGFyc2VN
b2RlKCk7CisKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFn
ZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFs
d2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNh
biB3cml0ZSwKKyAgICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVl
ZCB0byBzZXQgdGhlbS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQo
dGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwor
ICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5
KCktPnJlc2l6ZUFycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOwor
ICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXAgPSBtYXA7CisgICAgCisgICAgcmV0dXJuIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0
YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAgSW5kZXhpbmdU
eXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAgQVNTRVJUX1VO
VVNFRChvbGRUeXBlLCBvbGRUeXBlID09IE5vbkFycmF5IHx8IG9sZFR5cGUgPT0gQXJyYXkpOwor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0
KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVj
dG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENSQVNIKCk7Cisg
ICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgIEFTU0VSVCghcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQtPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+
c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcCA9
IDA7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAg
ICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIHNldEJ1
dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFy
cmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJl
dHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4
aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAK
KyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgY3JlYXRlQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAt
PnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Vmly
dHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0zMDQsNiAr
NTQ4LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXgKIGJvb2wg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5zdGF0
aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVu
Y3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1ODAsNDUgQEAgYm9vbCBKU09iamVj
dDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgCisg
ICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAg
ICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwKSB7CisgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAg
ICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Y2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3NDgsNTEgQEAg
dm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
eworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBi
ZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0
eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAgICAvLyBp
cyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZm
ZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRjaCAob2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcCkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOworICAg
ICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNv
bmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAga2V5cy5hcHBl
bmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgp
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
Yywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0lu
Zm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVk
KCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkBAIC01MTUs
OCArODQzLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2
b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0aGlzKS0+ZW50
ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAgICAgICBzZXRT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArOTAwLDExIEBAIGJv
b2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qo
UHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbikK
K05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChKU09iamVj
dCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0
ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRl
cihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVH
ZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlv
bikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRl
ckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90LnNldEdl
dHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2ICs5MzAsNTM1
IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAgICByZXR1cm4g
aW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGlu
ZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewotICAgIEFT
U0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAgICAgICAgICBl
bnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVl
KCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vz
c29yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKKyAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgZ2V0dGVyID0g
ZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3Jp
cHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7CisgICAg
ICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKKyAgICAgICAgICAgIHNldHRlciA9
IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2Ny
aXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisKKyAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9
IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOworICAgICAgICBpZiAoZ2V0dGVyKQorICAgICAg
ICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Cisg
ICAgICAgIGlmIChzZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKKworICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKSAmIH5SZWFkT25seTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7CisgICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpOworfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCBy
ZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRk
bGUgb2YgYSB0cmFuc2l0aW9uLgorLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNP
YmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRp
b24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAgaWYgKCFpblNw
YXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGlu
ZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJWE1F
OiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJl
IG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAgLy8gaG93ZXZl
ciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2ls
bCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8vIHN0YXRlIChp
LmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91
dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlmICghZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0Fj
Y2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVj
dEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKworICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXA7CisgICAgQVNTRVJUKG1hcCk7CisKKyAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1
bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOworICAgIFNwYXJzZUFycmF5RW50cnkq
IGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyAyLiBMZXQg
ZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHBy
b3BlcnR5IG9mIE8uCisgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVu
c2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgorICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5k
ZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KKyAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgbWFw
LT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmpl
Y3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDQu
YS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2Mp
IGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5CisgICAgICAgIC8vIG5h
bWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVy
YWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKKyAgICAgICAgLy8g
YXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxk
IG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQorICAgICAgICAv
LyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAg
Ly8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRv
ciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCisgICAgICAg
IC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBb
W0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQorICAgICAg
ICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMg
YWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5CisgICAg
ICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5jLiBSZXR1
cm4gdHJ1ZS4KKworICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7CisgICAgICAg
IGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFk
T25seTsKKyAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKKworICAgICAgICBwdXRJ
bmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7
CisgICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0
aCgpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgo
aW5kZXggKyAxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gNS4gUmV0
dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgorICAgIC8vIDYuIFJl
dHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQg
YW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFz
IHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0
aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1
cnJlbnQ7CisgICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOworICAgIGlmIChkZXNjcmlwdG9y
LmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZSB0aGVuCisgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgp
KSB7CisgICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVBy
ZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZp
Z3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
IC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2Mg
YXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCisgICAgICAgIGlmIChkZXNj
cmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVz
Y3JpcHRvci5lbnVtZXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUg
b2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgfQorCisgICAgLy8gOC4gSWYgSXNH
ZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlv
biBpcyByZXF1aXJlZC4KKyAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigp
KSB7CisgICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5k
IElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgorICAg
ICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFE
ZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNt
IGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIC8vIDkuYi4g
SWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHBy
b3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCisgICAgICAgICAgICAvLyBkYXRhIHBy
b3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFs
dWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncworICAgICAgICAgICAgLy8gW1tDb25maWd1
cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9m
IHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8KKyAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1
bHQgdmFsdWVzLgorICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0
eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRh
IHByb3BlcnR5LgorICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBv
ZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJh
YmxlXV0KKyAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUg
cHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICB9
IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRh
RGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3Jp
cHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0
aGVuCisgICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEw
LmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICAg
ICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3
cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlm
IHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVz
Yy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52
YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2Yg
YSByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEw
LmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwg
c28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRl
clByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7CisgICAgICAgICAgICAvLyAx
MS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNj
cmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhl
IFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1Nl
dF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNj
cmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQu
c2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlm
IHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2Mu
W1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAo
ZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJy
ZW50LmdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHBy
ZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJv
cGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAg
IHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJl
bnQpOworICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBKU09iamVjdDo6ZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKQoreworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgdGhpc09iamVj
dC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsK
KyAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKK30KKworU3BhcnNl
QXJyYXlWYWx1ZU1hcCogSlNPYmplY3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5l
dyBTcGFyc2VBcnJheVZhbHVlTWFwOworICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIo
dGhpcywgZmluYWxpemVBcnJheURhdGEpOworICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cCA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpTT2JqZWN0OjpkZWFs
bG9jYXRlU3BhcnNlSW5kZXhNYXAoKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGRlbGV0ZSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1h
cCA9IDA7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hv
dWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50
IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChp
ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcDsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFBy
b3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSAwOworICAgIC8vIEZpcnN0LCBoYW5k
bGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAg
IGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRl
bnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0
ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAK
KyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSAr
IDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUg
dXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAg
IGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkp
IHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBo
YXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAg
ICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJh
IHRlbXAgaGVyZSB0byBzbGFrZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3
aG8gZGVyZWZlcmVuY2UgdHlwZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5l
d1Byb3BlcnR5U3RvcmFnZTsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2Uoc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXAp
KQotICAgICAgICBDUkFTSCgpOwotICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0
PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBuZXdTaXplICsgMTsKKyAgICAvLyBVcGRhdGUgbV9s
ZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5n
IHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5s
ZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1h
cCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBX
ZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0
LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgor
ICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVj
dG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1
dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0
aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5
OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3Is
IGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2
ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8g
U3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJh
eSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsK
KyAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgeworICAgICAgICAgICAgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVh
dGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAs
IGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4
TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2
YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgor
ICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA8
PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3Rv
cmFnZS0+bV9zcGFyc2VNYXA7CisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXAp
KSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxk
IGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAu
CisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1By
b3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXpl
IC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAg
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsK
KworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5n
IGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAo
TElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Cisg
ICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxp
a2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAg
ICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3Ig
dG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2
YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxE
YXRhKCkpOworICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFs
dWUsIG1vZGUpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nhcnku
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0g
bGVuZ3RoKSB7CisgICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVj
dCkgeworICAgICAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3Ro
IGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHko
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0
SW5kZXhTaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0
aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4i
KTsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFn
ZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwor
CisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBk
YXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOwor
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisg
ICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBk
ZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3Jb
aXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUg
dGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKK3sKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBp
IHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3Vy
cmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJz
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAg
ICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIG1vZGUsIGNyZWF0ZUFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIAorICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdl
dE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIG1vZGUsIGFycmF5U3RvcmFnZSgpKTsKKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNP
YmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1
bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFT
U0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAg
dW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBz
dGQ6Om1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3Ro
IDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0
aDsKKyAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2Vk
TGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8v
IG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xl
bmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVy
bmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsg
KGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOworICAgIH0KKworICAg
IEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJy
YXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisK
KyAgICByZXR1cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVj
dG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJh
eToKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4g
Z2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsK
K30KKworYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBs
ZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNh
dXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAg
ICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVj
YXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChuZXdMZW5ndGgg
PiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVk
IGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2
ZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rv
ckxlbmd0aChuZXdMZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJl
Y2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAo
TElLRUxZKCFpbmRleEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JM
ZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFJlbW92ZSBzb21l
LCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQg
dG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMg
PSBzdGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5l
d1ZlY3Rvckxlbmd0aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5i
dXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsCisgICAgICAgIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZs
eTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3
VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4
QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3ko
Q29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisK
KyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hl
Y2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWdu
ZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNv
bnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8g
TGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAg
ICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChp
ID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAg
IEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOwor
CisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZh
bHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwor
ICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0g
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRo
ZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8v
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRP
ZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIGZvciB0aGUgcHJvcGVydHkKKyAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2
ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAs
MTAgKzE0NjYsNDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0
cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChvYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVl
LmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcCkgewor
ICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3Ip
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTY4Nyw2ICsx
NTU5LDE1IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgdW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGFzSW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICBwdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBlbHNlCisgICAg
ICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGFzSW5kZXgsIHZhbHVlKTsKK30KKwogY2xhc3MgRGVm
aW5lT3duUHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29w
ZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC03MDQsMjYgKzE1ODUsMjYgQEAgcHJpdmF0ZToKICAgICBK
U0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBUcmFjayBvbiB0
aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJy
ZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMg
d2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBj
aGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZp
Z3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRl
ZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAgICAg
RGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAgIC8vIElmIHdl
IGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
Y3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAgICAgIC8vIHVu
bGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2JqZWN0LT5pc0V4
dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAg
ICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9i
amVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb2xkRGVzY3JpcHRvcjsK
ICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
cmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CiAgICAgfQogCiAgICAgaWYg
KGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE2MzAsOCBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8gQSBnZW5lcmljIGRlc2NyaXB0b3Ig
aXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5
CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlm
ICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsKLSAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIG1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03NjIsOCArMTY0Myw4
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
IikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRv
cihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAv
LyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVy
dHkKQEAgLTc4NCw4ICsxNjY1LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChk
ZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVj
LCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9mIGFu
IGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY4Myw3IEBAIGJvb2wgSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2JqZWN0LT5nZXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgYWNj
ZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgxMiwxMiArMTY5
MywzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAg
IGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0
b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVuc2ln
bmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVu
dCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJl
Y3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVy
LCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwg
dGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRl
eCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAg
ICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVz
Yy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZh
dWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBw
YXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlz
IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVl
LgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywg
aW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAg
ICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3Qp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDE3ICsyNCwyMiBAQAogI2RlZmluZSBKU09iamVjdF9oCiAKICNpbmNsdWRlICJBcmdMaXN0
LmgiCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFn
ZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAiUHJv
cGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCiAjaW5jbHVk
ZSAiUHV0UHJvcGVydHlTbG90LmgiCiAKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4NCwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJv
cGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5v
bmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAg
Q09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51
bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChE
b250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19G
aXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJp
YnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBj
bGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxs
IHsKQEAgLTk2LDYgKzEwOCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAg
ICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQg
ZmluYWxpemVBcnJheURhdGEoSlNDZWxsKiBjZWxsKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
QEAgLTEyMCwxMyArMTM0LDE4NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFs
bG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlM
ZW5ndGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9y
TGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBj
YXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhl
IHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29y
cyBhcmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJp
bGl0eSBhbmQgcmVhZC1vbmx5IHByb3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGly
ZWN0IGlzIHBhc3NlZCBhcyB0aGUgbW9kZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAvLyBUaGlz
IG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVt
ZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1
dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSA9IFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNhblNldEluZGV4UXVpY2tseShw
cm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgbW9kZSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBBIG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBh
bmQgcHV0RGlyZWN0SW5kZXguCisgICAgICAgIHZvaWQgcHV0RGlyZWN0TWF5QmVJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBi
b29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAg
ICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHgu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5j
ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1f
bnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAg
Ly8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJl
ciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2ln
bmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVk
IGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAg
IFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5l
d0xlbmd0aCwgbmV3TGVuZ3RoID09IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBv
ZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1v
ZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5n
TW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZl
bHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAv
LyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKICAgICAgICAgLy8gIC0g
YWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgogICAgICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwg
YmUgcmVzcGVjdGVkIChhZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRo
IHRoZSBnaXZlbiBhdHRyaWJ1dGVzKQorICAgICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBp
cyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZvaWQgcHV0
RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcyA9IDApOwogICAgICAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTQ3LDYgKzMzNSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBo
YXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90
eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBKU1ZhbHVl
IHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZl
cmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM5MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7
IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7
IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBt
X2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1f
YnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRP
ZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDE5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdl
KCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAgICAgICAg
IHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2NSwyMSArNDU3LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzU2VhbGVkKGdsb2JhbERhdGEpOyB9
CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KICAgICAgICAgYm9vbCBpc0V4
dGVuc2libGUoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0KKyAgICAg
ICAgYm9vbCBpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICFpc0V4dGVuc2libGUoKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLmludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8oKTsKKyAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc3RhdGljRnVuY3Rpb25z
UmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCk7
IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVjU3RhdGUq
IGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFnZSBncm93
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
QnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShKU0dsb2Jh
bERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9iYWJseSBk
b24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1bnNpZ25l
ZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
IAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAgIH0KLQogICAg
ICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0aW9uYXJ5
U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ4NiwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYnV0dGVy
Zmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU09iamVjdCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZt
X2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMxNiwxNCArNTE4LDc4IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMgeW91IGxpa2VseSB3YW50
IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAgICAgICAvLyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBl
cyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cuCi0gICAgICAgIEpTT2Jq
ZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU09iamVjdChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAgICAgICB2
b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7
CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5tX2luaGVy
aXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNpdE91dE9m
TGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJm
bHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ug
a25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQorICAg
ICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBh
Y3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3QgaXMgaW4gYSBt
b2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0b3JhZ2UqIGFy
cmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhl
IG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQorICAg
ICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhhdCB3b3Vs
ZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVydGVkIHRv
IGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAgICAgLy8gYWxy
ZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFycmF5U3Rv
cmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisKKyAgICAgICAgZW51bSBDb25zaXN0ZW5jeUNoZWNr
VHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNr
LCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5DWQor
ICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlw
ZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0
ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSopOworCisg
ICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQg
bmV3TGVuZ3RoKTsKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKyAg
ICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQs
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYpOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKQEAgLTMzNiwxNyArNjAyLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGlz
T2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCisgICAgICAgIEFy
cmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIAogICAg
ICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERpcmVjdEludGVybmFsKEpT
R2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJv
cGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYsIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBmaW5kUHJv
cGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAg
U3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlF
bnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dERpcmVj
dEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JM
ZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0
aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRp
ZgogICAgIH07CkBAIC0zNzIsOCArNjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAg
OiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9u
RmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAg
LTQ1NiwxMSArNzM4LDYgQEAgaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9y
YWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGlu
ZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBj
b25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xv
YmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzY4LDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0
Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCku
dHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFn
ZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
aWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQor
ICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICYmICFoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3Rv
cmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJm
bHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MTYs
OSBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJu
IGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5l
IEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywg
MCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NjYs
MTcgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RM
b2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlz
R2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3Qs
IGxvY2F0aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9m
ZnNldChvZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24o
bG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNl
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxh
cmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NjIsNyBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVl
KTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYg
QWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJl
KCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OwpAQCAtNzEyLDExICs5OTEsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJs
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0
cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAK
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICsxMDA5LDEzIEBAIGlubGlu
ZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUo
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgp
OyAKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAg
ICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
Ci0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
Y3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0
KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHBy
b3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRs
eSBjYWNoYWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJs
ZSBzdGF0ZS4KQEAgLTgwMyw5ICsxMDgyLDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0
cnVjdHVyZUFuZFJlYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5
U3RvcmFnZSBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0
YSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAg
c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUp
OworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUpCkBAIC04MzksMTEgKzExMTgsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
LSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2Ug
PSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBh
Y2l0eSgpKTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3Ry
dWN0dXJlKCkpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0
cnVjdHVyZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1
ZSk7CiB9CiAKQEAgLTkzNSw2ICsxMjE0LDExIEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVn
aXN0ZXI6OndpdGhDYWwKICAgICByZXR1cm4gcjsKIH0KIAoraW5saW5lIHNpemVfdCBvZmZzZXRJ
bkJ1dHRlcmZseShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9y
YWdlKCk7Cit9CisKIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHBhdGNoaW5nIGNvZGUgd2hlcmUg
eW91IHdhbnQgdG8gZW1pdCBhIGxvYWQgb3Igc3RvcmUgYW5kCiAvLyB0aGUgYmFzZSBpczoKIC8v
IEZvciBpbmxpbmUgb2Zmc2V0czogYSBwb2ludGVyIHRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdl
IHBvaW50ZXIuCkBAIC05NDIsMTQgKzEyMjYsMTQgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBS
ZWdpc3Rlcjo6d2l0aENhbAogaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNl
dChvZmZzZXQpKQotICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkg
KyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAt
OTU3LDcgKzEyNDEsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlP
CiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAog
ICAgIGlmIChvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzKCkpCiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgIAorICAg
IGlmIChoYXNJbmRleGluZ0hlYWRlcihvLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQor
ICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICAKICAgICBzaXplX3Qg
Y291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBvKTsKICAgICBTdHJ1Y3R1cmVD
aGFpbiogc3RydWN0dXJlQ2hhaW4gPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNo
YWluLT5oZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+
ZW5kKCk7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3du
UHJvcGVydHkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
aXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGly
ZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VS
VCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
SW5mby5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlID0gMSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50
UmVjb3JkID0gMSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgSW50ZXJzZWN0c092ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3Mg
VHlwZUluZm8gewogICAgIHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1Nl
dE9uRmxhZ3MxKE92ZXJyaWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QpOyB9CisgICAgICAgIGJvb2wgaW50ZXJzZWN0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczEoSW50ZXJzZWN0c092ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVu
KTsgfQotICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAg
IGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25G
bGFnczIoT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZyk7IH0KIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zm
c2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1
ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJMZXhlci5oIgpAQCAtNjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQ
YXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IERvUGFyc2VPYmplY3RFbmRFeHByZXNzaW9uOgogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2Jh
bERhdGEoKSwgaWRlbnRpZmllclN0YWNrLmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAg
ICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgp
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAg
ICAgICAgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAg
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0
KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xl
eGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NyArMTE4LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewog
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0
KG9mZnNldCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBm
aXJzdE91dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6
ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0
b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKwor
I2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0
SW5kZXhNb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQdXREaXJlY3RJ
bmRleE1vZGVfaAorI2RlZmluZSBQdXREaXJlY3RJbmRleE1vZGVfaAorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBQdXREaXJlY3RJbmRleE1vZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJl
Y3QsIFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhy
b3cgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXREaXJlY3RJbmRleE1v
ZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE1hdGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDE1ICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1h
dGNoZXNBcnJheS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2lu
Y2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCisKIG5hbWVzcGFjZSBK
U0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4cE1hdGNoZXNBcnJheSk7CiAK
IGNvbnN0IENsYXNzSW5mbyBSZWdFeHBNYXRjaGVzQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAm
SlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJlZ0V4cE1hdGNoZXNB
cnJheSl9OwogCitSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3Vs
dCByZXN1bHQpCisgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhw
TWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIGJ1dHRlcmZseSkKKyAgICAsIG1fcmVzdWx0KHJlc3Vs
dCkKKyAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCit7CisgICAgbV9pbnB1dC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgaW5wdXQpOworICAgIG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBy
ZWdFeHApOworfQorCitSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0
Y2hSZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOworICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIHJlZ0V4cC0+bnVtU3VicGF0
dGVybnMoKSArIDEpOworICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJl
Z0V4cE1hdGNoZXNBcnJheShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAgICBhcnJheS0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCiB2b2lkIFJlZ0V4cE1h
dGNoZXNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1fcmVnRXhwLT5udW1TdWJwYXR0
ZXJucygpICsgMSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiB9CiAK
IHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDI4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4
cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBS
ZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJl
c3VsdCByZXN1bHQpCi0gICAgICAgICAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICwgbV9yZXN1
bHQocmVzdWx0KQotICAgICAgICAgICAgLCBtX3N0YXRlKFJlaWZpZWROb25lKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7Ci0gICAg
ICAgICAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKLSAgICAgICAg
fQorICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5Kiwg
SlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKIAogICAg
ICAgICBlbnVtIFJlaWZpZWRTdGF0ZSB7IFJlaWZpZWROb25lLCBSZWlmaWVkTWF0Y2gsIFJlaWZp
ZWRBbGwgfTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAK
LSAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAgICAgICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIFJl
Z0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdF
eHBNYXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1hdGNoZXNBcnJheShnbG9i
YWxEYXRhLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIFJlZ0V4cE1h
dGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hS
ZXN1bHQpOwogCiAgICAgICAgIEpTU3RyaW5nKiBsZWZ0Q29udGV4dChFeGVjU3RhdGUqKTsKICAg
ICAgICAgSlNTdHJpbmcqIHJpZ2h0Q29udGV4dChFeGVjU3RhdGUqKTsKQEAgLTU4LDcgKzQ0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisj
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAt
MTEzLDExICsxMTUsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUmVqZWN0X2gKKyNkZWZpbmUgUmVqZWN0X2gKKworI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitp
bmxpbmUgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlamVjdF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlW
YWx1ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVkZSAiUHJv
cGVydHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJh
eUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJp
YnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29u
c3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJv
cGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkg
Y29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJy
YXlWYWx1ZU1hcCB7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVu
dHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3Jt
YWwgPSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25s
eSA9IDIsCisgICAgfTsKKworcHVibGljOgorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVy
YXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Cisg
ICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKCkKKyAgICAgICAgOiBtX2ZsYWdzKE5vcm1hbCkKKyAgICAgICAgLCBtX3JlcG9ydGVk
Q2FwYWNpdHkoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJik7CisKKyAgICBib29sIHNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZmxhZ3MgJiBTcGFyc2VNb2RlOworICAgIH0KKworICAgIHZvaWQgc2V0U3BhcnNlTW9kZSgp
CisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBT
cGFyc2VNb2RlKTsKKyAgICB9CisKKyAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgIH0KKworICAg
IHZvaWQgc2V0TGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBtX2ZsYWdzID0gc3Rh
dGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKKyAgICB9CisKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKKyAg
ICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IHVuc2lnbmVkLCBKU1ZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgIEFkZFJlc3VsdCBh
ZGQoSlNPYmplY3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7
IHJldHVybiBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSBy
ZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQg
cmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92
ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5v
dEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0
IGJlZ2luL2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAg
RmxhZ3MgbV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgU3BhcnNl
QXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFw
SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNp
bmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFy
c2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNV
bmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5
KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBh
Y2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSkt
PnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICog
KHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAg
ICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwor
ICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisK
KyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFk
ZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRo
aXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5z
aWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92
ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2li
bGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5
LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6Omdl
dCgpOworICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVj
dCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAg
ICBpZiAoIXNldHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNl
dHRlciwgY2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGFycmF5LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKK3sKKyAgICBBZGRSZXN1bHQg
cmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQg
JiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4g
dGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFy
cmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGlu
ZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKG1vZGUgIT0gUHV0RGly
ZWN0SW5kZXhMaWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNF
eHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAi
QXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVu
c2libGUuIik7CisgICAgfQorCisgICAgZW50cnkuYXR0cmlidXRlcyA9IDA7CisgICAgZW50cnku
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xv
dCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJU
KHZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Cisg
ICAgaWYgKCFnZXR0ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitp
bmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKSBjb25zdAoreworICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQo
KSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6Omdl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgaWYgKExJ
S0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigp
OworICAgIGlmICghZ2V0dGVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRo
b2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICByZXR1cm4gY2Fs
bChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNl
TW9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgaXRlcmF0b3IgZW5kID0gbV9tYXAu
ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFy
cmllci5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJf
aAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJy
aWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9y
YWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3Jh
Z2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tl
ZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFBy
b3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3
U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0
b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3Jh
Z2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9y
LT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9
Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9z
dG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdl
W2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3Rv
cmFnZTsgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSB7IHJldHVybiAhbV9zdG9yYWdlOyB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0K
LSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNyBAQCB2
b2lkIFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgSlNPYmplY3Q6OnB1
dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBTdHJp
bmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7
CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgocHJvcGVy
dHlOYW1lKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwogYm9vbCBTdHJpbmdPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpAQCAtMTMzLDYgKzE0NCwxNCBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCiti
b29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50
ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRleChpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGkpOworfQorCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsOCArNTAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkBAIC02Niw3ICs2OCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTU3RyaW5nKik7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEpTV3JhcHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90
b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBj
b25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorU3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJ
bmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8pCisgICAgLCBtX2luZGV4aW5nVHlw
ZShpbmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlzLCBn
bG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAg
ICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xh
c3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBAQCBjb25zdCBDbGFzc0luZm8gU3Ry
dWN0dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCiAgICAgLCBtX3R5
cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbikKKyAgICAsIG1faW5k
ZXhpbmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBqc051bGwo
KSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBv
aW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcsNiArMTk5LDcgQEAgU3RydWN0dXJl
OjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDog
SlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQog
ICAgICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8oKSkKKyAgICAsIG1faW5kZXhpbmdU
eXBlKHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3By
b3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAg
ICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRp
b25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0yNTEsNiArMjU0LDggQEAg
dm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogCiAgICAgZm9yIChwdHJk
aWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAg
c3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBF
bnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2
aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKICAgICAg
ICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwogICAgIH0KQEAgLTUwMiw2ICs1MDcsMzgg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0
cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZSog
ZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwg
YXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRy
aWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5n
VHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlw
ZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAorICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwor
ICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0
cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJp
YnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7Cisg
ICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQorICAgICAgICAgICAgdHJhbnNpdGlv
bi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSAr
IDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91cykKKyAgICAgICAgICAgIHRyYW5zaXRp
b24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKCk7CisgICAgfQorICAgIAor
ICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRp
b24pOworICAgIHJldHVybiB0cmFuc2l0aW9uOworfQorCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdh
bnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUg
IkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5o
IgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdU
eXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAwLDYgKzEwMSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNp
dGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKIAogICAgICAgICBi
b29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xv
YmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBj
b25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAgICAgICAgIGJvb2wg
aXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAorICAg
ICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGlu
Z1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGU7IH0KIAog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xv
YmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkBAIC0zMzQs
NiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBt
X2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIApAQCAtMzYzLDcgKzM3Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9
IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIFN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKIApAQCAtNDE2LDYgKzQyNSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lm
aWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJbmZv
OworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CiAgICAgICAgIAogICAgICAg
ICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CkBAIC00NDcsNyArNDU3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDog
MTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhj
bHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRp
ZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogNzsKKyAg
ICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDIyOwogICAgICAgICB1bnNp
Z25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2lnbmVk
IG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRp
b24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgQVNT
RVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8p
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUp
OwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAg
ICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogI2RlZmluZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNz
IFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbnMgdGhhdCBkb24ndCBoYXZlIHRvIGRv
IHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVz
ZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKy8v
IElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkg
c2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVB
cnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJz
dEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5n
VHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRp
b24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUFycmF5
U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBv
bGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAg
ICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdTaW5nbGVTbG90RmxhZyA9IDE7CiAKQEAgLTQ0
LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IEtleTsKICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBwLnNlY29uZDsKKyAgICAgICAgICAgIGlmIChwLmZpcnN0KQorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0
ODI4LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
bW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwgYWN0dWFsLCBzdW1tYXJ5ICsgCiAK
IC8vIHJldmVyc2UKIHZhbHVlICA9ICcxMjMnOwotZXhwZWN0ID0gJzEyMyc7CitleHBlY3QgPSAn
VHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0
cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbCh2YWx1ZSkgKyAn
JzsKQEAgLTczLDcgKzczLDcgQEAgcmVwb3J0Q29tcGFyZShleHBlY3QsIGFjdHVhbCwgc3VtbWFy
eSArIAogCiAvLyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsKLWV4cGVjdCA9ICdjYmEnOworZXhwZWN0
ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4n
OwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zb3J0LmNhbGwodmFsdWUpICsg
Jyc7CkBAIC0xMTQsNyArMTE0LDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUsIHN1bW1h
cnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAnZGVmJzsKLWV4cGVjdCA9IDY7CitleHBl
Y3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5
LiI7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh2YWx1
ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0xMjgsNyArMTI4LDcgQEAgcmVwb3J0Q29tcGFyZSgnZGVm
JywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzaGlmdAogdmFsdWUgID0gJ2FiYyc7Ci1leHBl
Y3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5Lic7CitleHBlY3QgPSAn
VHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0
cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNoaWZ0LmNhbGwodmFsdWUpOwpAQCAt
MTQyLDcgKzE0Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycsIHZhbHVlLCBzdW1tYXJ5ICsgJzoK
IAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0
byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJh
eS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEsIDEpICsgJyc7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDEwICs3MywxMSBAQCBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIERp
Y3RpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJh
eShtX3ZhbHVlKTsKLSAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChpbmRleCkpCisgICAgLy8g
RklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICBpZiAoIWFycmF5LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVl
IGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgSlNWYWx1ZSBpbmRl
eGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICBpZiAoaW5kZXhl
ZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWluZGV4ZWRWYWx1ZS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3QKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldElu
ZGV4KGkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNl
IG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAg
ICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogI2lmIEVOQUJM
RShCTE9CKQogICAgICAgICBpZiAoaXRlbS5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZv
KSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoY29udGV4dCwgdG9BcnJheUJ1ZmZl
cihpdGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOSBAQCB2b2lk
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJrCiAKICAgICBEYXNoQXJyYXkgZGFz
aDsKICAgICBKU0FycmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgLy8gRklY
TUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBmbG9hdCBlbGVtID0gdmFs
dWVBcnJheS0+Z2V0SW5kZXgoaSkudG9GbG9hdChleGVjKTsKKyAgICAgICAgZmxvYXQgZWxlbSA9
IHZhbHVlQXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b0Zsb2F0KGV4ZWMpOwogICAgICAgICBp
ZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0ZShlbGVtKSkKICAgICAgICAgICAgIHJldHVybjsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xp
c3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICsz
Myw5IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdG9ET01TdHJpbmdMaXMKIAogICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHN0cmluZ0xpc3QgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogV2hh
dCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJh
eS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgc3RyaW5nTGlzdC0+YXBwZW5kKGFycmF5LT5nZXRJ
bmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICBzdHJpbmdMaXN0
LT5hcHBlbmQoYXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogCiAgICAgcmV0dXJuIHN0cmluZ0xpc3QucmVsZWFzZSgpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw3ICs4OSw4IEBAIEpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnBv
cnQoRXgKIHN0YXRpYyB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTQXJyYXkqIGFycmF5LCBDb250ZXh0TWVudSYgbWVudSkKIHsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBp
dGVtID0gYXNPYmplY3QoYXJyYXktPmdldEluZGV4KGkpKTsKKyAgICAgICAgLy8gRklYTUU6IFdo
YXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgSlNPYmplY3QqIGl0ZW0gPSBhc09iamVj
dChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICAgICAgSlNWYWx1ZSBsYWJlbCA9IGl0
ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsYWJlbCIpKTsKICAgICAgICAgSlNWYWx1
ZSB0eXBlID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInR5cGUiKSk7CiAgICAg
ICAgIEpTVmFsdWUgaWQgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaWQiKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0
b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9jb2xzQXJyYXkg
PSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhl
IGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwcm90b2Nv
bHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcg
KzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW4KICAgICAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQg
aWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBh
cnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBl
bGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDkgQEAgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5ndGhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAg
ICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAg
ICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0U3BhcnNlSW5kZXgoYXJyYXksIGlu
ZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
Y3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjb25zdCBDbGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJyYXki
LCAmSlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVBcnJh
eSkgfTsKIAogUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUpCisgICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAwKQog
ICAgICwgbV9hcnJheSgwKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMyArNzMsMTMgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvLCBBcnJheSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0FycmF5OjpTdHJ1Y3R1cmVGbGFn
czsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJh
eShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXN0cmluZ2lmeS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzM0LDcgKzMzNCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgewogICAgICAgICBq
c29uT2JqZWN0LnN0cmluZ2lmeSh7YToiYSIsIGI6ImIiLCBjOiJjIiwgMzogImQiLCAyOiAiZSIs
IDE6ICJmIn0sIHJlcGxhY2VGdW5jKTsKICAgICAgICAgcmV0dXJuIHJlcGxhY2VUcmFja2VyOwog
ICAgIH0pOwotICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSAnKHN0cmlu
Zyl7ImEiOiJhIiwiYiI6ImIiLCJjIjoiYyIsIjMiOiJkIiwiMiI6ImUiLCIxIjoiZiJ9O2Eoc3Ry
aW5nKSJhIjtiKHN0cmluZykiYiI7YyhzdHJpbmcpImMiOzMoc3RyaW5nKSJkIjsyKHN0cmluZyki
ZSI7MShzdHJpbmcpImYiOyc7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3Rl
ZCA9ICcoc3RyaW5nKXsiMSI6ImYiLCIyIjoiZSIsIjMiOiJkIiwiYSI6ImEiLCJiIjoiYiIsImMi
OiJjIn07MShzdHJpbmcpImYiOzIoc3RyaW5nKSJlIjszKHN0cmluZykiZCI7YShzdHJpbmcpImEi
O2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7JzsKICAgICByZXN1bHQucHVzaChmdW5jdGlvbihq
c29uT2JqZWN0KXsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgdmFyIGFycmF5ID0g
W3t0b1N0cmluZzpmdW5jdGlvbigpe2NvdW50Kys7IGFycmF5WzBdPSdhJzsgYXJyYXlbMV09J2Mn
OyBhcnJheVsyXT0nYic7IHJldHVybiAnYSd9fV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162135</attachid>
            <date>2012-09-04 17:17:55 -0700</date>
            <delta_ts>2012-09-05 22:03:34 -0700</delta_ts>
            <desc>more progress on fast/js</desc>
            <filename>butterflies_patch_32.diff</filename>
            <type>text/plain</type>
            <size>431524</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIFBhcmVudDo6bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2
ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25z
dCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgCiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKIAogICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiwgQ29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xv
dCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmpl
Y3Q8UGFyZW50Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+
KG9iamVjdCk7CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09i
amVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KG9iamVjdCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAg
LTQ4NCw3ICs0OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRl
ICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTczLDYgKzczLDggQEAKIAkJMEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENh
bGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I3MTRC
Q0Y4RTEwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEds
b2JhbFJlc29sdmVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0
ZWNvZGVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1
RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMw
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5
VmFsdWVNYXAuY3BwICovOyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRD
YWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTVGMTVGMTRC
N0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21t
b25TbG93UGF0aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgKi87IH07CkBAIC0xODgsNiArMTkwLDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0
NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkg
LyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkI1NDY3QjE0RjVDN0Ux
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5
IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyog
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi87IH07CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYx
NjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdC
MiAvKiBBcnJheVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4
RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZC
N0YzOTkxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdIZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEYxNUVEOEUzODAwRjE2N0Iy
IC8qIEluZGV4aW5nVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkw
MTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIg
LyogUmVqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0Iy
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZCN0YzOUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI3RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJE
N0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENv
ZGVPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNTY2LDcgKzU3OSw2IEBACiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVj
dXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1
MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8q
IEpTSW50ZXJmYWNlSklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIx
M0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9OwotCQlBNzgxRTM1OTE0
MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9y
YWdlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2
NUExNEYgLyogQVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMg
LyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsg
fTsKIAkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYw
RUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwpAQCAtODI3
LDYgKzgzOSw4IEBACiAJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4NUI0RiAvKiBNZXRob2RDYWxsTGlu
a0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtJ
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0I2MTRCQ0Y4REYwMDg4
NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHbG9iYWxSZXNvbHZlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZz
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQ0Q0QzAx
NUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1
RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMTEludENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk0Myw2ICs5NTcsMTcgQEAKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1
NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVE
OEUzODAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXJyYXlDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmRleGluZ0hlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZGV4aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5
MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFBy
b2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0Mx
MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gREZHRXhpdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZC
RDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTMzNyw3ICsxMzYyLDYgQEAKIAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5
cGVkQXJyYXlTdHVicy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBl
ZEFycmF5U3R1YnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgy
NzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyog
SlNPYmplY3RSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
T2JqZWN0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3
NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBU1RCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwMTEsNiArMjAzNSwyMCBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYg
LyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICov
LAorCQkJCTBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAq
LywKKwkJCQkwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICov
LAorCQkJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJ
CQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJMEZCN0Yz
OEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywKKwkJCQkw
RkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJCQkwRkI3
RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8s
CisJCQkJMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJ
CTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQkw
RkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0YzOTIxNUVE
OEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3RjM5MzE1
RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLywK
KwkJCQlDMkQ1OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAq
LywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJ
QkNGNjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RFNTBF
MUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmNwcCAqLywKQEAgLTIxOTYsNyArMjIzNCw2IEBA
CiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAog
CQkJCTkzMzAzRkU4MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJ
CTkzMzAzRkVBMEU2QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgx
RTM1ODE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYx
MTEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3
MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJ
CUJDMThDM0MwMEUxNkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBA
IC0yNzQ1LDcgKzI3ODIsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAx
ODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYw
IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZG
NUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTQsNiAr
MjkzMCwxOCBAQAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFy
cmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYx
NjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3MTVFRDhF
NDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk4MTVF
RDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdC
MiAvKiBJbmRleGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVFRDhFNDYw
MEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlE
MTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlF
MTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQ5NSw2ICszNTQzLDcg
QEAKIAkJCQkxNDg3NEFFMzE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIAorLy8gVGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJl
cHJlc2VudHMgYW4gSW5kZXhpbmdUeXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJl
IDE3IGluZGV4aW5nIHR5cGVzICgwIHRvIDE2LCBpbmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1v
cmUgdGhhbiBlbm91Z2guCiB0eXBlZGVmIHVuc2lnbmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBJc05vdEFycmF5ID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pT
QXJyYXkgID0gMjsKKyNkZWZpbmUgYXNBcnJheU1vZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkpCiAKIGlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZy
b21TdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJh
eTsKLSAgICByZXR1cm4gSXNOb3RBcnJheTsKKyAgICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQ
cm9maWxlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY3MCw3ICsxNjcwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXREaXJlYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPnVuZGVyc2NvcmVQcm90byk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKAorICAg
ICAgICBwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQ
cm90bworICAgICAgICAmJiBQcm9wZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTcsOCArODU3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToK
LSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
YXZlIG1vcmUgY29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRzCiAgICAg
ICAgICAgICAvLyBjYXNlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoU3BlY0ludDMyKTsKQEAgLTkxOSwxMCArOTE4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2Fz
ZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihT
cGVjSW50MzIpOwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5k
ZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM0NCw3ICsxMzQzLDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0
dXJlKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAg
IGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTM2Miw4ICsx
MzYxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Cisg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBUaGlz
IGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2Fu
dCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1
bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9IDMgfTsK
ICAgICAKKyAgICBBZGphY2VuY3lMaXN0KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChL
aW5kIGtpbmQpCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2
ZWQoQXJyYXlNb2RlcyBtb2RlCiAgICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAg
ICAgICAgcmV0dXJuIEFycmF5OjpVbmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAg
ICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6
SlNBcnJheTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Up
OgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHMgOiBBcnJheTo6QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7
CisgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUg
PyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAv
LyBXZSBrbm93IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNo
LCB0aG91Z2ggdGhlcmUgaXMgbm8KICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5
IHByb2ZpbGUsIHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAt
MTIwLDEwICsxMjQsMTQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYg
dgogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToK
LSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05fQVJSQVlf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5m
bzsKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworCisgICAgY2FzZSBBUlJB
WV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0Fy
cmF5U3RvcmFnZSkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxh
dGlvbih2YWx1ZS5tX3R5cGUpOwpAQCAtMTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hhciogbW9k
ZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91
bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAg
ICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3Rv
cmFnZSI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6
CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1
cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBv
c3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
aAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAg
ICBGb3JjZUV4aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1
dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJp
YywKICAgICBTdHJpbmcsCi0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisg
ICAgQXJyYXlTdG9yYWdlLAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5
V2l0aEFycmF5U3RvcmFnZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywK
KyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXks
CiAgICAgSW50MTZBcnJheSwKQEAgLTYxLDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9OwogfSAv
LyBuYW1lc3BhY2UgQXJyYXkKIAorLy8gSGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVudHMuIEZv
ciBleGFtcGxlLCBzYXlpbmcgImNhc2UgQWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8gaXMgdGhl
IHNhbWUgYXMgaGF2aW5nIG11bHRpcGxlIGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9mZiBhbGwg
b2YgdGhlIG1vZGVzIHRoYXQKKy8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhl
bS4KKyNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZTogICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X01PREVTICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRI
X0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6Ok1vZGUg
ZnJvbU9ic2VydmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBBcnJheTo6
TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAtNzQsOCAr
MTAxLDE3IEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUg
Ym9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2gg
KGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpN
b2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5f
Qk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTUwLDYgQEAgaW5saW5l
IEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0KIAotaW5saW5lIGJv
b2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUgbGVmdCwgQXJyYXk6
Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAgIGxlZnQgPT0gQXJy
YXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICByaWdodCA9PSBBcnJh
eTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0FycmF5KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSBib29s
IG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7
CkBAIC0xNDcsNyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpN
b2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUp
CiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzQsNyArMTY3NCw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lubGluZU9mZnNldChv
ZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKLSAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2Up
OworICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFz
ZSk7CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRkVG9HcmFwaCgKICAg
ICAgICAgICAgIEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMDksNyArMjMwOSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3Rv
cmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRv
R3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHBy
b3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpAQCAtMjM2MCwxMyAr
MjM2MCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJh
c2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1
dHRlcmZseSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRT
dGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gYmFzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChH
ZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgp
LmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4MSw4ICszODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRH
ZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKLSAgICAgICAgTm9kZSBn
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAg
Tm9kZSBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOworICAgICAgICBpZiAobW9kZUlzSlNBcnJh
eShhcnJheU1vZGUpKQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5v
ZGUoR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBhcnJheSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgPSBOb2RlKEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CiAgICAgICAg
IGlmIChzaG91bGRHZW5lcmF0ZSkKICAgICAgICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UucmVmKCk7CiAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5k
ZXggPSBtX2dyYXBoLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNDczLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1
cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHN0cnVjdCBPcEluZm8gewog
c3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAgICAgCisgICAg
Tm9kZSgpIHsgfQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNo
aWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAg
IG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNy
byhHZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oQ2hlY2tBcnJh
eSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1
bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKQEAg
LTIyNiwxNCArMjI3LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUq
IGUKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAg
Ci0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICBpZiAoYXJyYXktPmNhblNldEluZGV4KGlu
ZGV4KSkgewotICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGluZGV4LCB2
YWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAob2JqZWN0LT5jYW5T
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVp
Y2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgs
IHZhbHVlLCBzdHJpY3QpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5k
ZXgob2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTM0MSwxMSArMzQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgZ2V0QnlWYWwoRXgKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwg
ZXhlYyk7CiAgICAgCi0gICAgLy8gRklYTUU6IHRoZSBKSVQgdXNlZCB0byBoYW5kbGUgdGhlc2Ug
aW4gY29tcGlsZWQgY29kZSEKLSAgICBpZiAoaXNKU0FycmF5KGJhc2UpICYmIGFzQXJyYXkoYmFz
ZSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
c0FycmF5KGJhc2UpLT5nZXRJbmRleChpbmRleCkpOworICAgIGlmIChiYXNlLT5pc09iamVjdCgp
KSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAgICAg
aWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICB9
CiAKLSAgICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byByZWxpbmsgdGhpcyB0byBhbiBv
cHRpbWl6ZWQgZm9ybSEKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlKSAmJiBhc1N0cmluZyhiYXNl
KS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFz
U3RyaW5nKGJhc2UpLT5nZXRJbmRleChleGVjLCBpbmRleCkpOwogCkBAIC01MzQsMTUgKzUzNiwx
NSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0
aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBl
bmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNBcnJheSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAg
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4
aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgp
KTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+
Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgp
LT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTUxLDE1ICs1
NTMsMTUgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAg
ICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUg
ZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRl
eCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJh
eS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJs
ZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEyNjgs
MjAgKzEyNzAsMjkgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdAog
CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBp
ZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
Kj4ocmVzdWx0KSArIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSArIDEpOworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBm
YWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJl
c3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6
ZSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1Np
emU7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJm
bHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBuZXdTaXplLCBm
YWxzZSwgMCkpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2Jq
ZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxP
dXRPZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
amVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3Qt
Pmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAogZG91YmxlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyCiB0
eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RG
R09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5j
b2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9FQVpKKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwog
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMDUsOCArMTA1LDEwIEBAIHR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwor
dHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVf
dCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysr
IGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2Vs
bCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKikgV1RGX0lOVEVS
TkFMOwpAQCAtMTM4LDggKzE0MCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJy
YXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91
bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2go
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChF
eGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
IFdURl9JTlRFUk5BTDsKQEAgLTE4NSw2ICsxODcsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBv
cGVyYXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRl
cmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1
c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9u
LCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMg
b3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAg
IGNhc2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTks
MTIgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRH
UFIpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3Rv
T2JqZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdEdQUik7CisgICAgICAg
IHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BS
KTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
R1BSKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjUzLDEwICsyNTMsMTAgQEAgc3RhdGljIGJvb2wg
dHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICAgICAgCi0gICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBTdHJ1Y3R1cmU6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdp
dGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zm
c2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNl
bHNlCkBAIC00NzMsNyArNDczLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChF
eGVjU3RhdAogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02ODEsMTcgKzY4MSwxNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwog
ICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgog
ICAgIApAQCAtODMwLDcgKzgzMCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUg
PiBvbGRTaXplKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25l
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsK
ICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0
b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04NDQsNyArODQ0LDcgQEAgc3RhdGljIHZvaWQg
ZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIHNj
cmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBAIC04NTQsOCArODU0LDggQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYg
KCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODYzLDkgKzg2Myw5IEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVl
VGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0
Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJm
bHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYK
ICAgICAgICAgICAgIApAQCAtMTAyMCw2ICsxMDIwLDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2Ug
bmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4
aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNl
Q2VsbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5
cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAg
ICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhD
b21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
MCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9
IG1faml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwg
dmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKIAog
ICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAg
ICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQ
dHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9q
aXQubGFiZWwoKTsKQEAgLTI1NDcsMjMgKzI1NDcsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczogewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBh
bHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0g
ICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMjY1Myw2ICsyNjQ3LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRs
ZWQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUg
YmFzZSBtYXkgbm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1
dCB3ZSBoYXZlIHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28g
aXQncyBsaWtlbHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3YXkuIExpa2VseQorICAgICAgICAv
LyBubyBoYXJtIGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgY2hpbGQyKTsKICAgICAgICAgCkBAIC0yNjYwLDggKzI2NTcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01P
REVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwog
CiAgICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVy
cywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtMjY4OCw4ICsyNjg0LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAg
ICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFy
cmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTI3MDIsOSArMjY5OCw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWln
aHQgYmUgZ3Jvd2luZyB0aGUgYXJyYXk7IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAog
ICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjcx
Myw3ICsyNzA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgICAgICBpZiAoYXJy
YXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICgh
aXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjg4MiwxNyArMjg3
OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9m
ZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2Zm
ZmZmZmUpKSk7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRo
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9y
ZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9q
aXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwog
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKQEAgLTI5MTgsMTggKzI5MTQsMTggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdl
TGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0
aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5n
dGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
c3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCiAgICAg
ICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKQEAgLTM1MTUsMTQgKzM1MTEsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21w
aWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAg
CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRH
UFIpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zODY1LDcgKzM4NjEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYKICAgICAgICAgbV9qaXQubmVn
MzIocmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXNv
bHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJ
bmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIsIChp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUs
MjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNf
aW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNl
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxp
Y2F0ZXMgdGhlIGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwot
ICAgICAgICAvLyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNl
IE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAu
Z3ByKCkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01P
REVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJl
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMwMDYsMTEg
KzMwMTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3Ry
aW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlw
dG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMxMjUs
MTMgKzMxMjksMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwog
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURl
c2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7
CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcp
OwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAg
ICAgICAgIApAQCAtMzIyNyw2ICszMjMwLDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVSZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5v
ZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3Vs
dC5ncHIoKSwgYmFzZUdQUik7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMzI0OCwxMyArMzI2NSwz
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNo
R1BSKSk7CiAgICAgICAgIAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAKICAgICBz
dG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkK
IHsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsK
KyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Cisg
ICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICBp
ZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZp
b3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCBy
ZXN1bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOworICAgICAg
ICAKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpA
QCAtMzI2Nyw5ICszMzAyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcgogICAgICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKICAgICAgICAg
Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0g
ICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAg
IEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIENvcGll
ZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5z
dG9yYWdlQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFs
bG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMik7CkBAIC0zMjgwLDEzICsz
MzEyLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBt
X2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBz
Y3JhdGNoR1BSMik7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BS
MiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQ
UjIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3JhdGNoCiAgICAgZm9yIChwdHJkaWZm
X3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3Rv
cmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBp
bGVJbmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExNTYsNiArMTE1Niwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmpl
Y3QpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RG
R09wZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc2l6ZSkpOwpAQCAtMTM2OCw3ICsxMzc4LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVy
YXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTE2
NjYsNyArMTY3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBh
cmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJ
XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0yMTM5LDcgKzIxNDks
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIH0KIAogICAgIC8vIEl0IGlzIGFjY2VwdGFi
bGUgdG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3Un
cmUgZmluZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAgICAg
c3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7CiAKLSAgICBD
aGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVf
dCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVf
dCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9p
ZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJl
Z2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3Is
IHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChT
dHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsK
LSAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBSZWdpc3RlcklE
IHJlc3VsdCk7CisgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwg
cHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVj
dHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAg
IHZvaWQgZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWdu
ZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29s
IGRlc3RyCiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBB
ZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogCiAgICAgLy8gaW5p
dGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyCi0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRy
ZXNzKHJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3Qo
VCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00
MzQsNyArNDM0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQog
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0
cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVySUQgcmVzdWx0KQoraW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIHB0cmRpZmZf
dCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsK
IApAQCAtNDQzLDM3ICs0NDMsMzIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZwogICAgIHN0b3JlUHRyKHJlc3VsdCwgJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nKTsKICAgICBuZWdQdHIocmVzdWx0KTsKICAgICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZh
bGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoc2l6ZSksIHJlc3VsdCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0g
b2Zmc2V0RnJvbUJhc2UpLCByZXN1bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxv
Y2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVn
aXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQg
c3RvcmFnZVB0cikKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVu
Z3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gSlNBcnJheTo6c3RvcmFnZVNp
emUoaW5pdGlhbExlbmd0aCk7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5n
dGgpKTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVu
c3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJp
bmcgSlNBcnJheSBpbml0aWFsaXphdGlvbi4KLSAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uo
aW5pdGlhbFN0b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3Rv
cmFnZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3Vs
dCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRB
bGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3Rv
cmFnZVB0cik7CiAKICAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBB
cnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdl
UmVzdWx0LCBBcnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJ
bW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgc3Rv
cmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
MCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQo
KSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhl
IG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3Vs
dCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBz
dG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGlu
ZGV4IGJpYXMuCi0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxs
UmVzdWx0LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNl
dCgpKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3Bh
cnNlVmFsdWVNYXBPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2Ug
aGF2ZS4KKyAgICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0
b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJf
dCkpKTsKICNlbmRpZgogICAgIH0KLQotICAgIC8vIFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xv
dHMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsr
KSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigw
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSkpOwotI2VuZGlmCi0gICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY3LDcgKzE2NjcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXko
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3Zl
cnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkpIHsKKyAgICBpZiAoQ29waWVkU3Bh
Y2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKQEAgLTE2ODYsNyArMTY4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
YXJyYXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6
ZSwgd2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAg
ICAgLy8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJy
YXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkpKQorICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBO
b3QgZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NSw2
ICsxMDY1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAg
IGVtaXRMb2FkUGF5bG9hZChpdGVyLCByZWdUMSk7CiAgICAgCiAgICAgLy8gVGVzdCBiYXNlJ3Mg
c3RydWN0dXJlCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1Qw
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1
Y3R1cmUpKSkpOwogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMCArMTE0LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAg
ICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDApKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9m
ZnNldChSZWdpc3RlCiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFs
KSB7CiAgICAgICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNo
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CkBAIC0xNzQsNyArMTc0
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBi
cmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7
CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKQEAgLTIzOSwx
MCArMjM5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7
CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5
OjpzX2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIp
OwogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjUyLDEwICsyNTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIGVt
cHR5LmxpbmsodGhpcyk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1Qy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwot
ICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAg
ICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgc3RvcmUzMihy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwogCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgYmFzZQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBw
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsK
ICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBD
b252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZFB0cldpdGhDb21w
YWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRP
ZmZzZXQpLCByZWdUMCk7CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CkBAIC00NzAsNyAr
NDcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCi0gICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7
CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRp
YmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhB
ZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0
QnlJZCk7CkBAIC01MDksOCArNTA5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsK
LSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKKyAgICBzdG9yZVB0
cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZs
eShjYWNoZWRPZmZzZXQpKSk7CiB9CiAKIC8vIENvbXBpbGUgYSBsb2FkIGZyb20gYW4gb2JqZWN0
J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgYmFzZS4KQEAgLTUyMSw4ICs1MjEs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hl
ZE9mZnNldCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1
bHQpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjdCogYmFz
ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKQEAgLTUz
Miw4ICs1MzIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZP
dXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRy
ZXNzKCksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0
ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVz
dWx0KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0
KQpAQCAtNjYwLDExICs2NjAsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRB
cnJheUxlbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMywg
bV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQcm9maWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
KS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1
cmVDYXNlczEgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAg
ICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3Ro
IGZyb20gdGhlIHN0b3JhZ2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCBy
ZWdUMik7CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoMCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhy
ZWdUMiwgcmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE3LDggKzE1MTcsOCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihKU09iamVjdCosIG9wX3B1dF9iCiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgp
KTsKICAgICBKU09iamVjdCogYmFzZSA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBQcm9wZXJ0
eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIG9sZFNpemUsIG5ld1NpemUpOwotICAgIGJhc2UtPnNldE91dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOworICAgIGJhc2UtPnNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5l
d1N0cnVjdHVyZSk7CiAKICAgICByZXR1cm4gYmFzZTsKIH0KQEAgLTI0MzUsNyArMjQzNSw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0KKyAgICAKICAgICBpZiAo
TElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKICAg
ICAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3du
UHJvcGVydHkoY2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUp
KSkgewogICAgICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjUyOCwxMiArMjUy
OCwxMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAKICAgICBp
ZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0g
c3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkg
ewotICAgICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAg
ICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBq
c0FycmF5LT5zZXRJbmRleCgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlj
a2x5KGkpKQorICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJh
eTo6cHV0QnlJbmRleChqc0FycmF5LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2UgaWYgKGlzTmFtZShz
dWJzY3JpcHQpKSB7CkBAIC0zNDAyLDcgKzM0MDIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcF9wdXRfZ2V0dGVyCiAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlmICghc2V0dGVyLmlzVW5k
ZWZpbmVkKCkpCiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGFzT2JqZWN0KHNldHRlcikpOwotICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29y
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigp
LCBhY2Nlc3NvciwgQWNjZXNzb3IpOworICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vz
c29yKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfcmVmZXJlbmNl
X2Vycm9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIEpTVmFsdWUgcmVz
dWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1AoMSkgPSByZXN1bHQ7Ci0KKyAgICAKICAgICBpZiAo
IUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVwogICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkK
ICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgpCkBAIC04NzcsNyArODc3LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTElu
dDo6Z2V0T3Bjb2RlKGxsaW50X29wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAg
ICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIHBjWzVdLnUu
b3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTM5LDcgKzkz
OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcGNbNl0u
dS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKQEAgLTk2Nyw3ICs5NjcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5s
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxp
bnRfb3BfcHV0X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcGNbNV0u
dS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQg
PSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNDYs
MTIgKzEwNDYsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQog
ICAgIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVp
bnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShi
YXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNl
VmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAg
ICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNl
dEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2ts
eShnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgSlNBcnJheTo6cHV0QnlJbmRleChqc0FycmF5LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAg
ICB9CiAgICAgICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBleGVjLT5j
b2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZQogICAgIGlmICghc2V0dGVyLmlzVW5k
ZWZpbmVkKCkpCiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZ2xvYmFsRGF0YSwgYXNPYmpl
Y3Qoc2V0dGVyKSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoCi0gICAgICAgIGds
b2JhbERhdGEsCisgICAgICAgIGV4ZWMsCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVu
dGlmaWVyKHBjWzJdLnUub3BlcmFuZCksCiAgICAgICAgIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CiAg
ICAgTExJTlRfRU5EKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTk0MywyMSArOTQzLDIxIEBAIF9sbGludF9vcF9pc19zdHJp
bmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9w
ZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2VydCht
YWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBv
ayBlbmQpCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAotICAgIGxvYWRwIEpTT2JqZWN0OjptX291
dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBs
b2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFu
ZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNl
dCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZGkgVGFnT2Zmc2V0
ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBh
eWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9h
ZAogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZz
ZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBiaWx0IHByb3BlcnR5T2Zm
c2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0
OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UK
KyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVj
dEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQogLmlz
SW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNG
aW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEp
ICogOCArIHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5Ogot
ICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2Fk
T2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdI
ZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQK
IAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MDIsMjAgKzgwMiwyMCBAQCBfbGxpbnRf
b3BfaXNfc3RyaW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90
RmluYWwocHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQog
ICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgSW5s
aW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCiAgICAgbmVncCBwcm9wZXJ0eU9mZnNldEFzUG9p
bnRlcgotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3Rv
cmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4XSwg
dmFsdWUKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0s
IG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkg
KiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0QXNQb2ludGVyLCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQog
ICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJ
bmxpbmUKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0
b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9m
ZnNldEFzSW50CiAgICAgc3hpMnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRB
c0ludAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6
Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVj
dEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9i
amVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1
ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5k
ZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZh
bHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTEzMiw4ICsx
MTMyLDggQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ds
b2JhbERhdGFbdDJdLCB0MgogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5m
b1t0Ml0sIHQyCiAgICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQyLCAub3BH
ZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDBdLCB0MwotICAgIGJp
YWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdworICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDNdLCAub3BHZXRC
eVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5U3Rv
cmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNs
b3cKQEAgLTEyMTcsOCArMTIxNyw4IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxvYWRw
IENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QwXSwgdDAKICAgICBsb2FkcCBKU0dsb2JhbERhdGE6
OmpzQXJyYXlDbGFzc0luZm9bdDBdLCB0MAogICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0lu
Zm9bdDNdLCB0MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVj
dG9yTGVuZ3RoW3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9y
YWdlW3QxXSwgdDAKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAorICAg
IGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fbGVu
Z3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CiAgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9y
W3QwLCB0MiwgOF0sIC5vcFB1dEJ5VmFsRW1wdHkKIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6CiAg
ICAgbG9hZGlzIDI0W1BCLCBQQywgOF0sIHQzCkBAIC0xMjI5LDkgKzEyMjksOSBAQCBfbGxpbnRf
b3BfcHV0X2J5X3ZhbDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBhZGRpIDEsIEFycmF5U3Rv
cmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIEFycmF5U3RvcmFnZTo6
bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmliIHQyLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4V29yZFt0MF0sIC5vcFB1dEJ5
VmFsU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQotICAgIHN0b3JlaSB0MSwgQXJyYXlT
dG9yYWdlOjptX2xlbmd0aFt0MF0KKyAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhXb3JkW3QwXQogICAgIGptcCAub3BQdXRCeVZhbFN0
b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTEgQEAgZWxzZQogICAgIGNvbnN0IFBheWxv
YWRPZmZzZXQgPSAwCiBlbmQKIAorIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRl
cmZsaWVzLgorY29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2Nv
bnN0IEFsbEFycmF5VHlwZXMgPSAxNQorCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5n
VHlwZSA9IDUKIGNvbnN0IE9iamVjdFR5cGUgPSAxMwpAQCAtMzIzLDcgKzMyOCw3IEBAIG1hY3Jv
IGFsbG9jYXRlQmFzaWNKU09iamVjdChzaXplQ2xhc3NJbmQKICAgICAgICAgbG9hZHAgY2xhc3NJ
bmZvT2Zmc2V0W3NjcmF0Y2gxXSwgc2NyYXRjaDIKICAgICAgICAgc3RvcmVwIHNjcmF0Y2gyLCBb
cmVzdWx0XQogICAgICAgICBzdG9yZXAgc3RydWN0dXJlLCBKU0NlbGw6Om1fc3RydWN0dXJlW3Jl
c3VsdF0KLSAgICAgICAgc3RvcmVwIDAsIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2VbcmVz
dWx0XQorICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0KICAg
ICBlbmQKIGVuZAogCkBAIC00OTgsNyArNTAzLDcgQEAgbWFjcm8gd2l0aElubGluZVN0b3JhZ2Uo
b2JqZWN0LCBwcm9wZXJ0eQogZW5kCiAKIG1hY3JvIHdpdGhPdXRPZkxpbmVTdG9yYWdlKG9iamVj
dCwgcHJvcGVydHlTdG9yYWdlLCBjb250aW51YXRpb24pCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1f
b3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKKyAgICBsb2FkcCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0XSwgcHJvcGVydHlTdG9yYWdlCiAgICAgIyBJbmRpY2F0
ZSB0aGF0IHRoZSBwcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXIgbm93IHBvaW50cyB0byB0aGUKICAg
ICAjIHByb3BlcnR5IHN0b3JhZ2UsIGFuZCB0aGF0IHRoZSBvYmplY3QgcmVnaXN0ZXIgbWF5IGJl
IHJldXNlZAogICAgICMgaWYgdGhlIG9iamVjdCBwb2ludGVyIGlzIG5vdCBuZWVkZWQgYW55bW9y
ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgQXJndW1lbnRz
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihl
eGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogfQogCiBib29sIEFyZ3VtZW50czo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpIApAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamUKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB5
ZXQgcHJlc2VudCBvbiB0aGUgb2JqZWN0LCBhbmQgaXMgbm90IHlldCBtYXJrZWQgYXMgZGVsZXRl
ZCwgdGhlbiBhZGQgaXQgbm93LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAg
aWYgKCghdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+
ZGVsZXRlZEFyZ3VtZW50c1tpXSkgJiYgIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5h
cmd1bWVudChpKS5nZXQoKSwgMCk7CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJl
SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSk7
CiAgICAgICAgIGlmICghQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2
ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVu
dGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYg
QXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVy
dmlldyBvZiBKU0FycmF5CisvLworLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5
IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFy
IEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAq
IEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBu
b24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVw
cmVzZW50YWJsZQorLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVl
IGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlz
IGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2ln
bmVkIDMyLWJpdAorLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMg
YW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8g
QWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFz
IGFuIHVuc2lnbmVkIGludGVnZXIgaSwKKy8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCks
IGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8g
c3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwg
YmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisvLyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVy
ZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBp
biB0aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFy
c2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8g
ICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVD
VE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhl
IHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUg
ZGVuc2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3Rv
ciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVu
c2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAg
ICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVY
KSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBh
cnJheS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBi
ZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMg
bm8gcmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3RoKSkKKwor
Ly8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5k
IG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmlu
YXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJk
IC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCisj
ZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFsdWUgQkFTRV9W
RUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwg
YWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZp
ZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNUT1Jf
TEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBh
IHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgor
I2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZvciB3aGVuIHRv
IHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8gRm9yIGFsbCBh
cnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2Ug
YSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMg
MS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgorc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5saW5lIGJvb2wg
aXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVl
cykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVu
Z3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCitpbmxpbmUgSW5k
ZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgsIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CisgICAgcmVz
dWx0LnNldEF1eFdvcmQobGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0TGVuZ3RoKHZlY3Rvckxlbmd0
aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJ
bmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gaW5k
ZXhpbmdIZWFkZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlDb252ZW50aW9uc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMTAgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnV0dGVy
Zmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
QnVpbGRlci5oIgpAQCAtMTE0LDkgKzExNiwxNyBAQCBjb25zdCBDbGFzc0luZm8gQXJyYXlQcm90
b3R5cGU6OnNfaW5mbyA9CiBAZW5kCiAqLwogCitBcnJheVByb3RvdHlwZSogQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3Jl
YXRlQXJyYXlCdXR0ZXJmbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwKTsKKyAgICBBcnJheVByb3Rv
dHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5
cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgYnV0dGVyZmx5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwogLy8gRUNNQSAxNS40LjQKLUFycmF5UHJv
dG90eXBlOjpBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIHN0cnVjdHVyZSkKK0FycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHkpCisgICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtMjkyLDggKzMwMiw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsg
PCBsZW5ndGg7IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQ7Ci0gICAgICAgIGlmICh0
aGlzT2JqLT5jYW5HZXRJbmRleChrKSkKLSAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5n
ZXRJbmRleChrKTsKKyAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4UXVpY2tseShrKSkK
KyAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAg
ICAgICAgIApAQCAtNDEzLDEwICs0MjMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
CiAKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKCFh
cnJheS0+Y2FuR2V0SW5kZXgoaykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgZWxl
bWVudCA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1l
bnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBw
ZW5kKGVsZW1lbnQudG9XVEZTdHJpbmdJbmxpbmUoZXhlYykpOwogICAgICAgICAgICAgZWxzZQpA
QCAtNjI4LDcgKzYzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZv
KCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VNb2Rl
KCkpIHsKKyAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAm
JiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICBp
ZiAoaXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKGV4ZWMsIGNhbGxUeXBlLCBjYWxsRGF0YSkpCiAg
ICAgICAgICAgICBhc0FycmF5KHRoaXNPYmopLT5zb3J0TnVtZXJpYyhleGVjLCBmdW5jdGlvbiwg
Y2FsbFR5cGUsIGNhbGxEYXRhKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5
cGVOb25lKQpAQCAtNzg4LDkgKzc5OCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwog
ICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAo
OyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAg
ICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IEpTVmFsdWUgdiA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9
IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRo
aXMoYXBwbHlUaGlzKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgdik7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKQEAg
LTg0NiwxMSArODU2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBD
YWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5M
SUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTkwOSwx
MSArOTE5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRD
YWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYm
ICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
IWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5
LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2ts
eShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGsp
KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtOTY1LDExICs5
NzUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJy
YXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtMTAxNywxMSArMTAyNywx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNo
ZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+
aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+
Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTEwNzUsOCArMTA4NSw4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsK
LSAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewotICAgICAgICBy
diA9IGFycmF5LT5nZXRJbmRleCgwKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2Fu
R2V0SW5kZXhRdWlja2x5KDApKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5
KDApOwogICAgICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKQEAgLTEwOTcsOCArMTEwNyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYp
OwogICAgICAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+
Y2FuR2V0SW5kZXgoaSkpKQotICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7
CisgICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpKQor
ICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1
bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2Miw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7
Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKXsK
LSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAgZWxzZSBpZiAo
YXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSl7CisgICAgICAg
IHJ2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKTsKICAgICAgICAgaSA9IDE7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBA
IC0xMTc0LDkgKzExODQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJh
eS0+Y2FuR2V0SW5kZXgoaWR4KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleFF1aWNrbHkoaWR4KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0
aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xv
dyBwYXRoCi0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJ
bmRleChpZHgpKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXkt
PmdldEluZGV4UXVpY2tseShpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMiwganNOdW1iZXIoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDMsIGFycmF5KTsKICAgICAgICAgICAgIHJ2ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlz
aW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZh
dGU6Ci0gICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7
CisgICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0
dGVyZmx5Kik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwog
Ci0gICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJv
dG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBwcm90b3R5
cGU7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5
U3RvcmFnZV9oCisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0
dGVyZmx5LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VB
cnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFu
IGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlT
dG9yYWdlCisvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhl
IGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQg
CisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQg
dGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1
c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9j
YXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkg
LSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJy
YXlTdG9yYWdlKCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJl
IGNyZWF0ZWQgYXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0
aWMgQXJyYXlTdG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJy
YXlTdG9yYWdlKiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4g
aW5kZXhpbmdIZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9
CisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdI
ZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZy
b20gdGhlIGluZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9Cisg
ICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNl
dEF1eFdvcmQobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJu
IGluZGV4aW5nSGVhZGVyKCktPmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgo
dW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aCgpOyB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoY29u
c3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwLmNvcHlG
cm9tKG90aGVyLm1fc3BhcnNlTWFwKTsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2lu
ZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVz
SW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFs
aXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsK
KyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAg
ICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFNwYXJzZUFycmF5VmFsdWVNYXA+IG1fc3BhcnNl
TWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVz
SW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBi
ZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2lu
aXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Cisj
ZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6
b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29y
ZCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVy
biBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFk
ZXI6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9pbmRleEJpYXMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBz
cGFyc2VNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3NwYXJzZU1hcCk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsK
KyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFn
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVy
Zmx5X2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlP
ZmZzZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworc3RydWN0IEFycmF5
U3RvcmFnZTsKKworY2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShC
dXR0ZXJmbHkpOworcHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRp
YWJsZS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZShzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPyBoYXNJbmRleGluZ0hlYWRlciA6IHRy
dWUpOworICAgICAgICBBU1NFUlQoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpKTsKKyAgICAgICAgcmV0dXJuIChwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2Fw
YWNpdHkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIChoYXNJbmRleGluZ0hlYWRlciA/IHNp
emVvZihJbmRleGluZ0hlYWRlcikgOiAwKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwor
ICAgIH0KKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2UsIHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KGJhc2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsg
cmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhp
bmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5n
SGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAg
IHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRl
eGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3Rh
dGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJl
KTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVj
dGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyBy
ZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBU
KiBpbmRleGluZ1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsg
fQorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXls
b2FkPEFycmF5U3RvcmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZQcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3Rv
cmFnZSgpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg
IHZvaWQqIGJhc2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkg
eyByZXR1cm4gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNp
dHk7IH0KKyAgICB2b2lkKiBiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICAv
LyBUaGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2Nh
dGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0
YSB0byByZWZsZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRo
aXMgc2V0IG9mCisgICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGlu
dGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisgICAgLy8gbW9k
ZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1
dHRlcmZsaWVzIGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9j
YXRlU3RvcmFnZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xk
UHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRl
cmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jv
d0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBh
cyBtdWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5v
dCB0aGUgb2JqZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiB1bnNo
aWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0
dGVyZmx5KiBzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzX2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5o
IgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAg
ICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRlbXApKQorICAgICAg
ICBDUkFTSCgpOworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVy
dHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXIm
IGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7Cisg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9i
YWxEYXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIp
CisgICAgICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhp
bmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKAorICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2Uo
dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKKyAgICAgICAgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBC
dXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGJhc2Uo
aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93
UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBh
Y2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2Fw
YWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KAor
ICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwK
KyAgICAgICAgYmFzZShwcmVDYXBhY2l0eSwgb2xkUHJvcGVydHlDYXBhY2l0eSksCisgICAgICAg
IHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2Fw
YWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJv
cGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdI
ZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVy
dHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3Bl
cnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3Bl
cnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KG9s
ZFN0cnVjdHVyZSkpOworICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRleGlu
Z0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
c2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhp
bmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3
U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0
ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisK
K2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJl
Q2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVu
dCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNpdHku
CisgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBh
Y2l0eTsKKyAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFj
aXR5OworICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpLAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3
SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAg
bWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwor
ICAgIHJldHVybiByZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhpbmdI
ZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2Fw
YWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhh
c0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQo
bnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
KTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJl
d3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKKyAgICAvLyBk
aXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBj
aGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3ZpbmcgYSBzbWFsbCBhbW91
bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBvZiBtZW1t
b3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgaXQuIEFu
ZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0bworICAgIC8vIGlubGlu
ZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMgbGlrZWx5
IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkgb24gdGhlIGNvbXBpbGVy
IHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIChzaW5j
ZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNhdXNlIHdy
YXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgorICAgIG1lbW1vdmUoCisg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNp
dHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAg
ICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5k
ZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMp
LT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlmdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJU
KGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwor
ICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1v
dmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSArIG51bWJl
ck9mU2xvdHMsCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwK
KyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1
cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9m
U2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0
eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rp
b25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
czsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIp
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1l
czsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAog
ICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6
ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMs
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZp
bmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJm
bHk7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1
Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAg
Ly8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8g
c2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorICAgIC8vIHRoZXJlIGlzIG5vIHJp
c2sgb2Ygb3ZlcmZsb3cuCisgICAgZW51bSB7IG1heGltdW1MZW5ndGggPSAweDEwMDAwMDAwIH07
CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyBy
ZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0K
KyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9hdXhXb3JkKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhp
bmdIZWFkZXIsIG1fbGVuZ3RoKTsgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRl
ZmF1bHQgSW5kZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8v
IGNvbnRyYWN0IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJ
VCBhbmQgR0MgZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAg
ICAgICA6IG1fYXV4V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgeworICAgIH0K
KyAgICAKKyAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQor
ICAgIAorICAgIHZvaWQgc2V0TGVuZ3RoKHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChsZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoID0gbGVu
Z3RoOworICAgIH0KKyAgICAKKyAgICB1aW50MzJfdCBhdXhXb3JkKCkgeyByZXR1cm4gbV9hdXhX
b3JkOyB9CisgICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQzMl90IGF1eFdvcmQpIHsgbV9hdXhXb3Jk
ID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBjb25zdCBJbmRleGluZ0hlYWRlciogZnJvbShjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEluZGV4aW5nSGVh
ZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbUVuZE9mKFByb3Bl
cnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KHByb3BlcnR5U3RvcmFnZSk7CisgICAgfQorICAg
IAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdl
Pih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhp
cyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRo
ZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhl
IEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAg
ICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKik7CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgCisg
ICAgdWludDMyX3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVu
ZHMgb24gdGhlIGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIFRoZSBsZW5n
dGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRzIHR5cGUuCit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHko
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNp
emVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5s
aW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5
cGVfaAorI2RlZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiB1aW50OF90IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNl
bmNlIG9mIGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAg
ICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQXJyYXlT
dG9yYWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcg
dGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CisvLyBtYXNrZWQgb2Zm
IHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9i
amVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBMaXN0IG9mIGFj
Y2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5
ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZTsKK3N0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5
U3RvcmFnZTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDE1OworCisvLyBNYXNrIG9m
IGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCitpbmxpbmUgYm9v
bCBoYXNJbmRleGluZ0hlYWRlcihJbmRleGluZ1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gISEo
dHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSW5kZXhpbmdUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2EKICAg
ICAgICAgY2FsbEZyYW1lLT5nbG9iYWxUaGlzVmFsdWUoKSwKICAgICAgICAgY2FsbEZyYW1lLT5z
Y29wZSgpCiAgICAgKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNhcHR1
cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlvbkV4
ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYoZmFs
c2UpCkBAIC03NCwxMiArNzQsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAK
ICAgICAvLyBObyBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxsIGlu
IHRoZSBSZWdpc3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0
aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdlIHJl
Z2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFyZWdp
c3RlckFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQo
Yml0d2lzZV9jYXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3Rl
ckFycmF5U2l6ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJB
cnJheSksIHRoaXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3Qt
Pm1fcmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hl
Y2tlZCk7CisgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsK
ICAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0
LT5yZWdpc3Rlck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0
LCBzaW5jZSBpdCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzOCw3ICsxMzgsNyBAQCBpbmxp
bmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0Fj
dGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApA
QCAtMTUzLDggKzE1Myw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBK
U1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVu
dGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRo
QXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpA
QCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVy
QXJyYXlTaXplKCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsK
IAotICAgICAgICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50
IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0
cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0
b3JhZ2UgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywg
dXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0
aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZEFyZ3M7CiAg
ICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJzIDogMjg7CiAgICAgICAgIHVuc2lnbmVk
IG1faXNUb3JuT2ZmIDogMTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGZyb207IGkgPCB0bzsgKytpKQogICAgICAgICAgICAgcmVnaXN0
ZXJzW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CiAKLSAg
ICAgICAgbV9yZWdpc3RlckFycmF5LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdpc3RlckFycmF5
KTsKKyAgICAgICAgbV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICAgICAgbV9y
ZWdpc3RlcnMgPSByZWdpc3RlcnM7CiAgICAgICAgIG1faXNUb3JuT2ZmID0gdHJ1ZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEBueXBvcC5jb20pCiAgKgpAQCAtMjQsMTMgKzI0LDE3IEBACiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJT
cGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVl
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CkBAIC00NSw0ODAgKzQ5LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNf
SU5fQ0VMTChKU0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkp
OwogCi0vLyBPdmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5
IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAq
IFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVj
dG9yLgotLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3Bl
cnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0
IGFyZSBub3QgcmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hl
cmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lm
aWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZV
IGFzIGFuIHVuc2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFy
cmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBt
YXAuCi0vLwotLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXBy
ZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9B
UlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0
aGVyIHRoZQotLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBp
bmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8K
LS8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxs
IGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJh
eSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0
aGUgbWFwLgotLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBz
dG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVu
ZGluZyBvbiB0aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQg
aW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAg
ICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVs
YXRlZCkuCi0vLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFY
X0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4g
dGhlIHNwYXJzZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8v
IGZ1bmN0aW9uIGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMg
ZGVmaW5lZCBzdWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90
IG92ZXJmbG93LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkgbXVzdCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBz
aXplX3QpLgotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVu
c2lnbmVkPigoMHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0K
LS8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFu
ZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJp
bmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNF
X0FSUkFZX0lOREVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWly
ZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgot
I2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0Vf
VkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xs
IGFsbG9jYXRlCi0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lm
aWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9S
X0xFTiA0VQotICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cg
YSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4K
LSNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0
byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwg
YXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNl
IGEgdmVjdG9yLgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZ
X0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlz
IDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNz
SW5mbyBKU0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5m
bywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLS8vIFdlIGtlZXAgdHJh
Y2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2Ug
dXNlIHRoaXMKLS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdy
b3cgdGhlIG5leHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBi
eSB0aGUgY29uc3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1
bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0g
ICAgcmV0dXJuIGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1p
bkRlbnNpdHlNdWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQotc3RhdGljIGJvb2wgcmVqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKLXsKLSAgICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIG1lc3NhZ2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNp
c3RlbmN5Q2hlY2tUeXBlKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlv
bmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGgpCiB7Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMo
JnNfaW5mbykpOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVD
VE9SX0xFTjsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShp
bml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUs
ICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKICAgICAKLSAgICBtX3N0b3JhZ2UgPSBz
dGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1f
YWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFs
TGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUs
IEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdl
LT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0aCk7CisgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3Ro
KDApOworICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IDA7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBt
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyAgICBzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24gPSAwOwogI2VuZGlmCi0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0K
LUpTQXJyYXkqIEpTQXJyYXk6OnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKLQotICAgIC8vIENoZWNrIGZvciBsZW5ndGhzIGxhcmdlciB0aGFuIHdlIGNhbiBoYW5kbGUg
d2l0aCBhIHZlY3Rvci4KLSAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rv
ckxlbmd0aCA9IG1heChpbml0aWFsTGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwotICAgIHVuc2ln
bmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgp
OwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAu
dHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAg
ICAgICBDUkFTSCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3Rv
cmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3Jh
Z2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0
b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5D
WQotICAgIG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKLSAgICBtX3N0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gdGhpczsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRp
bWVzIG9uIHRoZSBzYW1lIG9iamVjdC4KLXZvaWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBj
ZWxsKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwp
OwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spOwotICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5s
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjph
ZGQoSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBl
bnRyeTsKLSAgICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwot
Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90
IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBv
cnRlZENhcGFjaXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWdu
ZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRl
ZENhcGFjaXR5ID0gY2FwYWNpdHk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlu
bGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJy
YXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQot
ewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5
RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZl
IGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNl
IG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJv
cGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBu
b3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAg
ICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJv
cik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VS
VChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNH
ZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikg
ewotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEp
OwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUp
OwotICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdz
KTsKLX0KLQotaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1
dERpcmVjdEluZGV4TW9kZSBtb2RlKQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJy
YXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5z
ZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3Qg
YWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2Fz
ZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAg
Ly8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAt
IHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXRE
aXJlY3QgJiYgcmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewot
ICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRl
ZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9
Ci0KLSAgICBlbnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAg
IEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAg
aWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikg
ewotICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJz
ZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17
Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsK
LX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpn
ZXQoKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dl
dHRlclNldHRlcigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRl
cikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGlu
ZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewot
ICAgIEFTU0VSVCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1p
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNw
YXJzZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1h
cCA9IG5ldyBTcGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5h
bGl6ZXIodGhpcywgZmluYWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFy
c2VNYXAoKQotewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFs
dWVNYXAgPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7
Ci0gICAgICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUo
KTsKLQotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5n
dGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRy
eSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAg
Ly8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3It
PnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQq
IG5ld1Jhd1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShzdG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgp
OwotICAgIAotICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5
U3RvcmFnZSo+KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3Jh
Z2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7
Ci0gICAgbV92ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRv
cikKLXsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVu
dHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9i
amVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OwotICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJP
YmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQotICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKLQotICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUoZXhlYyk7Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0
R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikK
LSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0
ZXIpOwotCi0gICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IGFjY2Vzc29yKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5Owot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmlj
RGVzY3JpcHRvcigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmlu
ZWQgaW4gRVM1LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4
RkZGRkZGRkYpOwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0
IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJh
eQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhh
dCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNl
Ci0gICAgICAgIC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3Rz
IG1pc3NpbmcgYXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1
ZScKLSAgICAgICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNl
ZCB0byBzZXQgYSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUn
KS4KLSAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAg
QVNTRVJUKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRo
cm93RXhjZXB0aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4
U2hvdWxkTm90VGhyb3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9k
ZShleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBM
ZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHld
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwot
ICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7Ci0KLSAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0
ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBp
cyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8v
IDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4K
LSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUo
KSkgewotICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRl
ZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJ
c0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHBy
b3BlcnR5Ci0gICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBb
W1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0
ZSB2YWx1ZXMKLSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUg
b2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9m
IHRoZSBuZXdseQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVm
YXVsdCB2YWx1ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNz
b3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0
eSBuYW1lZCBQIG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0s
IFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJl
IGRlc2NyaWJlZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmli
dXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBj
cmVhdGVkIHByb3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4K
LSAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0
b3IgZGVmYXVsdHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1
bHRzKTsKLQotICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0
b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgp
Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmll
bGQgaW4gRGVzYyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZp
ZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5
IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmll
bGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGht
ICg5LjEyKS4KLSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFw
LT5nZXQoY3VycmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0
b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAv
LyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRo
ZW4KLSAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBS
ZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAg
ICAgICAgaWYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1
bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRo
ZSBbW0VudW1lcmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRp
b24gb2YgZWFjaCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNl
bnQoKSAmJiBjdXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkK
LSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9w
ZXJ0eS4iKTsKLSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2Mp
IGlzIHRydWUsIHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlm
ICghZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxz
ZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNj
KSBoYXZlIGRpZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0
YURlc2NyaXB0b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAg
ICAgICAgLy8gOS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxl
IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1
cnJlbnQpIGlzIHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmpl
Y3QgTyBmcm9tIGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3Ig
cHJvcGVydHkuIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBw
cm9wZXJ0eeKAmHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVy
YWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0
dHJpYnV0ZXMgdG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAg
ICAgICAgLy8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVj
dCBPIGZyb20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAg
ICAgICAgLy8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHBy
b3BlcnR54oCYcyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAg
ICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0
cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJy
ZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkg
ewotICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkg
YW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAg
ICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFj
dXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwg
aWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVz
Y3JpcHRvci53cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmli
dXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEw
LmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhl
bgotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1d
IGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBj
dXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVu
dC52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJv
cGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2Ug
aXMgYWNjZXB0YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJy
ZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYg
Y3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNj
ZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBh
cmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50
IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5b
W1NldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQ
cmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKLSAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBm
aWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJl
bnQuW1tHZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0
dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4g
Rm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhl
IGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAg
b2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9y
KGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1
cm4gdHJ1ZS4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCiB2
b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0
YWJsZSkKQEAgLTUyNyw5ICs3NCw5IEBAIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUo
RXhlY1N0YXQKICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkp
OworICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwog
Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0
KCk7CiAgICAgQVNTRVJUKG1hcCk7CiAgICAgbWFwLT5zZXRMZW5ndGhJc1JlYWRPbmx5KCk7CiB9
CkBAIC02MzAsMzggKzE3NywxMCBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0CiAgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4
ICsgMS4KICAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3Bl
cnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xk
TGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJl
dHVybiB0cnVlLgogICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIGFy
cmF5LT5kZWZpbmVPd25OdW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7Ci19Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAg
IGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gTUFYX0FSUkFZ
X0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpLCBzbG90KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChpIDwg
dGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmpl
Y3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5k
KCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25JbmRl
eGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4gYXJy
YXktPkpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxOTEsNiBAQCBi
b29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwot
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpT
QXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xv
dCk7Ci0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzIwMiw2IEBAIGJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwot
ICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAg
ICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHZhbHVlLmdldCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlz
T2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBt
YXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlw
dG9yKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03
MTQsMTEgKzIwOSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoK
IHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CiAgICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMp
OwpAQCAtNzMzLDE5NiArMjIzLDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdAogICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91
bGRUaHJvdykKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNh
c2UgLSBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0
b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bV9sZW5ndGg7Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZl
Y3RvciBhcyBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAg
ICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAg
fSBlbHNlIGlmICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzT2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlz
IGlzIG5vdCBhbiBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBh
cyBhIHJlZ3VsYXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5E
RVgpKSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFw
KSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5
IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2Nh
dGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0g
ICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFy
cmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElz
UmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxl
bmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hl
Y2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwg
Y29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVj
dG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBt
YXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMs
IHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0
ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBD
b3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0
aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmly
c3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7
Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9w
ZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVj
dEluZGV4TW9kZSBtb2RlKQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBt
X3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNl
cyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJ
S0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUs
IHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUg
c3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAg
ICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0K
LSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBh
IHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJ
S0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAg
ICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtl
bHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAg
ICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xk
IHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgot
ICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhl
YywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0
aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7
Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhl
IGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtb2RlICE9IFB1
dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkgewotICAgICAgICAgICAgaWYgKG1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9
PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwotICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBl
eHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3Vy
cmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRv
aW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUp
OwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1
cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAg
Ly8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxl
dGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQt
PmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcg
cHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNBcnJheTo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4o
Y2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYg
KGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MzAsMzUgKzIzMyw2IEBAIGJvb2wgSlNB
cnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wg
SlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAg
IGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0
aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB2YWx1
ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
dGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERv
bnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFw
LT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVL
ZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICB1bnNpZ25l
ZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpAQCAtOTY2LDEyNyArMjQw
LDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2kKICAgICByZXR1
cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmpl
Y3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRl
bnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2ll
bnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAgICAv
LyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3Ig
UHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
aWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAt
PnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShp
dC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5h
cHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwg
Y29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJl
ZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25l
ZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0g
ICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRM
ZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUp
OwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgot
ICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwot
ICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQp
Y2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9u
ZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJl
ZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwotCi0g
ICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9X
KTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3Rh
dGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVl
IG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0
aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYgKG5l
d0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5ndGgg
PiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1Zl
Y3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8g
cHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAgICBp
ZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0
b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFs
bG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwgc3Rv
cmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5
U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1fc3Rv
cmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdl
LT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5n
dGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1v
dmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYg
Y2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3SW5k
ZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
LSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5
LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2b2lk
KiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkg
ICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVu
Z3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49
IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwot
ICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVy
PFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENvcHkg
dGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3Iu
Ci0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0
aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFz
ZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2Qg
bWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgdW5jbGVh
cmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhh
dmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNTRVJUKGNvdW50ID4gbV9p
bmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRl
cmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBm
YXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogCiAg
ICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNzOgpAQCAtMTA5NSw4ICsy
NjgsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8g
ICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB2ZWN0
b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0
eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNl
ZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV92
ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3Rv
ciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBp
ZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkK
QEAgLTExMDQsOCArMjc3LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShK
U0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0
aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBt
X2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgot
ICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYm
IChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhC
aWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1f
aW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25l
ZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1f
aW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29u
J3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEp
OwogCkBAIC0xMTE2LDEwICsyODksMTEgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKICAgICAvLyBJZiB0
aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0
b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFj
aXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENh
cGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0g
c3RvcmFnZS0+bV9hbGxvY0Jhc2U7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+
YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRD
YXBhY2l0eTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFz
ZSkpCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0
eSkpOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3
U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0xMTMyLDQ1
ICszMDYsNDAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAg
IC8vIElmIGl0IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBhbW91bnQgdGhhdCB3aWxsIHJlbWFpbiBi
YXNlZCBvbiBhbiBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0aGUKICAgICAvLyB2ZWN0b3Igd2l0aCBo
YWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2aW91c2x5LgogICAgIHVuc2lnbmVkIHBv
c3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAg
aWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgIC8vIEF0b21p
YyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHdoYXQg
aXMgYXZhaWxhYmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKG1fdmVjdG9yTGVuZ3Ro
IC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0
aCk7CisgICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkg
LSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVuZ3Ro
KTsKICAgICAgICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2FtZSBh
bGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgotICAgICAgICBB
U1NFUlQobmV3QWxsb2NCYXNlICE9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlIHx8IHBvc3RDYXBhY2l0
eSA8IG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBtX3ZlY3Rvckxlbmd0
aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OwotICAgIG1faW5kZXhCaWFz
ID0gbmV3U3RvcmFnZUNhcGFjaXR5IC0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwotCi0gICAg
Ly8gU3RlcCA0OgotICAgIC8vIENvcHkgYXJyYXkgZGF0YSAvIGhlYWRlciBpbnRvIHRoZWlyIG5l
dyBsb2NhdGlvbnMsIGNsZWFyIHBvc3QtY2FwYWNpdHkgJiBmcmVlIGFueSBvbGQgYWxsb2NhdGlv
bi4KLQotICAgIC8vIElmIHRoaXMgaXMgYmVpbmcgbW92ZWQgd2l0aGluIHRoZSBleGlzdGluZyBi
dWZmZXIgb2YgbWVtb3J5LCB3ZSBhcmUgYWx3YXlzIHNoaWZ0aW5nIGRhdGEKLSAgICAvLyB0byB0
aGUgcmlnaHQgKHNpbmNlIGNvdW50ID4gbV9pbmRleEJpYXMpLiBBcyBzdWNoIHRoaXMgbWVtbW92
ZSBjYW5ub3QgdHJhbXBsZSB0aGUgaGVhZGVyLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLT5tX3Zl
Y3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKiB1c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3RvcmFn
ZSwgc3RvcmFnZVNpemUoMCkpOwotCi0gICAgLy8gQXJlIHdlIGNvcHlpbmcgaW50byBhIG5ldyBh
bGxvY2F0aW9uPwotICAgIGlmIChuZXdBbGxvY0Jhc2UgIT0gbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSkgewotICAgICAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1fYWxsb2NC
YXNlLgotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOworICAg
ICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSkg
fHwgcG9zdENhcGFjaXR5IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpOwogICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxl
bmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBuZXdTdG9y
YWdlQ2FwYWNpdHkgLSBuZXdWZWN0b3JMZW5ndGg7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMsIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1Zh
bHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBu
ZXdJbmRleEJpYXM7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFy
cmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhl
biB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lm
Jy4KLSAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXApOwor
ICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwog
Ci0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsK
KyAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Z2V0KCkpIHsKICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4K
ICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKQEAgLTExOTcsNyArMzY2LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
OjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXQt
PnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1h
cC0+cmVtb3ZlKGl0KTsKQEAgLTEyMDYsMTQgKzM3NSwxNCBAQCBib29sIEpTQXJyYXk6OnNldExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KGtleXNbaV0pOwogICAgICAgICAgICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAgICAgICAgICBk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRlIHBy
b3BlcnRpZXMgZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1c2Vk
VmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90
OwpAQCAtMTIyMiw1MyArMzkxLDY1IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3
TGVuZ3RoOworICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3Rv
cmFnZTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAg
ICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
IWlzTGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVu
Z3RoIC0gMTsKLSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsK
LSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90Lmdl
dCgpOwotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgewor
ICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgdmFsdWVTbG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChp
c0xlbmd0aFdyaXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRl
eDsKLSAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OworICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBMZXQgZWxlbWVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9m
IE8gd2l0aCBhcmd1bWVudCBpbmR4LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBp
bmRleCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBv
ZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCAiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgor
ICAgICAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4g
ZWxlbWVudC4KKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJl
dHVybiBlbGVtZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAg
IC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMg
Imxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1
ZSk7Ci0gICAgLy8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IHJldHVybiBlbGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVu
dGljYWwsIHdpdGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3Niw2MyArNDU3LDc3IEBA
IEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8g
YW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dz
IGEgcmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2
ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBt
X3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBsZW5ndGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3Jl
YXRlSW5pdGlhbEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAKLSAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVz
IHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VM
WShzdG9yYWdlLT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRy
dWUpOwotICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3Rl
cCAzLmQuCi0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVu
Z3RoIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0IGNhc2UgLSBw
dXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yLgorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3Jl
cyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVO
TElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAg
bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwg
dmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAm
IDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAKLSAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVl
KTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUg
YXMgcHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFnZSk7
CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIGNvdW50KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAotICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlu
cyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNl
IHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVu
Z3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisg
ICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3Bh
cnNlSW5kZXhpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghb2xk
TGVuZ3RoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50Owor
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYg
KG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAo
dW5zaWduZWQpY291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBt
aW4odmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92
ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAg
ICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAot
ICAgICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VT
dG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3Rv
cmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCi0g
ICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0
aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0
dXJlKCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNDEsNTkgKzUzNiwzMCBAQCBi
b29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQp
CiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5z
IGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2Ug
dGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGgg
IT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBp
ZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5T
cGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4Qmlh
cyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hh
ciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNv
dW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3
QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdl
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwot
ICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAt
PSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dDYXNl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdz
ICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRT
ZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhpc09i
amVjdC0+bGVuZ3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fc3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdlLT5t
X2FsbG9jQmFzZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1fdmVj
dG9yTGVuZ3RoICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rvci0+
c2xvdCgpLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJhc2VT
dG9yYWdlICE9IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAg
ICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3Rv
cmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1ZSkg
KiB0aGlzT2JqZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQodGhp
c09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1
ZU1hcCkKLSAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0aWMg
aW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikK
IHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVt
YmVyKCk7CkBAIC0xNDEwLDExMiArNTc2LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmlu
Z1BhaXJGb3JRU29ydChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENh
bGxEYXRhJiBjYWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNl
SW5kZXhpbmdNb2RlKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBh
bGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7OworICAgICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9v
bCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051
bWJlcigpKSB7CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4g
c29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAg
IAorICAgICAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29y
dCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVx
dWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxl
CisgICAgICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFs
IHByaW1pdGl2ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXpl
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7
CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3Rl
bmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAoIWFsbFZh
bHVlc0FyZU51bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24s
IHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAv
LyBhbHNvIGRvbid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdz
IG5vIHVzZXIgdmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9y
ZGVyIG9mIGVxdWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0
b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0Zv
clFTb3J0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwog
fQogCiB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEFTU0VSVCgh
aW5TcGFyc2VNb2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZh
bHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJv
bnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxl
IGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBp
dCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhp
cyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0
b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBj
aGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNv
bnNpc3RlbnQuCi0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogICAgIAotICAgIEhlYXA6OmhlYXAo
dGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLQotICAgIGJvb2wgaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5k
ZWZpbmVkKCkpOwotICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgaXNT
b3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVl
LmlzUHJpbWl0aXZlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9v
cCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFm
dGVyCi0gICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQot
ICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5s
aW5lKGV4ZWMpOwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhl
YXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2
YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0
IHdvdWxkIGJlIE8oTikgcmF0aGVyCi0gICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAg
IAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8g
Q29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUs
IHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAgICAg
ICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3
aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkK
KyAgICAgICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hp
bmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1
cm4KKyAgICAgICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZl
Y3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCisgICAgICAgIAor
ICAgICAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0
b3IoJnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZh
bHVlcyA9IHRydWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRl
ZmluZWQoKSk7CisgICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAm
JiB2YWx1ZS5pc1ByaW1pdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1
YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJh
aXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgdmFsdWVz
W2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAg
SGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3
ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2Ug
YSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgICAgIC8vIHRoYW4g
TyhOIGxvZyBOKS4KKyAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgaWYgKGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVl
cy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9y
UVNvcnQpOwotICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1
ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KTsKKyAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAgICAg
ICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2Yo
VmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCi0g
ICAgLy8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3Qg
YmUgYSBzdGFibGUgc29ydC4KLSAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5
IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJs
ZSBzb3J0LgotICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2Yo
VmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAg
Ly8gRklYTUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUg
YSBzdGFibGUgc29ydC4KKyAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lm
eSBhIHN0YWJsZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFi
bGUgc29ydC4KKyAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vu
ZGlmCi0KLSAgICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3Ro
IG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAvLyBpbmNyZWFzZSB0aGUgbGVu
Z3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICBp
ZiAobV92ZWN0b3JMZW5ndGggPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAg
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZDsKLQotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOwotCi0gICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0
ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUg
dG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0
b3Igc3RvcmFnZSwKKyAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhl
IG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgICAgIGlmIChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgeworICAgICAgICAg
ICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5n
dGgobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNb
aV0uZmlyc3QpOworICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNv
cnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CiB9CiAKIHN0cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk3LDI1MyAr
Nzg4LDI1NyBAQCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAKIHZv
aWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9u
LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
Ly8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBm
dW5jdGlvbiBvciBpbiB0b051bWJlci4KLQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGgg
aXMgY29tcGlsZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QK
LSAgICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFn
ZS0+bV9sZW5ndGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1f
bGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZl
Y3Rvckxlbmd0aCArIChtX3NwYXJzZVZhbHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgp
IDogMCk7Ci0KLSAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZM
VHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRo
IDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhl
YyA9IGV4ZWM7Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21w
YXJlRnVuY3Rpb247Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBj
YWxsVHlwZTsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxs
RGF0YTsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQot
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5j
dGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBt
b2RpZmllZAotICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxk
aW5nIHRoZSB0cmVlIGhlcmUuCi0KLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1
bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJh
eSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQg
aW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgZm9yICg7IG51bURl
ZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1
ZSB2ID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYg
KCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0g
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAg
ICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICB0cmVlLmluc2Vy
dChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25v
cmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVt
YmVyLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21w
aWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAg
ICAvLyBpZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdl
LT5sZW5ndGgoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
IHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFy
c2VNYXAgPyBzdG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAv
LyBEZXB0aCA0NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9leGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJl
RnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5t
X25vZGVzLmdyb3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxs
ID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21w
YXJlRnVuY3Rpb24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0
aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQg
b3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25l
ZCBudW1VbmRlZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRo
ZSBhcnJheSwgaWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVz
LCBhbmQgaW5zZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZv
ciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gdjsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAg
ICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUu
aW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7
Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkg
ewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBp
ZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAv
LyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVu
b3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZl
Y3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rv
ckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGgg
PSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAg
ICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAg
aWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4g
YXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0
b3JMZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVt
RGVmaW5lZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVt
RGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKLSAgICAgICAg
ICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgKytudW1EZWZpbmVkOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgp
ID49IG51bURlZmluZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dp
bmcgbWlnaHQgYmUKKyAgICAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHku
CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFn
ZS4KKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+
OjpJdGVyYXRvciBpdGVyOworICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7Cisg
ICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgeworICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgICsraXRlcjsKICAg
ICAgICAgfQotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2Vk
IG91dC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKICAgICB9
Ci0KLSAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVm
aW5lZCk7Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0
aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQotICAgIC8vIG1v
ZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgotCi0gICAgLy8gQ29weSB0aGUgdmFsdWVz
IGJhY2sgaW50byBtX3N0b3JhZ2UuCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFy
cmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFz
dCh0cmVlKTsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewotICAg
ICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQot
Ci0gICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBt
X3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgLy8gRW5zdXJlIHRo
YXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgIGZvciAo
dW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIG1fc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBj
aGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5
OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdz
KQogewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWdu
ZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICgh
dikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9
IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3Rv
cmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlm
ICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYu
Z2V0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1f
bGVuZ3RoOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZv
aWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMt
Pmxlbmd0aCgpKTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0g
MDsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0
b3I7Ci0gICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgp
OwotICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVj
dG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBm
b3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQot
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKIHVu
c2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9y
TGVuZ3RoKTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogCi0gICAgdW5z
aWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQot
ICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7
Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgp
OwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQorICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihz
dG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRl
ZmluZWQ7Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcCkgewotICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAg
ICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxh
cmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKLSAgICAgICAgICAg
IC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgotICAgICAgICAgICAgaWYgKChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
bnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLQotICAgICAgICBkZWFsbG9jYXRlU3Bh
cnNlTWFwKCk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0VW5kZWZpbmVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0
aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uY2xlYXIoKTsKLQotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVj
ayk7Ci0KLSAgICByZXR1cm4gbnVtRGVmaW5lZDsKLX0KLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCi0KLXZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNr
VHlwZSB0eXBlKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQot
ICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0KLSAgICBB
U1NFUlQoc3RvcmFnZSk7Ci0gICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0g
ICAgICAgIEFTU0VSVCghbV9zcGFyc2VWYWx1ZU1hcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1
ZXNJblZlY3RvciA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5nZXQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7
Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAg
ICAgICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYg
dGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgICAgICArK251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNp
c3RlbmN5Q2hlY2spCi0gICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9y
TGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkg
eworICAgICAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKKyAgICAg
ICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9j
YXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5v
dCwKKyAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgdGhyb3duIGJ5IGNhbGxlci4KKyAg
ICAgICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZl
Y3Rvckxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNl
TW9kZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAg
ICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVj
ayk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNT
RVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwot
ICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAg
ICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9y
IChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVN
YXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSBpdC0+Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xl
bmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAg
ICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaXQtPnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29u
c2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1v
ZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMg
ZGVhbGxvY2F0ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIAotI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTIxLDE0MiArMjEsMzAgQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJy
YXlfaAogCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCi0jZGVmaW5lIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZIDAKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0Fy
cmF5OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGVudW0gUHV0RGly
ZWN0SW5kZXhNb2RlIHsgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0LCBQdXREaXJlY3RJbmRl
eFNob3VsZE5vdFRocm93LCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IH07Ci0KLSAgICBzdHJ1
Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAg
ICAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJz
ZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChF
eGVjU3RhdGUqLCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xv
dCYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsK
LSAgICAgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1h
cCB7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwg
V1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBO
b3JtYWwgPSAwLAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5n
dGhJc1JlYWRPbmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlw
ZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQg
QWRkUmVzdWx0OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAg
OiBtX2ZsYWdzKE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOwotCi0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0U3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0
aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBz
ZXRMZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0
YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0
YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUpOwot
ICAgICAgICBBZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJh
dG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQotICAgICAgICAv
LyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3Vs
dCBvZiB0aGUgZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFw
LnJlbW92ZShpdCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5y
ZW1vdmUoaSk7IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhl
IGNvbnRlbnRzIG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1
cm4gbV9tYXAuZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuaXNFbXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8gT25seSBhbGxvdyBjb25z
dCBiZWdpbi9lbmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IE1hcCBtX21hcDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAgICAgc2l6ZV90IG1fcmVw
b3J0ZWRDYXBhY2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFj
dHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRv
IGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVjdCBieSBwb2ludGluZyB0
byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3Qs
IHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4g
IEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0
aGUgQXJyYXlTdG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8g
c2hpZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFi
bGUgYnkgdXNpbmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6
ZW9mKEpTVmFsdWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0gICAgICAgIHVuc2lnbmVk
IG1fbGVuZ3RoOyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhlIGFycmF5Ci0gICAgICAg
IHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxsb2NCYXNl
OyAvLyBQb2ludGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBp
bmcgdGhpcyBwb2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBs
ZWFrIGRldGVjdG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIC8vIE5l
ZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCi0gICAgICAgIHVp
bnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBtX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0cl90IG1fcGFkZGluZzsK
LSNlbmRpZgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Ci0KLSAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgYWxsb2NCYXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9hbGxvY0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0g
ICAgfTsKLQogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBXYWxrZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKKyAgICBwdWJsaWM6
CisgICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQotICAgICAgICAgICAgLCBtX2luZGV4QmlhcygwKQotICAgICAgICAg
ICAgLCBtX3N0b3JhZ2UoMCkKLSAgICAgICAgICAgICwgbV9zcGFyc2VWYWx1ZU1hcCgwKQorICAg
ICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgICAgICAgICAgOiBKU05vbkZp
bmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNBcnJheSogdHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwotICAgIAogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGlj
IHZvaWQgZmluYWxpemUoSlNDZWxsKik7Ci0KICAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0
ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7
CiAKICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNv
bnN0cnVjdGlvbiBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKQEAgLTE2OSwyNiArNTcsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6OnB1
dERpcmVjdCogbWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBu
b3QgY29uc3VsdGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KLSAg
ICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJpbGl0eSBhbmQgcmVhZC1vbmx5IHBy
b3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0IGlzIHBhc3NlZCBhcyB0aGUg
bW9kZSAodGhlIGRlZmF1bHQpLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJ
bmRleE1vZGUgbW9kZSA9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAg
ICAgICBzZXRJbmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIG1vZGUpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERB
VEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAg
ICAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJl
Z0V4cE1hdGNoQXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkLCBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0yMDIsMTQyICs3NSw4NCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGNvdW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5z
aWduZWQgY291bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyBy
ZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAg
ICAgICAgSlNWYWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lk
IHNldEluZGV4KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJy
YXlTdG9yYWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5tX2xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsg
MTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5k
ZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBB
cnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uKTsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUg
bmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2Ut
Pm1faW5pdGlhbGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRp
YWxpemVkIHNldCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAg
ICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0
aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1f
aW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAg
ICAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlubGluZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3Ro
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6
ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgp
OwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0
IHRoZSBudW1iZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFs
TGVuZ3RoLgotICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbklu
ZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NF
UlQobV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1f
c3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAg
ICAgICByZXR1cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAg
ICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwog
ICAgICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50
MzJfdCBsZW5ndGgpOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBzdG9yYWdlT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5LCBtX3N0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFy
eU1vZGUoSlNHbG9iYWxEYXRhJik7Ci0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdl
U2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFi
bGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBt
X3NwYXJzZVZhbHVlTWFwOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlT3JaZXJvKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gIW1hcCB8
fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHNl
dExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwotICAgICAgICB2b2lk
IHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVz
Y3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKLSAgICAgICAgYm9vbCBkZWZpbmVP
d25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFw
KEpTR2xvYmFsRGF0YSYpOwotICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAot
ICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4
TW9kZSk7Ci0KLSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgY29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CisgICAgfTsKIAotICAg
ICAgICBlbnVtIENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywg
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAg
ICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENv
bnNpc3RlbmN5Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBU
aGUgdmFsaWQgbGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFz
OyAvLyBUaGUgbnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3Jh
Z2UuCi0gICAgICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwotCi0gICAgICAgIC8vIEZJWE1F
OiBNYXliZSBTcGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpT
Q2VsbD8KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKKyAg
ICBpbmxpbmUgQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCisgICAgeworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0
YSwgMCwgMCwgdHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCks
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3Rv
cmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBh
Y3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGJ1dHRlcmZseTsK
KyAgICB9CiAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KLSAgICB9OworICAgIEJ1dHRlcmZs
eSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAogICAgIGlubGluZSBK
U0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFs
RGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICBhcnJh
eS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5p
dGlhbExlbmd0aCk7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlubGluZSBKU0Fy
cmF5KiBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAg
ewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
LSAgICAgICAgcmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xv
YmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGlmICh2
ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIAorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmZyb21CYXNlKHRlbXAsIDAsIDApOworICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpID0gaW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5n
dGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgg
PSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJh
eSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1NiwzMCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+
Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNB
cnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxs
KCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
aXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBi
ZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3Vj
aCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4g
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSAr
Ci0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3Qg
YmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNk
ZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4
RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2
YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0
aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2Vl
IDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXpl
KHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rv
ckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFz
c2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cu
Ci0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92
ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBw
cm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29y
cmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0
b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJh
eVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAg
ICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFy
Z0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVu
Y3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5k
KGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3Mt
PmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVu
dChpKSk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBi
b3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdz
LmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91
bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+
YXJndW1lbnQoaSkpOwogCkBAIC0xMTIsOCArMTEyLDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246
OmZpbmlzaENyZWF0aW9uKEV4ZQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1
dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAot
ICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmFyZ3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0
dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgcHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2Fs
bGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERv
bnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBnbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhl
YyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAogdm9pZCBKU0JvdW5k
RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQg
SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwogU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0
dXJlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAg
ICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVj
dHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRl
LWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9k
VGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
ICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0
YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVj
KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250
RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBA
IC0yNTUsNyArMjU1LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZQogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
KSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhy
b3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFj
Y2Vzc29yKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQCBib29s
IEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dU
eXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vz
c29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVj
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMzAzLDcgKzMwMyw3IEBAIGJv
b2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgaWYgKHRoaXNP
YmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9v
bCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJv
d1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNj
ZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVy
cm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0zMTYsNyArMzE2LDcgQEAg
Ym9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2Jq
ZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIEpT
RnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
KyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0zOTYsMTQgKzM5NiwxNCBAQCBib29s
IEpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CiAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGlm
ICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhj
ZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFs
dWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnBy
ZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwog
ICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxs
ZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1v
ZGUoKSkgewogICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAg
ICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlO
YW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAg
IHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIHZhbHVl
Q2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9y
LnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShl
eGVjLCB0aGlzT2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7
CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJS
ZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25n
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTIwNCw2ICsyMDUsNyBA
QCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgcmVnRXhwU3Ry
dWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTaGFyZWRT
eW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0
cnVjdHVyZUNoYWluU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzcGFyc2VBcnJheVZhbHVlTWFwU3Ry
dWN0dXJlLnNldCgqdGhpcywgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVu
dGlmaWVyVGFibGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
dHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3Bh
cnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlk
ZW50aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgR2V0dGVyU2V0dGVy
KiBwcm90b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHJvdG9B
Y2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIDAsICIiLCBnbG9iYWxGdW5jUHJvdG9HZXR0ZXIpKTsKICAgICBwcm90b0Fj
Y2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUo
ZXhlYywgdGhpcywgMCwgIiIsIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwotICAgIG1fb2JqZWN0
UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwg
RG9udEVudW0pOworICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBB
Y2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUo
KS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTE4LDggKzUxOCw4IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFBy
b3AKICAgICBpZiAobV9pc0FycmF5KSB7CiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1f
b2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgdmFsdWUgPSBh
c0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAobV9p
c0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4UXVpY2tseShp
bmRleCkpCisgICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJ
bmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KG1fb2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGlmICghbV9vYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4
ZWMsIGluZGV4LCBzbG90KSkKQEAgLTY4NCw4ICs2ODQsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1
ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldElu
ZGV4KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRl
eChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXkt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGluVmFsdWUg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChhcnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChh
cnJheSwgbV9leGVjLCBpbmRleCwgc2xvdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJr
aXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxUaGlzLmgiCkBAIC0zOCwxMiArNDAsMTkgQEAKICNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKICNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUg
c2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwor
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxh
c3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwq
IGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsK
QEAgLTg2LDI5ICs5NSw4MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5h
bWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2Us
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXpl
X3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9y
YWdlU2l6ZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkg
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkp
OwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9
IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3Bl
cnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2Ug
KyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50
VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9y
YWdlIC0gMTsKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6
Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChV
TkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAg
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
LT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9y
LmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkg
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBz
dG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1j
dXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAg
ICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdl
QmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAg
Km5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFy
cmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygq
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQor
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdC
dXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4K
KyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJr
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQog
CiB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC0xMjIsOSArMTgyLDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+
b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1
dHRlcmZseSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9u
RmluYWxPYmplY3QoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247CkBAIC0xNDIsOSArMjAyLDkgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVj
dC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2Jq
ZWN0LT52aXNpdE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+
c3RydWN0dXJlKCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1
dHRlcmZseSkKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmlu
YWxPYmplY3QoKSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAg
LTE2MSwxMCArMjIxLDUwIEBAIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWMKICAgICByZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhh
dCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0
aGF0IGl0IGlzIG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3du
UHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwg
c2xvdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAg
ICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0
ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkg
eworICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IC8vIEVDTUEgOC42LjIuMgpAQCAtMTc0LDYgKzI3NCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09i
amVjdCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKyAgICAKKyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8g
Q2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlw
ZSBjaGFpbgogICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzM0MiwxNDYgQEAgdm9p
ZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
dmFsdWUsIHNsb3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgp
OworICAgIAorICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgp
KSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAg
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFVwZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4K
KyAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbmd0
aCA9IHByb3BlcnR5TmFtZSArIDE7CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVu
Z3RoKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAg
ICAgfSBlbHNlIGlmICghdmFsdWVTbG90KQorICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAKKyAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4
aW5nQ29uc2lzdGVuY3koKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisKKyAgICBpZiAo
IW1hcCkKKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsK
KworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisK
KyAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAg
ICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5v
IG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBh
cmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkp
CisgICAgICAgIENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOworICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgbWFwKTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKK30KKwordm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgs
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsIG9s
ZFR5cGUgPT0gTm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFs
c2UsIDAsCisgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAg
ICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2Uq
IHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1
bHQtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAg
IHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgcmVz
dWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5D
WQorICAgIHJlc3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9i
YWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxE
YXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFy
cmF5OgorICAgIGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKGds
b2JhbERhdGEsIDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1v
ZGUoKTsKKyAgICAgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0yNjksMTAgKzUxMywxOCBAQCBi
b29sIEpTT2JqZWN0OjphbGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+YWxsb3dzQWNjZXNzRnJvbShnbG9i
YWxPYmplY3QsIGV4ZWMpOwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RB
Y2Nlc3NvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0
dGVyU2V0dGVyKCkgJiYgKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogCisgICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgs
IHZhbHVlLCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgcHV0RGlyZWN0
SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwog
CkBAIC0zMDQsNiArNTU2LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXgKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlz
T2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJl
aWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1ODgsNDUgQEAg
Ym9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xv
dChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KSk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90
KSB7CisgICAgICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
LS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmdldCgpKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAg
LTQ2NSw2ICs3NTYsNTEgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dAogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3Qu
IFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhN
RTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5
IGludGVnZXIKKyAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJh
eXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNl
cnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5
LgorICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAg
ICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0p
CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBrZXlzOworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFw
LT5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAg
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJz
dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQo
a2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFt
ZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0
LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdl
dFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CkBAIC01MTUsOCArODUxLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXpl
KEpTR2xvYmFsRGF0YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAg
ICAgICAgYXNBcnJheSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAg
ICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0
ZW5zaWJsZSgpKQogICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpw
cmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0K
QEAgLTU3MywxMSArOTA4LDExIEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2Jh
bERhdGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxs
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQogewotICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRl
cihsb2NhdGlvbi0+Z2V0KCkpLT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVy
RnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRl
cigpKSB7CiAgICAgICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBv
ZmZzZXRGb3JMb2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFi
bGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0g
ZWxzZQpAQCAtNjAzLDI2ICs5MzgsNTI3IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUlu
aGVyaXRvcklEKEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFn
ZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRl
eGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5N
YXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBv
bGREZXNjcmlwdG9yKQogewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYg
KGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9y
LnZhbHVlKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJ
bk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09i
amVjdCogZ2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
KQorICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAg
ICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAg
ICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgSlNP
YmplY3QqIHNldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQo
KSkKKyAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisgICAg
ICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAg
ICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisKKyAgICAgICAg
R2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOworICAg
ICAgICBpZiAoZ2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5n
bG9iYWxEYXRhKCksIGdldHRlcik7CisgICAgICAgIGlmIChzZXR0ZXIpCisgICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKKworICAgICAg
ICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Cisg
ICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVy
cmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7
CisgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOworfQorCisvLyBEZWZpbmVkIGluIEVTNS4xIDgu
MTIuOQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7CisK
KyAgICBpZiAoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKKyAgICAgICAgLy8gRmFzdCBjYXNl
OiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYg
YXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQorICAg
ICAgICAvLyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3Npbmcg
YXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKKyAgICAg
ICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQg
YSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KKyAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIDAsIHRocm93RXhj
ZXB0aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxk
Tm90VGhyb3cpOworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
fQorCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEu
IExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7
CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tF
eHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50
IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAg
Ly8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhl
bgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
ZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9y
IElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEg
cHJvcGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0s
IFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmli
dXRlIHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1
ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUg
b2YgdGhlIG5ld2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBk
ZWZhdWx0IHZhbHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nl
c3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3Bl
cnR5IG5hbWVkIFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRd
XSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBh
cmUgZGVzY3JpYmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5
IGNyZWF0ZWQgcHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVl
LgorICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZWZhdWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmll
cihqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnRE
ZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVm
YXVsdHMpOworCisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAs
IGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnNldExlbmd0aChpbmRleCArIDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBp
cyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2Mg
YWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERl
c2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVu
dCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVu
dCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhl
eGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUg
W1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFi
bGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVs
ZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBv
dGhlci4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJy
ZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAg
ICB9CisKKyAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRo
ZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRh
RGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZl
cmVudCByZXN1bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3Io
KSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gOS5h
LiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
Y2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIp
OworICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRy
dWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEK
KyAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFBy
ZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzCisg
ICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1
dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bworICAg
ICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMuIEVs
c2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nl
c3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVzZXJ2
ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0NvbmZp
Z3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBh
bmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVm
YXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9y
KCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEw
LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9y
KERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBb
W0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAv
LyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHBy
ZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVW
YWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2Vu
dCgpKTsKKyAgICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJy
ZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYg
dGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQg
YW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0
b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRo
ZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAg
ICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNl
LgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNj
cmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBm
aWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFt
ZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2
YWx1ZSBvZiB0aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJ
bk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAg
IHJldHVybiB0cnVlOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKGdsb2Jh
bERhdGEpOworICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgLy8gSXQncyBpbXBv
cnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQot
ICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgordm9pZCBK
U09iamVjdDo6ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBpZiAoQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKSkKKyAgICAgICAgYXJyYXlT
dG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSog
c3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxE
YXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMg
b3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0
KCk7CiAgICAgCi0gICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0
T2ZMaW5lU3RvcmFnZS5nZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9y
YWdlID0gMDsKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJl
bnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAg
IC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJl
ZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFT
U0VSVChpc0V4dGVuc2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBp
ZiBuZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0
IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkg
dG8gZ3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rv
ckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAt
IHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBh
bmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9j
YXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgbWFwLT5wdXRFbnRy
eShleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFrZSBHQ0Mn
cyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlwZS1wdW5u
ZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsKLSAgICBp
ZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBDUkFTSCgpOwotICAg
IG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkg
KyBuZXdTaXplICsgMTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0
aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMg
bm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlz
RXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJl
YWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1
ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFs
bCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFw
LgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAg
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3Bl
cnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0
c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoaW5kZXhp
bmdTaG91bGRCZVNwYXJzZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxE
YXRhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVu
c2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9i
YWxEYXRhLCAwLCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlIG1vZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7
CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOworCisgICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
CisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwog
ICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJv
cGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KSAqIG9sZFNpemUpOworICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5
LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5z
aWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhl
IHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgKKyAgICAgICAgICAgICAgICAhYXR0cmlidXRl
cworICAgICAgICAgICAgICAgICYmIChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9y
TGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0g
cmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFu
ZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBh
bGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBt
YXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7Cisg
ICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAg
ICAgICAgaWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KSB7CisgICAgICAg
ICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRh
YmxlLgorICAgICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5l
IHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9
CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVu
Z3RoKTsKKyAgICB9CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1
cm4gbmV3UHJvcGVydHlTdG9yYWdlOworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBt
YXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8g
V2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNl
dCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4K
KyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciArIG1hcC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1
dGVzIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkg
fHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1
dGVzLCBtb2RlKTsKKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0
b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJh
eVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVz
SW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUg
dmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKwor
ICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVT
bG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVT
bG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
UHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJh
eSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VS
VChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsK
KyAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQorICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5
U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAg
ICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IG1vZGUsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNp
Z25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25l
ZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAg
IHVuc2lnbmVkIG1heEluaXRMZW5ndGggPSBzdGQ6Om1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBV
KTsKKworICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5j
cmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghY3VycmVudFZlY3Rv
ckxlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0
aCwgbGFzdEFycmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5
IGVxdWl2YWxlbnQgdG86CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0
aCAqIDMgKyAxKSAvIDI7CisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExl
bmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlz
IGZvcm0gaXMgbm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFz
ZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJl
ZExlbmd0aCAmIDEpOworICAgIH0KKworICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVz
aXJlZExlbmd0aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2VkTGVu
Z3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gc3RkOjptaW4oaW5jcmVhc2Vk
TGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsK
KyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNh
c2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsK
KyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3Ro
KCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3Ro
KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0
aCwgbGVuZ3RoLCBkZXNpcmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgp
Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFs
bHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVl
cyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhh
dmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmlj
aWVudGx5LgorICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJh
eVN0b3JhZ2UoKTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhC
aWFzOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
OworICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIG5l
d1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOworCisgICAgLy8g
RmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVh
bGxvYyBtYWtlcyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7CisgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJh
eVJpZ2h0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0
ZXJmbHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0g
bmV3QnV0dGVyZmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNp
dHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4K
KyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAg
ICAgIGdsb2JhbERhdGEsCisgICAgICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAgbmV3
SW5kZXhCaWFzLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7
CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0
OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sK
KyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBp
ZiAoIXN0b3JhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYg
KHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+
bV9zcGFyc2VNYXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAg
ICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAg
ICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qg
d2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNr
KQorICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IpOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0
b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsK
KyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFy
c2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAg
ICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJU
KGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQp
OworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisg
ICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQo
KTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAg
ICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1
dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChu
ZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVu
Y3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkKKyAgICAvLyBj
YXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVy
ZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0NjYsNDYgQEAgYm9vbCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwog
ICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5n
ZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0g
c3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQg
PT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTY1OCw3ICsxNTMwLDcgQEAgc3RhdGljIGJvb2wgcHV0
RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRH
ZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsK
ICAgICAgICAgICAgIGlmIChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKICAgICAgICAg
ICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3Jp
cHRvci5zZXR0ZXJPYmplY3QoKSk7Ci0gICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vz
c29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRl
cyB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgbmV3VmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwpAQCAtNjgzLDEwICsxNTU1LDE5IEBAIHN0YXRpYyBib29sIHB1dERl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLnNldHRl
clByZXNlbnQoKSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwogCi0gICAgdGFyZ2V0LT5wdXREaXJl
Y3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0
dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CisgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVj
LCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICB1bnNpZ25lZCBhc0luZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAo
YXNJbmRleCA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHB1dERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAg
ICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgYXNJbmRleCwgdmFsdWUpOworfQorCiBjbGFzcyBEZWZp
bmVPd25Qcm9wZXJ0eVNjb3BlIHsKIHB1YmxpYzoKICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3Bl
KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTcwNCwyNiArMTU4NSwyNiBAQCBwcml2YXRlOgogICAgIEpT
R2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dF
eGNlcHRpb24pCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRo
ZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJl
bnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3
aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNo
YW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmln
dXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVk
LiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBE
ZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2Ug
aGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBj
dXJyZW50KSkgeworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5s
ZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0
ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAg
IGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2Jq
ZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwog
ICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1
cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAo
ZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTYzMCw4IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBp
cyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkK
ICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYg
KCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVy
biBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjQzLDgg
QEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChj
dXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9y
KGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8v
IENoYW5naW5nIHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0
eQpAQCAtNzg0LDggKzE2NjUsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRl
c2NyaXB0b3IpICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMs
IG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJl
dHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
ZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQp
OwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4g
ZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjgzLDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nl
c3NvciA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAg
aWYgKCFhY2Nlc3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciog
Z2V0dGVyU2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjkz
LDM3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAg
Z2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdl
dHRlck9iamVjdCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRv
cikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWdu
ZWQgYXR0cnMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KTsKLSAgICBvYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vz
c29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNl
cHRpb24pCit7CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhlIGlu
ZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkg
eworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkp
IG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAgICAv
LyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBpbmRl
eCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8g
aW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3du
UHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgi
LCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdh
eXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICByZXR1
cm4gb2JqZWN0LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+ZGVm
aW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xv
dyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAg
ICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMiBA
QAogI2RlZmluZSBKU09iamVjdF9oCiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAi
QXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUg
IkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgi
CisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlT
bG90LmgiCiAKLSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisj
aW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4NCwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0
ZXIvc2V0dGVyCiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAg
IENPTVBJTEVfQVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9u
bHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQo
RG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJz
dEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwgRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0
cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUsIEZ1bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENP
TVBJTEVfQVNTRVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNzb3Jf
aXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0ZpbmFsT2Jq
ZWN0OwogCiAgICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2LDcgKzEw
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOwotCisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsK
QEAgLTEyMCwxOCArMTMyLDE5NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFs
bG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlM
ZW5ndGgoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9y
TGVuZ3RoKCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBj
YXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhl
IHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29y
cyBhcmUgbm90IGNhbGxlZC4KKyAgICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJp
bGl0eSBhbmQgcmVhZC1vbmx5IHByb3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGly
ZWN0IGlzIHBhc3NlZCBhcyB0aGUgbW9kZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAvLyBUaGlz
IG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVt
ZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1
dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVp
Y2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIDAsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBBIG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBhbmQgcHV0RGly
ZWN0SW5kZXguCisgICAgICAgIHZvaWQgcHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBK
U1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAg
aWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9y
YWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0
aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOwor
ICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVz
SW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sg
d2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9w
ZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9u
SW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAg
IEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xl
bmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkg
cHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIFVOVVNFRF9Q
QVJBTShzdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwg
bmV3TGVuZ3RoID09IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0
aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29t
cGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0ds
b2JhbERhdGEmKTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5j
aGVja2VkIHZlc2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUg
cHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKICAgICAgICAgLy8gIC0gYWNjZXNzb3Jz
IGFyZSBub3QgY2FsbGVkLgogICAgICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVj
dGVkIChhZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZl
biBhdHRyaWJ1dGVzKQorICAgICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVk
IHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpT
R2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9
IDApOwogICAgICAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEpTR2xv
YmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Cisg
ICAgICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBib29sIHByb3BlcnR5SXNF
bnVtZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29u
c3Q7CiAKQEAgLTE0Nyw2ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKQEAgLTIwMyw4ICszOTQsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2Fm
ZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBv
dXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgp
OyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4g
bV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
b3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9u
Rm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3
LDcgKzQyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5s
aW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0g
bG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CkBAIC0yNjUsMjEgKzQ1OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9v
bCBpc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgp
LT5pc1NlYWxlZChnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRnJvemVuKGdsb2JhbERh
dGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyByZXR1cm4gc3RydWN0dXJlKCkt
PmlzRXh0ZW5zaWJsZSgpOyB9CisgICAgICAgIGJvb2wgaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNFeHRlbnNpYmxlKCkKKyAgICAgICAg
ICAgICAgICB8fCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcnNlY3RzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7CisgICAgICAgIH0KIAogICAg
ICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5j
dGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxp
bmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAg
dm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7
CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRl
cmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAg
IAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAg
ICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZM
aW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVT
dG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVj
dHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAg
LTI5Myw3ICs0ODgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYs
MTQgKzUyMCw3OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0
ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAg
Ly8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmpl
Y3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
KyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9
IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVy
dHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVy
Zmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAg
ICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9k
ZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2Vy
dCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhh
c0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91
IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAg
ICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4K
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhh
cyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8g
cGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8g
b2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4n
dCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5z
dXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0Fu
ZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAg
ICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBE
ZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAh
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0K
KyNlbHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93LCBBcnJheVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3Ro
KEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChKU0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzYwNCwzMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5n
KCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5
U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAg
Ym9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAg
IGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBs
b2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAg
IGNvbnN0IEhhc2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNH
bG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUs
IEFycmF5U3RvcmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJy
ZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRl
c2lyZWRMZW5ndGgpOwogCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFn
ZTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93
KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIAorICAg
IHByb3RlY3RlZDoKKyAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICAgICAgCiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX3BhZGRp
bmc7CiAjZW5kaWYKICAgICB9OwpAQCAtMzcyLDggKzY1Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICBleHBs
aWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgICAgIDogSlNP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCkBAIC00NTYsMTEgKzc0MCw2IEBAIGlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3QKICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3QsIG1f
aW5saW5lU3RvcmFnZSk7CiB9CiAKLWlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwg
bV9vdXRPZkxpbmVTdG9yYWdlKTsKLX0KLQogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFs
T2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlw
ZSgpID09IEdsb2JhbE9iamVjdFR5cGU7CkBAIC00OTEsMTggKzc3MCwxNyBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6aXNHbG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9w
ZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5
KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwotICAgIGlmICghc3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVT
aXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkp
OwotICAgIH0KKyAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAmJiAhaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpKTsKICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291
dE9mTGluZVN0b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0
dGVyZmx5ID0gYnV0dGVyZmx5OworfQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAg
IG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVj
dEVtcHR5T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01
NDAsOSArODE4LDkgQEAgaW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQog
ICAgIHJldHVybiBhc09iamVjdCh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU09iamVj
dDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK2lubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgOiBKU0NlbGwo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIHRoaXMsIDApCisgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5
MCwxNSArODY4LDE3IEBAIGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUK
IAogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0g
Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7Ci0g
ICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxv
Y2F0aW9uLT5pc0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5
U2xvdChzbG90LCBsb2NhdGlvbik7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKExJ
S0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXREaXJlY3RPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAg
ICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZv
ckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZh
bHVlLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rp
b24gdGhpcyBsYXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODQsNiAr
OTY0LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0
cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBI
ZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVy
dHlOYW1lLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYg
KHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKQEAgLTcxMiwxMSArOTkzLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFp
c0V4dGVuc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3Jh
Z2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VD
YXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAg
ICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgp
KTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0
dXJlKCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKQEAgLTczMCwxMyArMTAxMSwx
MyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+
c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwg
b2Zmc2V0KSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGlu
ZVN0b3JhZ2UoKTsgCisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9y
YWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRl
cmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERp
cmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBp
cyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5v
dCBjdXJyZW50bHkgY2FjaGFibGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFu
IHVuY2FjaGFibGUgc3RhdGUuCkBAIC04MDMsOSArMTA4NCw5IEBAIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAg
IGdsb2JhbERhdGEsIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3
U3RydWN0dXJlKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBu
ZXdTdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5k
UmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlKQpAQCAtODM5LDExICsxMTIwLDExIEBAIGlubGluZSB2b2lk
IEpTT2JqZWN0OjpwdXREaXJlY3QoSlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7
CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFj
Y2Vzc29yKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9y
YWdlKCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBp
ZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBu
ZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVP
YmplY3QodmFsdWUpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0
b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0
dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9m
ZnNldCwgdmFsdWUpOwogfQogCkBAIC05MzUsNiArMTIxNiwxMSBAQCBBTFdBWVNfSU5MSU5FIFJl
Z2lzdGVyIFJlZ2lzdGVyOjp3aXRoQ2FsCiAgICAgcmV0dXJuIHI7CiB9CiAKK2lubGluZSBzaXpl
X3Qgb2Zmc2V0SW5CdXR0ZXJmbHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVy
biBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlBy
b3BlcnR5U3RvcmFnZSgpOworfQorCiAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBwYXRjaGluZyBj
b2RlIHdoZXJlIHlvdSB3YW50IHRvIGVtaXQgYSBsb2FkIG9yIHN0b3JlIGFuZAogLy8gdGhlIGJh
c2UgaXM6CiAvLyBGb3IgaW5saW5lIG9mZnNldHM6IGEgcG9pbnRlciB0byB0aGUgb3V0LW9mLWxp
bmUgc3RvcmFnZSBwb2ludGVyLgpAQCAtOTQyLDE0ICsxMjI4LDE0IEBAIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXIgUmVnaXN0ZXI6OndpdGhDYWwKIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVU
b1BhdGNoZWRTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRP
ZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICByZXR1cm4gSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5l
U3RvcmFnZSgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFn
ZShvZmZzZXQpOworICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNl
dEluQnV0dGVyZmx5KG9mZnNldCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSArIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KIAogaW5saW5lIGlu
dCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAo
aXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBB
U1NFUlQoIShKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0
KTsKIH0KQEAgLTk1Nyw3ICsxMjQzLDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNl
KFByb3BlcnR5TwogaW5saW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
IHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlT
dG9yYWdlKCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw2ICs2Nyw5IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVy
dHlOYW1lSXQKICAgICBpZiAoby0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcygpKQogICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsK
ICAgICAKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIoby0+c3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgCiAg
ICAgc2l6ZV90IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgbyk7CiAgICAg
U3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gby0+c3RydWN0dXJlKCktPnByb3RvdHlw
ZUNoYWluKGV4ZWMpOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVj
dDo6ZGVsZXRlUHJvcGVydHkKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3ltYm9sVGFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7
CiAgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlKCktPmVuZCgpOwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OmdldE93blByb3BlcnR5CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KICAgICAKLSAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIHVuc2lnbmVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIAogcHJvdGVjdGVkOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNv
cmQgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSA9IDEgPDwgMzsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSXNF
bnZpcm9ubWVudFJlY29yZCA9IDEgPDwgNDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90ID0gMSA8PCA1OwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBPdmVycmlkZXNWaXNpdENoaWxkcmVuID0gMSA8PCA2OwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0gMSA8PCA3OwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDg7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIEludGVyc2VjdHNPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gPSAxIDw8IDY7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDc7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDg7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgOTsKIAog
ICAgIGNsYXNzIFR5cGVJbmZvIHsKICAgICBwdWJsaWM6CkBAIC03NSw4ICs3Niw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIG92ZXJyaWRlc0hhc0luc3RhbmNlKCkgY29uc3QgeyBy
ZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNIYXNJbnN0YW5jZSk7IH0KICAgICAgICAgYm9v
bCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZs
YWdzMShJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIG92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90KTsgfQorICAgICAgICBib29sIGludGVyc2VjdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MxKEludGVyc2VjdHNPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbik7IH0KLSAgICAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKTsg
fQorICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MyKE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CiAgICAgICAgIGJv
b2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdz
MihQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcpOyB9CiAKICAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBmbGFnc09mZnNldCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRl
cmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgi
CiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTY0MCw3ICs2NDIsMTMgQEAgSlNWYWx1
ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lvbjoKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpLT5wdXREaXJlY3QobV9l
eGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXJTdGFjay5sYXN0KCksIGxhc3RWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iamVjdFN0YWNrLmxh
c3QoKSk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lIGlkZW50ID0gaWRlbnRpZmllclN0
YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0gaWRlbnQuYXNJbmRleCgp
OworICAgICAgICAgICAgICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGksIGxhc3RW
YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvYmplY3Qt
PnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAg
ICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRva0NvbW1hKQogICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmplY3RTdGFydEV4cHJlc3Npb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVk
ZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNiBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE9i
amVjdFByb3RvdHlwCiAKIE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHVjdHVyZSkKICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHVjdHVyZSkKLSAgICAsIG1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJ
bnQzMk5hbWVzKHRydWUpCiB7CiB9CiAKQEAgLTc3LDM0ICs3Niw2IEBAIHZvaWQgT2JqZWN0UHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0cKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwogfQogCi12b2lkIE9iamVjdFByb3RvdHlwZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgT2JqZWN0UHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganND
YXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpOwotICAgIEJhc2U6OnB1dChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX2hhc05v
UHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyAmJiBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9oYXNOb1Byb3Bl
cnRpZXNXaXRoVUludDMyTmFtZXMgPSBmYWxzZTsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5cGU6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQotewotICAgIE9iamVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxPYmplY3RQcm90b3R5cGUqPihvYmplY3QpOwotICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6
ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dp
dGhVSW50MzJOYW1lcyAmJiBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUlu
dDMyTmFtZXMgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgT2JqZWN0
UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICBPYmplY3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBl
Kj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQz
Mk5hbWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
LX0KLQogYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90ICZzbG90KQogewogICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNOb25GaW5h
bE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganND
YXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNCArNTAsOCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLQogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwotCi0gICAgICAgIGJvb2wgbV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXM7
CiAgICAgfTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEy
NzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBB
U1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmlu
ZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5
U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQ
cm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVy
dHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGly
ZWN0SW5kZXhNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFB1dERpcmVjdEluZGV4TW9kZV9oCisjZGVmaW5lIFB1dERpcmVjdEluZGV4
TW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFB1dERpcmVjdEluZGV4TW9kZSB7IFB1
dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCwgUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdywg
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFB1dERpcmVjdEluZGV4TW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTI3
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDM3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwo
UmVnRXhwTWF0Y2hlc0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE1hdGNoZXNBcnJh
eTo6c19pbmZvID0geyJBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5KX07CiAKK1JlZ0V4cE1hdGNoZXNBcnJheTo6UmVn
RXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0
ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVn
RXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5
KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgICwgbV9zdGF0ZShSZWlmaWVkTm9uZSkKK3sK
KyAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7CisgICAgbV9yZWdFeHAu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Cit9CisKK1JlZ0V4cE1hdGNoZXNBcnJheSog
UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5w
dXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJl
c3VsdCk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgUmVnRXhwTWF0Y2hlc0Fy
cmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGJ1dHRl
cmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQp
OworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gYXJy
YXk7Cit9CisKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjggKzI4LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwg
UmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICAgICAgICAgIDogSlNBcnJh
eShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
KQotICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgICAgICAgICAsIG1fc3RhdGUo
UmVpZmllZE5vbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faW5wdXQuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGlucHV0KTsKLSAgICAgICAgICAgIG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0
aGlzLCByZWdFeHApOwotICAgICAgICB9CisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0ds
b2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhw
KiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIGVudW0gUmVpZmllZFN0YXRlIHsgUmVpZmllZE5v
bmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwogCiAgICAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhw
LCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQpOwotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkg
UmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGFycmF5LT5maW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgSlNTdHJpbmcqIGxlZnRD
b250ZXh0KEV4ZWNTdGF0ZSopOwogICAgICAgICBKU1N0cmluZyogcmlnaHRDb250ZXh0KEV4ZWNT
dGF0ZSopOwpAQCAtNTgsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRl
cmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCkBAIC0xMTMsMTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5
KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBS
ZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWplY3RfaAorI2RlZmlu
ZSBSZWplY3RfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMs
IGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgaWYgKHRo
cm93RXhjZXB0aW9uKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVq
ZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oIgorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5m
byBTcGFyc2VBcnJheVZhbHVlTWFwOjpzX2luZm8gPSB7ICJTcGFyc2VBcnJheVZhbHVlTWFwIiwg
MCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTcGFyc2VBcnJheVZhbHVlTWFwKSB9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3Bh
cnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1R5
cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiUHV0
RGlyZWN0SW5kZXhNb2RlLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtu
b3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNw
YXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90Jikg
Y29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNW
YWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
OworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCA6IHB1YmxpYyBKU0NlbGwgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2
NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7
CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNl
TW9kZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7CisgICAgflNwYXJz
ZUFycmF5VmFsdWVNYXAoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsK
KworcHVibGljOgorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVk
ZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6
QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAm
IFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7Cisg
ICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUp
OworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRM
ZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxG
bGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNl
IG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0
RW50cnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsK
KyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZp
bmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hv
dWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBm
aW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9
CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAg
IC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4K
KyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBj
b250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8g
T25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAg
TWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBh
Y2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlW
YWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3Bh
cnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisK
KyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVl
TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5zcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9mbGFn
cyhOb3JtYWwpCisgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKK3sKK30KKworaW5saW5lIFNw
YXJzZUFycmF5VmFsdWVNYXA6On5TcGFyc2VBcnJheVZhbHVlTWFwKCkKK3sKK30KKworaW5saW5l
IHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworfQor
CitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBy
ZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihn
bG9iYWxEYXRhLmhlYXApKSBTcGFyc2VBcnJheVZhbHVlTWFwKGdsb2JhbERhdGEpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Cit7CisgICAgc3RhdGljX2Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpLT5TcGFyc2VB
cnJheVZhbHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpOworfQorCitpbmxpbmUgU3RydWN0
dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFy
c2VBcnJheVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAg
IFNwYXJzZUFycmF5RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmll
cihqc1VuZGVmaW5lZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwg
ZW50cnkpOworICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYg
KGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFy
cmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0
eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7
CisgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFy
cmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0
IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNh
c2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAg
IC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUg
LSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAg
ICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAg
IGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRy
eS5TcGFyc2VBcnJheUVudHJ5OjpCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNH
ZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFj
Y2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYg
KHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4
ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGlu
ZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9
IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRl
cmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3
ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNv
bW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBu
b3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2
ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4
TGlrZVB1dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRp
bmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIp
OworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIGVudHJ5
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNs
b3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VS
VCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwor
ICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKwor
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0
KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5Ojpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChM
SUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIo
KTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNh
bGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxp
c3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJz
ZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJh
c2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc01hcCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFw
Kj4odGhpc09iamVjdCk7CisgICAgaXRlcmF0b3IgZW5kID0gdGhpc01hcC0+bV9tYXAuZW5kKCk7
CisgICAgZm9yIChpdGVyYXRvciBpdCA9IHRoaXNNYXAtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJp
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdl
QmFycmllci5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJp
ZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1
YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VC
YXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlT
dG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hl
Y2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCos
IFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0g
bmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5l
d1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0
b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdl
OyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAq
bV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9y
YWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1f
c3RvcmFnZTsgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSB7IHJldHVybiAhbV9zdG9yYWdlOyB9
Ci0gICAgCi1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNyBA
QCB2b2lkIFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgSlNPYmplY3Q6
OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBT
dHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2Vs
bCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgocHJv
cGVydHlOYW1lKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwogYm9vbCBTdHJpbmdP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpAQCAtMTMzLDYgKzE0NCwxNCBAQCBi
b29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQog
Citib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+
aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRleChpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIGkpOworfQorCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsOCArNTAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkBAIC02Niw3ICs2OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTU3RyaW5nKik7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTV3JhcHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdQ
cm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0
aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQor
U3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5
cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVj
dHVyZS5nZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8pCisgICAgLCBtX2luZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlz
LCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkK
ICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1f
Y2xhc3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBAQCBjb25zdCBDbGFzc0luZm8g
U3RydWN0dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCiAgICAgLCBt
X3R5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbikKKyAgICAsIG1f
aW5kZXhpbmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBqc051
bGwoKSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRj
aHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcsNiArMTk5LDcgQEAgU3RydWN0
dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAg
IDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgp
KQogICAgICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8oKSkKKyAgICAsIG1faW5kZXhp
bmdUeXBlKHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBt
X3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkp
CiAgICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0yNTEsNiArMjU0LDgg
QEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogCiAgICAgZm9yIChw
dHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyAtLWkpIHsKICAgICAg
ICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1f
bmFtZUluUHJldmlvdXMpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlN
YXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlv
dXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5Q
cmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKICAg
ICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwogICAgIH0KQEAgLTUwMiw2ICs1MDcs
MzggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVy
biB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVy
ZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQo
MCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9h
dHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5n
VHlwZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OworICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0
dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7
CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQorICAgICAgICAgICAgdHJhbnNp
dGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHko
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUo
KSArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91cykKKyAgICAgICAgICAgIHRyYW5z
aXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKCk7CisgICAgfQorICAg
IAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24pOworICAgIHJldHVybiB0cmFuc2l0aW9uOworfQorCiAvLyBJbiBmdXR1cmUgd2UgbWF5
IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1
ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlw
ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhp
bmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAwLDYgKzEwMSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKIAogICAgICAg
ICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBib29sIGlzRnJvemVuKEpT
R2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAgICAgICAgIGJv
b2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAor
ICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGU7IH0K
IAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1f
Z2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkBAIC0z
MzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
LCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIApAQCAtMzYzLDcgKzM3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUs
IGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlw
ZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIFN0cnVj
dHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKIApAQCAtNDE2LDYgKzQyNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJ
bmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CiAgICAgICAgIAogICAg
ICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CkBAIC00NDcsNyArNDU3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
IDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
RXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1faGFzTm9uRW51bWVyYWJsZVByb3Bl
cnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogNzsK
KyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDIyOwogICAgICAgICB1
bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2ln
bmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2RpZFRyYW5z
aXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAg
QVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0lu
Zm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5
cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAg
ICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogI2RlZmluZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFw
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNs
YXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRy
aWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbnMgdGhhdCBkb24ndCBoYXZlIHRv
IGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVz
IHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4K
Ky8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBr
ZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2Nh
dGVBcnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBG
aXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4
aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUFy
cmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJheVN0b3JhZ2U7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBvbGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsK
ICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdTaW5nbGVTbG90RmxhZyA9IDE7CiAKQEAg
LTQ0LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAg
IHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IEtleTsKICAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBwLnNlY29uZDsKKyAgICAgICAgICAgIGlmIChwLmZpcnN0KQorICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3Mt
MzA0ODI4LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwgYWN0dWFsLCBzdW1tYXJ5ICsg
CiAKIC8vIHJldmVyc2UKIHZhbHVlICA9ICcxMjMnOwotZXhwZWN0ID0gJzEyMyc7CitleHBlY3Qg
PSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7
CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbCh2YWx1ZSkg
KyAnJzsKQEAgLTczLDcgKzczLDcgQEAgcmVwb3J0Q29tcGFyZShleHBlY3QsIGFjdHVhbCwgc3Vt
bWFyeSArIAogCiAvLyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsKLWV4cGVjdCA9ICdjYmEnOworZXhw
ZWN0ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0
eS4nOwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zb3J0LmNhbGwodmFsdWUp
ICsgJyc7CkBAIC0xMTQsNyArMTE0LDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUsIHN1
bW1hcnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAnZGVmJzsKLWV4cGVjdCA9IDY7Citl
eHBlY3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3Bl
cnR5LiI7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh2
YWx1ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0xMjgsNyArMTI4LDcgQEAgcmVwb3J0Q29tcGFyZSgn
ZGVmJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzaGlmdAogdmFsdWUgID0gJ2FiYyc7Ci1l
eHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5Lic7CitleHBlY3Qg
PSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7
CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNoaWZ0LmNhbGwodmFsdWUpOwpA
QCAtMTQyLDcgKzE0Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycsIHZhbHVlLCBzdW1tYXJ5ICsg
JzoKIAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVu
YWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRl
ZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBB
cnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEsIDEpICsgJyc7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24gMTI3MzUwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDEwICs3MywxMSBAQCBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgs
IERpY3RpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheShtX3ZhbHVlKTsKLSAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChpbmRleCkpCisgICAg
Ly8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICBpZiAoIWFycmF5LT5jYW5H
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1Zh
bHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgSlNWYWx1ZSBp
bmRleGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICBpZiAoaW5k
ZXhlZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWluZGV4ZWRWYWx1ZS5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcg
KzExOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3QKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdl
dEluZGV4KGkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3Bh
cnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAor
ICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogI2lmIEVO
QUJMRShCTE9CKQogICAgICAgICBpZiAoaXRlbS5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19p
bmZvKSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoY29udGV4dCwgdG9BcnJheUJ1
ZmZlcihpdGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOSBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJrCiAKICAgICBEYXNoQXJyYXkg
ZGFzaDsKICAgICBKU0FycmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgLy8g
RklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBmbG9hdCBlbGVtID0g
dmFsdWVBcnJheS0+Z2V0SW5kZXgoaSkudG9GbG9hdChleGVjKTsKKyAgICAgICAgZmxvYXQgZWxl
bSA9IHZhbHVlQXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b0Zsb2F0KGV4ZWMpOwogICAgICAg
ICBpZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0ZShlbGVtKSkKICAgICAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmlu
Z0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4
ICszMyw5IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdG9ET01TdHJpbmdMaXMKIAogICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IHN0cmluZ0xpc3QgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTog
V2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgc3RyaW5nTGlzdC0+YXBwZW5kKGFycmF5LT5n
ZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICBzdHJpbmdM
aXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogCiAgICAgcmV0dXJuIHN0cmluZ0xpc3QucmVsZWFzZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw3ICs4OSw4IEBAIEpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
OnBvcnQoRXgKIHN0YXRpYyB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTQXJyYXkqIGFycmF5LCBDb250ZXh0TWVudSYgbWVudSkKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEpTT2JqZWN0
KiBpdGVtID0gYXNPYmplY3QoYXJyYXktPmdldEluZGV4KGkpKTsKKyAgICAgICAgLy8gRklYTUU6
IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgSlNPYmplY3QqIGl0ZW0gPSBhc09i
amVjdChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICAgICAgSlNWYWx1ZSBsYWJlbCA9
IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsYWJlbCIpKTsKICAgICAgICAgSlNW
YWx1ZSB0eXBlID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgInR5cGUiKSk7CiAg
ICAgICAgIEpTVmFsdWUgaWQgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAiaWQi
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAgICAgVmVj
dG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9jb2xzQXJy
YXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYg
dGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwcm90
b2NvbHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDcgKzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW4KICAg
ICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGVs
ZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdo
YXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRl
LCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDkgQEAgU2VyaWFsaXphdGlvblJl
dHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5ndGhTdGFj
ay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkKLSAg
ICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2Rl
PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAg
ICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAg
ICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0U3BhcnNlSW5kZXgoYXJyYXks
IGluZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJy
YXkuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjb25zdCBDbGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJy
YXkiLCAmSlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVB
cnJheSkgfTsKIAogUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
dHJ1Y3R1cmUpCisgICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAw
KQogICAgICwgbV9hcnJheSgwKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMyArNzMsMTMgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCAmc19pbmZvLCBBcnJheSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0FycmF5OjpTdHJ1Y3R1cmVG
bGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIFJ1bnRpbWVB
cnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXN0cmluZ2lmeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzM0LDcgKzMzNCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgewogICAgICAg
ICBqc29uT2JqZWN0LnN0cmluZ2lmeSh7YToiYSIsIGI6ImIiLCBjOiJjIiwgMzogImQiLCAyOiAi
ZSIsIDE6ICJmIn0sIHJlcGxhY2VGdW5jKTsKICAgICAgICAgcmV0dXJuIHJlcGxhY2VUcmFja2Vy
OwogICAgIH0pOwotICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSAnKHN0
cmluZyl7ImEiOiJhIiwiYiI6ImIiLCJjIjoiYyIsIjMiOiJkIiwiMiI6ImUiLCIxIjoiZiJ9O2Eo
c3RyaW5nKSJhIjtiKHN0cmluZykiYiI7YyhzdHJpbmcpImMiOzMoc3RyaW5nKSJkIjsyKHN0cmlu
ZykiZSI7MShzdHJpbmcpImYiOyc7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBl
Y3RlZCA9ICcoc3RyaW5nKXsiMSI6ImYiLCIyIjoiZSIsIjMiOiJkIiwiYSI6ImEiLCJiIjoiYiIs
ImMiOiJjIn07MShzdHJpbmcpImYiOzIoc3RyaW5nKSJlIjszKHN0cmluZykiZCI7YShzdHJpbmcp
ImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7JzsKICAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgdmFyIGFycmF5
ID0gW3t0b1N0cmluZzpmdW5jdGlvbigpe2NvdW50Kys7IGFycmF5WzBdPSdhJzsgYXJyYXlbMV09
J2MnOyBhcnJheVsyXT0nYic7IHJldHVybiAnYSd9fV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162417</attachid>
            <date>2012-09-05 22:03:34 -0700</date>
            <delta_ts>2012-09-07 16:49:56 -0700</delta_ts>
            <desc>fast/js gets as far as it&apos;s going to get</desc>
            <filename>butterflies_patch_33.diff</filename>
            <type>text/plain</type>
            <size>445602</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIFBhcmVudDo6bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJp
ZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgCiAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNlbGws
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7
CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVj
dCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0
OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5
IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYg
KzczLDggQEAKIAkJMEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
QjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I3MTRCQ0Y4RTEwMDg4
NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29s
dmVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZz
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwICovOyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZD
NDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVE
RTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2
MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAgKi87IH07CkBAIC0xODgsNiArMTkwLDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4
OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAgKi87IH07CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBB
cnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk2
MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJh
eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3
QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1l
dGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTkxNUVE
OEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhp
bmdIZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUIx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkwMTVFRDhFMzgw
MEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5
MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0Yz
OUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MzE1
RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJDMEFFNzE0
OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0NDc5
OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTY2
LDcgKzU3OSw2IEBACiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4Mjc0
OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJm
YWNlSklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9OwotCQlBNzgxRTM1OTE0MTk3MEM3MDAw
OTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmll
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdC
NDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAw
RENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwpAQCAtODI3LDYgKzgzOSw4
IEBACiAJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBH
bG9iYWxSZXNvbHZlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9i
YWxSZXNvbHZlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNCODE0
QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVP
ZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQ0Q0QzAxNUYxQTYwNDAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXREaXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMTEludENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1
RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk0Myw2ICs5NTcsMTcgQEAKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QzE0RjVD
RkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVEOEUzODAwRjE2
N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQXJyYXlDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmRleGluZ0hlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4
RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4
aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MDE1RUQ4RTM4
MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3BlcnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZH
RXhpdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3
OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzNyw3
ICsxMzYyLDYgQEAKIAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlT
dHVicy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1
YnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1
QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEy
MTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RS
ZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVm
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhE
MDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBU1RCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFC
OThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMTEsNiArMjAzNSwyMCBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGlt
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYwQ0Q0
QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovLAorCQkJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLywKKwkJCQkw
RkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovLAorCQkJCTBG
QjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM4
QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJMEZCN0YzOEMxNUVEOEUz
ODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RDE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJCQkwRkI3RjM4RTE1RUQ4
RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMEZC
N0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBGQjdGMzkw
MTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM5MTE1
RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0YzOTIxNUVEOEUzODAwRjE2
N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3RjM5MzE1RUQ4RTM4MDBG
MTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMkQ1
OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlC
Q0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIw
RTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RFNTBFMUY1MUM1MDAx
NkI2QzkgLyogQXJndW1lbnRzLmNwcCAqLywKQEAgLTIxOTYsNyArMjIzNCw2IEBACiAJCQkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAogCQkJCTkzMzAz
RkU4MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVB
MEU2QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3
MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0Mw
MEUxNkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzQ1LDcg
KzI3ODIsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRl
ckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4
Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmlu
Z0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0
NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTQsNiArMjkzMCwxOCBA
QAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVu
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBB
cnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdC
MiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYx
NjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3
RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAv
KiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlEMTVFRDhFNDYw
MEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlFMTVFRDhFNDYw
MEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3
RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJl
Y3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQ5NSw2ICszNTQzLDcgQEAKIAkJCQkx
NDg3NEFFMzE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAorLy8gVGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMg
YW4gSW5kZXhpbmdUeXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJlIDE3IGluZGV4
aW5nIHR5cGVzICgwIHRvIDE2LCBpbmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1vcmUgdGhhbiBl
bm91Z2guCiB0eXBlZGVmIHVuc2lnbmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBJc05vdEFycmF5ID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pTQXJyYXkgID0g
MjsKKyNkZWZpbmUgYXNBcnJheU1vZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odHlwZSkpCiAKIGlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZyb21TdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJheTsKLSAgICBy
ZXR1cm4gSXNOb3RBcnJheTsKKyAgICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQcm9maWxlIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3MCw3ICsxNjcwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREaXJlYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVu
ZGVyc2NvcmVQcm90byk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKAorICAgICAgICBwcm9w
ZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bworICAg
ICAgICAmJiBQcm9wZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTcsOCArODU3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIG1vcmUg
Y29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRzCiAgICAgICAgICAgICAv
LyBjYXNlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKQEAgLTkxOSwxMCArOTE4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM0NCw3ICsxMzQzLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R2V0UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTM2Miw4ICsxMzYxLDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3Qg
ZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQK
ICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywg
YnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9IDMgfTsKICAgICAKKyAg
ICBBZGphY2VuY3lMaXN0KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQp
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlN
b2RlcyBtb2RlCiAgICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0
dXJuIEFycmF5OjpVbmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJh
eTo6QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBXZSBrbm93
IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2gg
dGhlcmUgaXMgbm8KICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUs
IHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtMTIwLDEwICsx
MjQsMTQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFs
dWUubV90eXBlKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNl
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsKKyAgICAg
ICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5k
ZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworCisgICAgY2FzZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFn
ZSkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpOwpAQCAtMTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5n
KEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6
SlNBcnJheToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0
dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7Cisg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4
aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBv
cGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBT
dHJpbmcsCi0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlT
dG9yYWdlLAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5
U3RvcmFnZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50
MTZBcnJheSwKQEAgLTYxLDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9OwogfSAvLyBuYW1lc3Bh
Y2UgQXJyYXkKIAorLy8gSGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVudHMuIEZvciBleGFtcGxl
LCBzYXlpbmcgImNhc2UgQWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8gaXMgdGhlIHNhbWUgYXMg
aGF2aW5nIG11bHRpcGxlIGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9mZiBhbGwgb2YgdGhlIG1v
ZGVzIHRoYXQKKy8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4KKyNkZWZp
bmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRz
OiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6Ok1vZGUgZnJvbU9ic2Vy
dmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBBcnJheTo6TW9kZSBmcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAtNzQsOCArMTAxLDE3IEBA
IGNvbnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CiBpbmxpbmUgYm9vbCBtb2Rl
SXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTUwLDYgQEAgaW5saW5lIEFycmF5OjpN
b2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgbW9kZXND
b21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUgbGVmdCwgQXJyYXk6Ok1vZGUgcmln
aHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAgIGxlZnQgPT0gQXJyYXk6OkpTQXJy
YXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwotICAgIAot
ICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICByaWdodCA9PSBBcnJheTo6SlNBcnJh
eQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwotICAgIAot
ICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0FycmF5KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSBib29sIG1vZGVJc1Nw
ZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xNDcs
NyArMTY0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG0KIAog
aW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCiB7Ci0gICAg
cmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzQsNyArMTY3NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQog
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKLSAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAg
c2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAg
IEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMDksNyArMjMwOSw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFz
ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0
LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHByb3BlcnR5U3Rv
cmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpAQCAtMjM2MCwxMyArMjM2MCwxMyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwg
YmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zm
c2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
YmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw4ICsz
ODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKLSAgICAgICAgTm9kZSBnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwg
Y29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgTm9kZSBnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOworICAgICAgICBpZiAobW9kZUlzSlNBcnJheShhcnJheU1v
ZGUpKQorICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0QnV0
dGVyZmx5LCBjb2RlT3JpZ2luLCBhcnJheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgPSBOb2RlKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Us
IGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CiAgICAgICAgIGlmIChzaG91
bGRHZW5lcmF0ZSkKICAgICAgICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UucmVmKCk7
CiAgICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2dy
YXBoLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNDczLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgot
ICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VU
X09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5v
cCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHN0cnVjdCBPcEluZm8gewogc3RydWN0IE5v
ZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAgICAgCisgICAgTm9kZSgpIHsg
fQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBu
byBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFn
ZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdl
dFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhHZXRCdXR0
ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oQ2hlY2tBcnJheSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0
aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKQEAgLTIyNiwxNCAr
MjI3LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgaWYg
KGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJh
eShiYXNlVmFsdWUpOwotICAgICAgICBpZiAoYXJyYXktPmNhblNldEluZGV4KGluZGV4KSkgewot
ICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7Cisg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1
aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9i
YWxEYXRhLCBpbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIHZhbHVlLCBz
dHJpY3QpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0
LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM0MSwxMSArMzQyLDEyIEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlW
YWwoRXgKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAg
ICAgCi0gICAgLy8gRklYTUU6IHRoZSBKSVQgdXNlZCB0byBoYW5kbGUgdGhlc2UgaW4gY29tcGls
ZWQgY29kZSEKLSAgICBpZiAoaXNKU0FycmF5KGJhc2UpICYmIGFzQXJyYXkoYmFzZSktPmNhbkdl
dEluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KGJh
c2UpLT5nZXRJbmRleChpbmRleCkpOworICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAgICAgaWYgKG9iamVj
dC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICB9CiAKLSAgICAv
LyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byByZWxpbmsgdGhpcyB0byBhbiBvcHRpbWl6ZWQg
Zm9ybSEKICAgICBpZiAoaXNKU1N0cmluZyhiYXNlKSAmJiBhc1N0cmluZyhiYXNlKS0+Y2FuR2V0
SW5kZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5nKGJh
c2UpLT5nZXRJbmRleChleGVjLCBpbmRleCkpOwogCkBAIC01MzQsMTUgKzUzNiwxNSBAQCB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlW
YWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJv
cGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZl
Y3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAg
ICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5k
ZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUlu
ZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRy
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTUxLDE1ICs1NTMsMTUgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBh
cnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xv
YmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcg
dmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAg
ICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0
SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRC
eUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEyNjgsMjAgKzEyNzAs
MjkgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdAogCiBjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICog
c2l6ZW9mKEpTVmFsdWUpLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0
KSArIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSArIDEpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4
ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkp
OwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAg
ICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJnJlc3Vs
dCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1NpemU7CisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkp
OworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlU
b0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93
T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1
cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
K30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9H
cm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6
ZV90IG5ld1NpemUpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRP
ZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRo
b3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocmVzdWx0KTsKIH0KIAogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1v
ZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
NyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyCiB0eXBlZGVmIHNp
emVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlv
bl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBl
ZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFs
dWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQVpKKShF
eGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSk7CkBAIC0xMDUsOCArMTA1LDEwIEBAIHR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdP
cGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVl
KTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hw
b2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
dGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBj
aGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
dGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7CiAKIC8v
IFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVu
dGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpAQCAt
MTM4LDggKzE0MCw4IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkK
IHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3Zv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUq
LCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKQEAgLTE4NSw2ICsxODcsOCBAQCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25J
c0Z1bmN0aW9uCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VB
bmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9m
ZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5B
TDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2
ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXpl
X3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxv
b2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBp
cwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9u
ZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0
NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEyICsxOTksMTIgQEAgc3Rh
dGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2Vu
ZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5h
ZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIp
OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAg
ICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShv
ZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNl
bmRpZgogICAgIH0KIApAQCAtMjUzLDEwICsyNTMsMTAgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IGZhaWx1cmVDYXNlczsKICAgICAgICAgCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQoc3R1YkppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTQyMyw3ICs0MjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbHNlCkBAIC00
NzMsNyArNDczLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAog
ICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02ODEsMTcgKzY4MSwxNyBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
Uiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAt
ODMwLDcgKzgzMCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAg
ICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXpl
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpKTsKICAgICAgICAg
ICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3Vy
cmVudFJlbWFpbmluZyk7CkBAIC04NDQsNyArODQ0LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRy
YW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIHNjcmF0Y2hHUFIx
SGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBAIC04NTQsOCArODU0LDggQEAgc3RhdGljIHZv
aWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNo
R1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3Jl
UHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0
SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAg
ICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90
LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODYzLDkgKzg2Myw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFz
U3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVv
ZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAgICAgICAg
ICAgIApAQCAtMTAyMCw2ICsxMDIwLDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFs
bG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3Jh
Z2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
CiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlQ2VsbCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29tcGlsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0
dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6
Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0
LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2pp
dC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0
YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRk
cmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3Vs
dEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0Lmxh
YmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2Us
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKIAogICAgIEpJVENv
bXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAg
ICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29t
cGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRk
cmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwo
KTsKQEAgLTI1NDcsMjMgKzI1NDcsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczog
ewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IHNw
ZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXksCi0gICAgICAgICAg
ICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
LCByZXN1bHQuZ3ByKCkpOwpAQCAtMjY1Myw2ICsyNjQ3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkg
bm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZl
IHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtl
bHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJt
IGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgY2hpbGQyKTsKICAgICAgICAgCkBAIC0yNjYwLDggKzI2NTcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAg
ICAgICAvLyBNYXAgYmFzZSwgcHJvcGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2Nh
dGUgYSBzY3JhdGNoIHJlZ2lzdGVyLgpAQCAtMjY4OCw4ICsyNjg0LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJl
eW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOworICAgICAgICAgICAgaWYgKGlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRz
KTsKIAogICAgICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTI3MDIsOSArMjY5OCw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAog
ICAgICAgICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jv
d2luZyB0aGUgYXJyYXk7IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAg
IG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAogICAgICAgICAg
ICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjcxMyw3ICsyNzA5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjg4MiwxNyArMjg3OCwxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVu
Z3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0
byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7
CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUz
MihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKQEAgLTI5MTgsMTggKzI5MTQsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
c2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsK
ICAgICAgICAgCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxl
bmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2Fz
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNl
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdl
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCiAgICAgICAgIHNldFVu
ZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKQEAgLTM1MTUsMTQgKzM1MTEsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxlUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAg
IGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAg
ICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CkBAIC0zODY1LDcgKzM4NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAjZW5kaWYKICAgICAgICAgbV9qaXQubmVnMzIocmVzb2x2
ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXNvbHZlSW5mb0dQ
UiwgcmVzb2x2ZUluZm9HUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1
bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIsIChpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUp
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMjggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhl
IGNvZGUgYmVsb3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAgICAgICAv
LyBzdWJzdGFudGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5PTl9BUlJB
WV9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCks
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCks
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGlu
Z1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMwMDYsMTEgKzMwMTUsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5nSW1wbDo6
ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNj
cmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMxMjUsMTMgKzMxMjks
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Io
bm9kZS5hcnJheU1vZGUoKSk7CiAKICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czogeworICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRSZWcpOwogICAgICAg
ICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1
bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIApA
QCAtMzIyNyw2ICszMjMwLDIwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBF
eGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUmIG5vZGUpCiB7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQo
dGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHJlc3VsdC5ncHIoKSwg
YmFzZUdQUik7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMzI0OCwxMyArMzI2NSwzMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSKSk7CiAg
ICAgICAgIAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAg
IG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgICAgICAKICAgICBzdG9yYWdlUmVz
dWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKIHsKKyAgICBz
aXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBzaXpl
X3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CisgICAgQVNTRVJU
KG5ld1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisKKyAgICBpZiAoaGFzSW5k
ZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAg
ICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlLCByZXN1bHQuZ3By
KCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOworICAgICAgICAKKyAgICAg
ICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIG9sZFN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwpAQCAtMzI2Nyw5
ICszMzAyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
ICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKICAgICAgICAgCi0gICAgc2l6
ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgc2l6ZV90
IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAgIEFTU0VSVChu
ZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogICAgIENvcGllZEFsbG9jYXRv
ciogY29waWVkQWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5zdG9yYWdlQWxs
b2NhdG9yKCk7CiAgICAgICAgIAogICAgIG1faml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+
bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMik7CkBAIC0zMjgwLDEzICszMzEyLDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
Mik7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBz
Y3JhdGNoR1BSMiwgbmV3U2l6ZSkpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6
ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjIgPSBuZXcg
c3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3JhdGNoCiAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0
ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9
IHNpemVvZih2b2lkKikpIHsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2
b2lkKikpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
KTsKICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExNTYsNiArMTE1NiwxNiBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09w
ZXJhdGlvbl9FTyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0KTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmpl
Y3QsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlv
bl9FUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkp
OwpAQCAtMTM2OCw3ICsxMzc4LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTE2NjYsNyArMTY3
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlv
bl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnM1Rh
ZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0yMTM5LDcgKzIxNDksNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZDbGFzc1R5cGU6OnNfaW5mbyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAgLy8gSW5pdGlh
bGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAgICAgICBtX2pp
dC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogICAgIH0KIAogICAgIC8vIEl0IGlzIGFjY2VwdGFibGUgdG8gaGF2
ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3UncmUgZmluZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAgICAgc3RhdGljIENv
cGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7CiAKLSAgICBDaGVja2VkQm9v
bGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoq
KTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVfdCwgdm9pZCoq
KTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9pZCoqLCBzaXpl
X3QsIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNSw3ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQg
c2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3IsIHR5cGVuYW1l
IFN0cnVjdHVyZVR5cGU+IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVU
eXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKLSAgICAgICAg
dm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBSZWdpc3RlcklEIHJlc3VsdCk7
CisgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwgcHRyZGlmZl90
IG9mZnNldEZyb21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCk7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVn
aXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIHZvaWQgZW1p
dEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3Ro
LCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0
ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
Niw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RyCiAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBBZGRyZXNzKHJl
c3VsdCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogCiAgICAgLy8gaW5pdGlhbGl6ZSB0
aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyCi0gICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHJlc3Vs
dCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1
cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00MzQsNyArNDM0
LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQogICAgIGVtaXRB
bGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0cnVjdHVyZSwg
cmVzdWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVySUQgcmVzdWx0KQoraW5saW5lIHZvaWQgSklU
OjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIHB0cmRpZmZfdCBvZmZzZXRG
cm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKIApAQCAtNDQz
LDM3ICs0NDMsMzIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZwog
ICAgIHN0b3JlUHRyKHJlc3VsdCwgJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAg
ICBuZWdQdHIocmVzdWx0KTsKICAgICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZhbGxvY2F0b3It
Pm1fY3VycmVudFBheWxvYWRFbmQpLCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVzdGVkSW1tMzIo
c2l6ZSksIHJlc3VsdCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0gb2Zmc2V0RnJv
bUJhc2UpLCByZXN1bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJy
YXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBj
ZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0
cikKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCA0VSk7
Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gSlNBcnJheTo6c3RvcmFnZVNpemUoaW5pdGlh
bExlbmd0aCk7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5Ojp0b3RhbFNp
emUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5ndGgpKTsKIAog
ICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVuc3VyZSB0aGF0
IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgSlNBcnJh
eSBpbml0aWFsaXphdGlvbi4KLSAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0
b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0
aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3VsdCk7CiAKICAg
ICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRBbGxvY2F0ZUJh
c2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3RvcmFnZVB0cik7
CiAKICAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBBcnJheVN0b3Jh
Z2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBB
cnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5n
dGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJy
YXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgc3RvcmUzMihJbW0z
Mihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQoKSkpOworICAg
IHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlT
dG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2x5IGFs
bG9jYXRlZCBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVz
cyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihz
dG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGluZGV4IGJpYXMu
Ci0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNldCgpKSk7Ci0K
LSAgICAvLyBJbml0aWFsaXplIHRoZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3BhcnNlVmFsdWVN
YXBPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KKyAg
ICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIs
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJfdCkpKTsKICNl
bmRpZgogICAgIH0KLQotICAgIC8vIFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xvdHMuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsrKSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Moc3Rv
cmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOwotI2VuZGlmCi0gICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjY3LDcgKzE2NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
ZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNB
cnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkpIHsKKyAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3Zl
cnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKGxlbmd0aCkpKSkgewogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
QEAgLTE2ODYsNyArMTY4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfYXJyYXkoSW5z
dHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6ZSwgd2Ugd2ls
bCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAgICAgLy8gZW1p
dF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3Jh
Z2VTaXplKGxlbmd0aCkpKQorICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSkp
KQogICAgICAgICByZXR1cm47CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBOb3QgZW5vdWdo
IHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2NSw2ICsxMDY1LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGVtaXRMb2Fk
UGF5bG9hZChpdGVyLCByZWdUMSk7CiAgICAgCiAgICAgLy8gVGVzdCBiYXNlJ3Mgc3RydWN0dXJl
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoQW5kVHlwZSgpKSkpOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmUpKSkp
OwogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCwxMCArMTE0LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQ
dHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09m
TGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJl
Z1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsK
QEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdp
c3RlCiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFsKSB7CiAgICAg
ICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1t
MzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBicmVha3BvaW50
KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSks
IHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgfQog
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKQEAgLTIzOSwxMCArMjM5LDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8p
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1
bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAog
ICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjUyLDEwICsyNTIsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIGVtcHR5Lmxpbmso
dGhpcyk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgIGJyYW5j
aDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICBicmFuY2gz
MihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgc3RvcmUzMihyZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDEpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRo
aXMpOwogCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aChpbnQgYmFzZQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVC
cmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsKICAgICBhZGRT
bG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBDb252ZXJ0aWJs
ZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKICAgICBEYXRh
TGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCBy
ZWdUMCk7CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CkBAIC00NzAsNyArNDcwLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCi0gICAgQ29udmVydGlibGVMb2FkTGFi
ZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7CisgICAgQ29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQp
KTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CkBA
IC01MDksOCArNTA5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQoUmVnaXN0
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKLSAgICBzdG9y
ZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKKyAgICBzdG9yZVB0cih2YWx1ZSwg
QWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRP
ZmZzZXQpKSk7CiB9CiAKIC8vIENvbXBpbGUgYSBsb2FkIGZyb20gYW4gb2JqZWN0J3MgcHJvcGVy
dHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgYmFzZS4KQEAgLTUyMSw4ICs1MjEsOCBAQCB2b2lk
IEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
c2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkp
LCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOwogfQog
CiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjdCogYmFzZSwgUmVnaXN0
ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKQEAgLTUzMiw4ICs1MzIs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZPdXRPZkxpbmVT
dG9yYWdlKCksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5P
dXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRyZXNzKCksIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2Fj
aGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQpAQCAtNjYw
LDExICs2NjAsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMywgbV9jb2RlQmxv
Y2stPmdldE9yQWRkQXJyYXlQcm9maWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+YWRkcmVz
c09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1cmVDYXNlczEg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAgICBKdW1wIGZh
aWx1cmVDYXNlczEgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhl
IHN0b3JhZ2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpLCByZWdUMik7CiAg
ICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBUcnVzdGVk
SW1tMzIoMCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVn
VDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTE3LDggKzE1MTcsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09i
amVjdCosIG9wX3B1dF9iCiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U09iamVjdCogYmFzZSA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ug
bmV3U3RvcmFnZSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNp
emUsIG5ld1NpemUpOwotICAgIGJhc2UtPnNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
bmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGJh
c2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOwor
ICAgIGJhc2UtPnNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CiAKICAgICByZXR1cm4gYmFzZTsKIH0KQEAgLTI0MzUsNyArMjQzNSw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0KKyAgICAKICAgICBpZiAoTElLRUxZKGJh
c2VWYWx1ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKICAgICAgICAgaWYg
KEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHko
Y2FsbEZyYW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkgewogICAg
ICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjUyOCwxMiArMjUyOCwxMiBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAKICAgICBpZiAoTElLRUxZ
KHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0
LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAg
ICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAg
IGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5z
ZXRJbmRleCgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNl
VmFsdWUpOworICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQor
ICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCB2
YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJheTo6cHV0QnlJ
bmRleChqc0FycmF5LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXRCeUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJh
c2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2UgaWYgKGlzTmFtZShzdWJzY3JpcHQp
KSB7CkBAIC0zNDAyLDcgKzM0MDIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9w
dXRfZ2V0dGVyCiAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFz
T2JqZWN0KHNldHRlcikpOwotICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3Nv
ciwgQWNjZXNzb3IpOworICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vzc29yKTsKIH0K
IAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFz
ZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAgICAgTExJTlRfT1AoMSkgPSByZXN1bHQ7Ci0KKyAgICAKICAgICBpZiAoIUxMSU5UX0FM
V0FZU19BQ0NFU1NfU0xPVwogICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAg
JiYgc2xvdC5pc0NhY2hlYWJsZSgpCkBAIC04NzcsNyArODc3LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFu
ZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bj
b2RlKGxsaW50X29wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAgcGNb
NV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9
IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTM5LDcgKzkzOSw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcGNbNl0udS5zdHJ1Y3R1
cmUuc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKQEAgLTk2
Nyw3ICs5NjcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAg
ICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0
X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5k
ID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNDYsMTIgKzEwNDYs
MTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogICAgIAogICAg
IGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkg
PSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUp
KSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwot
ICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAg
IGpzQXJyYXktPnNldEluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAgaWYgKGJh
c2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVp
Y2tseShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxE
YXRhLCBpLCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJh
eTo6cHV0QnlJbmRleChqc0FycmF5LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlz
U3RyaWN0TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAgICB9CiAgICAg
ICAgIGJhc2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpOwpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZQogICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZ2xvYmFsRGF0YSwgYXNPYmplY3Qoc2V0dGVy
KSk7CiAgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoCi0gICAgICAgIGdsb2JhbERhdGEs
CisgICAgICAgIGV4ZWMsCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBj
WzJdLnUub3BlcmFuZCksCiAgICAgICAgIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CiAgICAgTExJTlRf
RU5EKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTk0MywyMSArOTQzLDIxIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNy
byBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNl
dCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2VydChtYWNybyAob2sp
IGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCiAg
ICAgbmVnaSBwcm9wZXJ0eU9mZnNldAotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0
b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkaSBUYWdP
ZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2Us
IHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFu
ZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAK
IG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXQsIG9iamVj
dEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxp
bmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9m
TGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3Jh
Z2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgot
ICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVj
dDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNp
emVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRp
IFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3Rv
cmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsg
KElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0
eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3Jh
Z2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8g
cmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MDIsMjAgKzgwMiwyMCBAQCBfbGxpbnRfb3BfaXNfc3Ry
aW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJv
cGVydHlPZmZzZXRBc1BvaW50ZXIsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGFzc2Vy
dChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgSW5saW5lU3RvcmFn
ZUNhcGFjaXR5LCBvayBlbmQpCiAgICAgbmVncCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlcgotICAg
IGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9i
amVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4
W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4XSwgdmFsdWUKKyAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6
ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2lu
dGVyLCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0
KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGJpbHQg
cHJvcGVydHlPZmZzZXRBc0ludCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKLSAg
ICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBv
YmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFu
ZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50
CiAgICAgc3hpMnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAg
IGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5l
U3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3Jh
Z2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0
b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4
W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFk
ZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQK
IAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTEzMiw4ICsxMTMyLDggQEAg
X2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFb
dDJdLCB0MgogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0Ml0sIHQy
CiAgICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQyLCAub3BHZXRCeVZhbFNs
b3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDBdLCB0MwotICAgIGJpYWVxIHQxLCBK
U0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdworICAgIGxvYWRwIEpT
T2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cK
ICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRwIEFycmF5U3RvcmFnZTo6bV92
ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQyLCAub3BHZXRCeVZhbFNsb3cKQEAgLTEy
MTcsOCArMTIxNyw4IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGxvYWRwIENvZGVCbG9j
azo6bV9nbG9iYWxEYXRhW3QwXSwgdDAKICAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlD
bGFzc0luZm9bdDBdLCB0MAogICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0
MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3Ro
W3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QxXSwg
dDAKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAorICAgIGJpYWVxIHQy
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fbGVuZ3RoW3QwXSwg
Lm9wUHV0QnlWYWxTbG93CiAgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0Miwg
OF0sIC5vcFB1dEJ5VmFsRW1wdHkKIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6CiAgICAgbG9hZGlz
IDI0W1BCLCBQQywgOF0sIHQzCkBAIC0xMjI5LDkgKzEyMjksOSBAQCBfbGxpbnRfb3BfcHV0X2J5
X3ZhbDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9u
dW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5n
SGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4V29yZFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVS
ZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQotICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjpt
X2xlbmd0aFt0MF0KKyAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV9hdXhXb3JkW3QwXQogICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0
CiAKIC5vcFB1dEJ5VmFsU2xvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNiArNjEsMTEgQEAgZWxzZQogICAgIGNvbnN0IFBheWxvYWRPZmZzZXQg
PSAwCiBlbmQKIAorIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgor
Y29uc3QgSXNBcnJheSA9IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2NvbnN0IEFsbEFy
cmF5VHlwZXMgPSAxNQorCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUK
IGNvbnN0IE9iamVjdFR5cGUgPSAxMwpAQCAtMzIzLDcgKzMyOCw3IEBAIG1hY3JvIGFsbG9jYXRl
QmFzaWNKU09iamVjdChzaXplQ2xhc3NJbmQKICAgICAgICAgbG9hZHAgY2xhc3NJbmZvT2Zmc2V0
W3NjcmF0Y2gxXSwgc2NyYXRjaDIKICAgICAgICAgc3RvcmVwIHNjcmF0Y2gyLCBbcmVzdWx0XQog
ICAgICAgICBzdG9yZXAgc3RydWN0dXJlLCBKU0NlbGw6Om1fc3RydWN0dXJlW3Jlc3VsdF0KLSAg
ICAgICAgc3RvcmVwIDAsIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2VbcmVzdWx0XQorICAg
ICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0KICAgICBlbmQKIGVu
ZAogCkBAIC00OTgsNyArNTAzLDcgQEAgbWFjcm8gd2l0aElubGluZVN0b3JhZ2Uob2JqZWN0LCBw
cm9wZXJ0eQogZW5kCiAKIG1hY3JvIHdpdGhPdXRPZkxpbmVTdG9yYWdlKG9iamVjdCwgcHJvcGVy
dHlTdG9yYWdlLCBjb250aW51YXRpb24pCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5l
U3RvcmFnZVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbb2JqZWN0XSwgcHJvcGVydHlTdG9yYWdlCiAgICAgIyBJbmRpY2F0ZSB0aGF0IHRo
ZSBwcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXIgbm93IHBvaW50cyB0byB0aGUKICAgICAjIHByb3Bl
cnR5IHN0b3JhZ2UsIGFuZCB0aGF0IHRoZSBvYmplY3QgcmVnaXN0ZXIgbWF5IGJlIHJldXNlZAog
ICAgICMgaWYgdGhlIG9iamVjdCBwb2ludGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJp
bmc6Om51bWJlcihpKSkpOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogfQogCiBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpIApAQCAtMzA4LDcgKzMwOCw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamUKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB5ZXQgcHJlc2Vu
dCBvbiB0aGUgb2JqZWN0LCBhbmQgaXMgbm90IHlldCBtYXJrZWQgYXMgZGVsZXRlZCwgdGhlbiBh
ZGQgaXQgbm93LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgaWYgKCghdGhp
c09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFy
Z3VtZW50c1tpXSkgJiYgIUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5hcmd1bWVudChp
KS5nZXQoKSwgMCk7CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhl
YywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSk7CiAgICAgICAg
IGlmICghQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHNob3VsZFRocm93KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBA
CiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252
ZW50aW9uc19oCisjZGVmaW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhp
bmdIZWFkZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKyNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBK
U0FycmF5CisvLworLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3Jl
ZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0
IHByb3BlcnR5IG1hcC4KKy8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNl
IG1hcCBvZiBhcnJheSBlbnRyaWVzLgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJp
YyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJs
ZQorLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0
ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkg
b25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJp
dAorLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwg
YmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3Bl
cnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIgaSwKKy8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBh
cnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2
ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxl
ZCBpbiB0aGUgZm9sbG93aW5nCisvLyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3Rv
cmFnZSB2ZWN0b3IsCisvLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGlu
IHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJl
IChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVY
KSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2Ug
dmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBv
ZgorLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0
b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRp
cGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFs
dWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKwor
Ly8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8g
c2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBv
ZiBvdmVyZmxvdy4KKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3RoKSkKKworLy8gVGhlc2Ug
dmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdp
dGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5v
dCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCisjZGVmaW5lIE1B
WF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVO
IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUK
Ky8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3Ro
IChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCisg
ICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVu
Z3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgorI2RlZmluZSBG
SVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZl
Y3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8gRm9yIGFsbCBhcnJheSBpbmRp
Y2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3Iu
CisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJl
IGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwu
IElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgorc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5saW5lIGJvb2wgaXNEZW5zZUVu
b3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKK3sKKyAg
ICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWlu
RGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFk
ZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CisgICAgcmVzdWx0LnNldEF1
eFdvcmQobGVuZ3RoKTsKKyAgICByZXN1bHQuc2V0TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGJhc2VJbmRleGluZ0hl
YWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gaW5kZXhpbmdIZWFk
ZXJGb3JBcnJheShsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQXJyYXlDb252ZW50aW9uc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEy
NzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTU3RyaW5nQnVpbGRlci5o
IgpAQCAtMTE0LDkgKzExNiwxNyBAQCBjb25zdCBDbGFzc0luZm8gQXJyYXlQcm90b3R5cGU6OnNf
aW5mbyA9CiBAZW5kCiAqLwogCitBcnJheVByb3RvdHlwZSogQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlC
dXR0ZXJmbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwKTsKKyAgICBBcnJheVByb3RvdHlwZSogcHJv
dG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVj
LT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIHByb3RvdHlwZTsKK30KKwogLy8gRUNNQSAxNS40LjQKLUFycmF5UHJvdG90eXBlOjpB
cnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVj
dHVyZSkKK0FycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisg
ICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSkKIHsKIH0KIApAQCAtMjkyLDggKzMwMiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW5ndGg7
IGsrKykgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQ7Ci0gICAgICAgIGlmICh0aGlzT2JqLT5j
YW5HZXRJbmRleChrKSkKLSAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleChr
KTsKKyAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4UXVpY2tseShrKSkKKyAgICAgICAg
ICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzT2JqLT5nZXQoZXhlYywgayk7CiAgICAgICAgIApA
QCAtNDEzLDEwICs0MjMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGg7IGsrKykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2Fu
R2V0SW5kZXgoaykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHko
aykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVu
dCA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFy
cmF5LT5nZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKGVsZW1l
bnQudG9XVEZTdHJpbmdJbmxpbmUoZXhlYykpOwogICAgICAgICAgICAgZWxzZQpAQCAtNjI4LDcg
KzYzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1
bmN0aW9uLCBjYWxsRGF0YSk7CiAKLSAgICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpT
QXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJheSh0aGlzT2JqKS0+aW5TcGFyc2VNb2RlKCkpIHsKKyAg
ICBpZiAodGhpc09iai0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbyAmJiAhYXNBcnJh
eSh0aGlzT2JqKS0+aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgewogICAgICAgICBpZiAoaXNOdW1l
cmljQ29tcGFyZUZ1bmN0aW9uKGV4ZWMsIGNhbGxUeXBlLCBjYWxsRGF0YSkpCiAgICAgICAgICAg
ICBhc0FycmF5KHRoaXNPYmopLT5zb3J0TnVtZXJpYyhleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhKTsKICAgICAgICAgZWxzZSBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKQpA
QCAtNzg4LDkgKzc5OCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBD
YWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIEpTVmFsdWUg
diA9IGFycmF5LT5nZXRJbmRleChrKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGFycmF5LT5n
ZXRJbmRleFF1aWNrbHkoayk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlU
aGlzKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgdik7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKQEAgLTg0NiwxMSAr
ODU2LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxs
IGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFl
eGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFy
cmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTkwOSwxMSArOTE5LDEx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hl
ZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5o
YWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5j
YW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtOTY1LDExICs5NzUsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2Fs
bChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdl
dEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtMTAxNywxMSArMTAyNywxMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4
ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0
aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5k
ZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTEwNzUsOCArMTA4NSw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNl
IGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoMCkpewotICAgICAgICBydiA9IGFycmF5
LT5nZXRJbmRleCgwKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KDApKXsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KDApOwogICAg
ICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKQEAgLTEwOTcsOCArMTEwNyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwogICAgICAg
ICAgICAgSlNWYWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0SW5k
ZXgoaSkpKQotICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAg
ICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpKQorICAgICAgICAg
ICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hp
bGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2Miw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxz
ZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKXsKLSAgICAgICAg
cnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYg
YXJyYXktPmNhbkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSl7CisgICAgICAgIHJ2ID0gYXJy
YXktPmdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMTc0LDkg
KzExODQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMCwgcnYpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXgoaWR4KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkoaWR4KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVl
biBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCi0g
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleChpZHgp
KTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4
UXVpY2tseShpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwganNO
dW1iZXIoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDMsIGFycmF5
KTsKICAgICAgICAgICAgIHJ2ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgICAg
IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7
CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7Ci0gICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7
CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9o
CisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5Lmgi
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVl
TWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAg
QSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCisv
LyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5l
ZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdldFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRT
dG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5
IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1
aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2lu
dGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKKy8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4
QmlhcyAqIHNpemVvZihKU1ZhbHVlKQorc3RydWN0IEFycmF5U3RvcmFnZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQXJyYXlTdG9yYWdlKTsKK3ByaXZhdGU6CisgICAgQXJyYXlTdG9yYWdl
KCkgeyB9IC8vIE5vdCBkaXJlY3RseSBpbnN0YW50aWFibGUuIENhbiBvbmx5IGJlIGNyZWF0ZWQg
YXMgcGFydCBvZiBhIEJ1dHRlcmZseS4KK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgQXJyYXlT
dG9yYWdlKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PEFycmF5U3RvcmFnZSo+KGJ1dHRlcmZseSk7IH0KKyAgICBzdGF0aWMgQXJyYXlTdG9yYWdl
KiBmcm9tKEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcikgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXItPmFycmF5U3RvcmFnZSgpOyB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CisgICAgSW5k
ZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZy
b20odGhpcyk7IH0KKyAgICAKKyAgICAvLyBXZSBzdGVhbCB0d28gZmllbGRzIGZyb20gdGhlIGlu
ZGV4aW5nIGhlYWRlcjogdmVjdG9yTGVuZ3RoIGFuZCBsZW5ndGguCisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+YXV4V29yZCgpOyB9CisgICAgdm9pZCBz
ZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldEF1eFdvcmQo
bGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPmxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQg
bGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldExlbmd0aChsZW5ndGgpOyB9CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5OjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoY29uc3QgQXJyYXlT
dG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwLmNvcHlGcm9tKG90aGVy
Lm1fc3BhcnNlTWFwKTsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsK
KyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbklu
ZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgor
ICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAgICB9CisgICAg
CisgICAgV3JpdGVCYXJyaWVyPFNwYXJzZUFycmF5VmFsdWVNYXA+IG1fc3BhcnNlTWFwOworICAg
IHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRw
dHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0
aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJ
bmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNl
dE9mTGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJ
blZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9pbmRleEJpYXMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VNYXBP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3NwYXJzZU1h
cCk7IH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGb3IodW5zaWduZWQgdmVjdG9yTGVu
Z3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkg
KyB2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5U3RvcmFnZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5X2gKKyNkZWZpbmUgQnV0dGVyZmx5X2gKKwor
I2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworc3RydWN0IEFycmF5U3RvcmFnZTsK
KworY2xhc3MgQnV0dGVyZmx5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCdXR0ZXJmbHkp
OworcHJpdmF0ZToKKyAgICBCdXR0ZXJmbHkoKSB7IH0gLy8gTm90IGluc3RhbnRpYWJsZS4KK3B1
YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHRvdGFsU2l6ZShzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPyBoYXNJbmRleGluZ0hlYWRlciA6IHRydWUpOworICAg
ICAgICBBU1NFUlQoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSA9PSBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKTsKKyAgICAgICAgcmV0dXJuIChwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIChoYXNJbmRleGluZ0hlYWRlciA/IHNpemVvZihJbmRl
eGluZ0hlYWRlcikgOiAwKSArIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIH0KKwor
ICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGZyb21CYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGJh
c2UpICsgcHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5ICsgMSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIElu
ZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIo
KSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkg
KyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNh
cGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJm
bHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRl
ciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRl
cmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICBz
dGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgCisgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5k
ZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsg
fQorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGlu
Z0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBpbmRleGlu
Z1BheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsgfQorICAgIEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQYXlsb2FkPEFycmF5
U3RvcmFnZT4oKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQcm9wZXJ0
eVN0b3JhZ2UoKSB7IHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhp
bmdIZWFkZXIpKTsgfQorICAgIHN0YXRpYyBpbnQgaW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA9PSBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZvaWQqIGJh
c2Uoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkgeyByZXR1cm4g
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5IC0gcHJlQ2FwYWNpdHk7IH0KKyAg
ICB2b2lkKiBiYXNlKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICAvLyBUaGUgYnV0
dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhlIHJlYWxsb2NhdGlvbiBpdHNl
bGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhlIG1ldGEtZGF0YSB0byByZWZs
ZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90ZSB0aGF0IHRoaXMgc2V0IG9m
CisgICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgaXMgbm90IGludGVuZGVkIHRv
IGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisgICAgLy8gbW9kZXMgb2YgYnV0
dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFsbG9jYXRlIGJ1dHRlcmZsaWVz
IGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFn
ZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlD
YXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jv
d1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
c2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8v
IEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBtdWNoLgor
ICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0
dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5
KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAv
LyBBc3N1bWVzIHRoYXQgeW91J3JlIG5vdCBjaGFuZ2luZyB3aGV0aGVyIG9yIG5vdCB0aGUgb2Jq
ZWN0IGhhcyBhbiBpbmRleGluZyBoZWFkZXIuCisgICAgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5KiBz
aGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBzaXplX3Qg
c2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRlbXApKQorICAgICAgICBDUkFTSCgp
OworICAgIHJldHVybiBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCisgICAgICAg
ICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBj
cmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIo
KSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGZyb21CYXNlKAorICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6
OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sK
KyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOwor
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xv
YmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KAorICAgICAgICBy
ZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAg
YmFzZShwcmVDYXBhY2l0eSwgb2xkUHJvcGVydHlDYXBhY2l0eSksCisgICAgICAgIHRvdGFsU2l6
ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNp
emVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9y
YWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShz
dHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0
eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFn
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXpl
X3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFn
ZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
ZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNp
emVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KG9sZFN0cnVjdHVy
ZSkpOworICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9
PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAg
dm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgc2l6ZV90IG9s
ZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIs
IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHRv
dGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uo
JnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFs
RGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksCisg
ICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAor
ICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhvbGRT
dHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6
ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHks
IGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
CisgICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBu
ZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAg
IC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1
c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNpdHkuCisgICAgdm9p
ZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAg
ICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAg
IHNpemVfdCBzaXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNh
cGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpLAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhp
bmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtY3B5KHRv
LCBmcm9tLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6
Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIHJldHVy
biByZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisg
ICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0luZGV4aW5n
SGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NFUlQobnVtYmVyT2ZT
bG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRvIHJld3JpdGUgdGhp
cyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKKyAgICAvLyBkaXJlY3Rpb24g
d2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBjaGVjayBvZiBt
ZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3ZpbmcgYSBzbWFsbCBhbW91bnQgb2YgbWVt
b3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0
CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgaXQuIEFuZCBubywgd2Ug
Y2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0bworICAgIC8vIGlubGluZSBtZW1tb3Zl
IChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZh
cmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkgb24gdGhlIGNvbXBpbGVyIHRvIHJlY29n
bml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIChzaW5jZQorICAgIC8v
IHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5k
IGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgorICAgIG1lbW1vdmUoCisgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFk
ZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMpLT5idXR0ZXJm
bHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJUKGhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJ
WE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgorICAgIG1lbW1vdmUoCisgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSArIG51bWJlck9mU2xvdHMs
CisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhp
bmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4gSW5kZXhp
bmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51bWJlck9mU2xvdHMpLT5i
dXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKKwogICAg
ICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAg
ICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIApAQCAt
MTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogICAgICAgICAm
Q2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZh
bHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NO
YW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhp
bmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0ZXJmbHk7CitjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1Y3QgQXJyYXlT
dG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6CisgICAgLy8gRGVmaW5l
IHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpT
VmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorICAgIC8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3Zl
cmZsb3cuCisgICAgZW51bSB7IG1heGltdW1MZW5ndGggPSAweDEwMDAwMDAwIH07CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXV4V29yZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihJbmRleGluZ0hlYWRlciwgbV9hdXhXb3JkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFkZXIs
IG1fbGVuZ3RoKTsgfQorICAgIAorICAgIC8vIFRoZSBmYWN0IHRoYXQgdGhlIGRlZmF1bHQgSW5k
ZXhpbmdIZWFkZXIgaXMgYWxsIHplcm8ncyBpcyBwYXJ0IG9mIHRoZQorICAgIC8vIGNvbnRyYWN0
IG9mIHRoaXMgY2xhc3MgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gVGhlIEpJVCBhbmQgR0Mg
ZGVwZW5kCisgICAgLy8gb24gaXQuCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1f
YXV4V29yZCgwKQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIAorICAg
IHZvaWQgc2V0TGVuZ3RoKHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChs
ZW5ndGggPD0gbWF4aW11bUxlbmd0aCk7CisgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOworICAg
IH0KKyAgICAKKyAgICB1aW50MzJfdCBhdXhXb3JkKCkgeyByZXR1cm4gbV9hdXhXb3JkOyB9Cisg
ICAgdm9pZCBzZXRBdXhXb3JkKHVpbnQzMl90IGF1eFdvcmQpIHsgbV9hdXhXb3JkID0gYXV4V29y
ZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5n
SGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJ
bmRleGluZ0hlYWRlciogZnJvbShjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEluZGV4aW5nSGVhZGVyKj4oYnV0
dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJv
bShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFn
ZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KHByb3BlcnR5U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFBy
b3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAg
Q29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsK
KyAgICB9CisgICAgCisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOwor
ICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAg
IAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0
aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5n
SGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgCisgICAgdWludDMy
X3QgbV9hdXhXb3JkOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhl
IGFycmF5IHR5cGUuCisgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhl
IGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZSBhbmQgaXRzIHR5cGUuCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVy
SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUg
IkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVfdCBJbmRl
eGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9k
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVfaAorI2Rl
ZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90
IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNlIG9mIGNh
cGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAg
ICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQXJyYXlTdG9yYWdlICAg
ICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rv
cnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CisvLyBtYXNrZWQgb2ZmIHVubGVzcyB5
b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYWRB
cnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVjdCBkaWQg
aGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBMaXN0IG9mIGFjY2VwdGFibGUg
YXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAg
ICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJy
YXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3RvcmFnZTsK
KworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDE1OworCisvLyBNYXNrIG9mIGFsbCBwb3Nz
aWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCitpbmxpbmUgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlcihJbmRleGluZ1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gISEodHlwZSAmIEhh
c0FycmF5U3RvcmFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5k
ZXhpbmdUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2EKICAgICAgICAgY2Fs
bEZyYW1lLT5nbG9iYWxUaGlzVmFsdWUoKSwKICAgICAgICAgY2FsbEZyYW1lLT5zY29wZSgpCiAg
ICAgKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNhcHR1cmVkQXJncyht
YXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1l
dGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlvbkV4ZWN1dGFibGUt
PmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYoZmFsc2UpCkBAIC03
NCwxMiArNzQsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICAvLyBO
byBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxsIGluIHRoZSBSZWdp
c3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJy
YXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFyZWdpc3RlckFycmF5
KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoYml0d2lzZV9j
YXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRo
aXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Cisg
ICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rl
ck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBp
dCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzOCw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTUzLDgg
KzE1Myw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxl
T2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9m
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWlj
U2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyAr
OTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXpl
KCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAg
ICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2Yg
cmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3Rl
cnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9y
ZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVu
IGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZEFyZ3M7CiAgICAgICAgIHVu
c2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJzIDogMjg7CiAgICAgICAgIHVuc2lnbmVkIG1faXNUb3Ju
T2ZmIDogMTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZm9y
IChpbnQgaSA9IGZyb207IGkgPCB0bzsgKytpKQogICAgICAgICAgICAgcmVnaXN0ZXJzW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBtX3JlZ2lzdGVyc1tpXS5nZXQoKSk7CiAKLSAgICAgICAgbV9y
ZWdpc3RlckFycmF5LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdpc3RlckFycmF5KTsKKyAgICAg
ICAgbV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICAgICAgbV9yZWdpc3RlcnMg
PSByZWdpc3RlcnM7CiAgICAgICAgIG1faXNUb3JuT2ZmID0gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwMyBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQogICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBv
cC5jb20pCiAgKgpAQCAtMjQsMTMgKzI0LDE3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogCiAj
aW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisj
aW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiUHJvcGVy
dHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00NSw0
ODAgKzQ5LDIzIEBAIG5hbWVzcGFjZSBKU0MgewogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChK
U0FycmF5KTsKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCi0vLyBP
dmVydmlldyBvZiBKU0FycmF5Ci0vLwotLy8gUHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMg
bWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9jYXRpb25zOgotLy8gICAqIFRoZSByZWd1
bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgotLy8g
ICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVzLgotLy8KLS8vIFByb3BlcnRpZXMgd2l0
aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3Qg
cmVwcmVzZW50YWJsZQotLy8gYXMgYW4gdW5zaWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZh
bHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lOREVYCi0vLyAoc3BlY2lmaWNhbGx5LCB0
aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVu
c2lnbmVkIDMyLWJpdAotLy8gaW50ZWdlcikgYXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGlj
ZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLwot
Ly8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxl
IGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKLS8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRF
WCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQot
Ly8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBtYXAuICBBbiBhcnJheSBpbmRleCBpIHdp
bGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCi0vLyBmYXNoaW9uOgotLy8KLS8vICAgKiBX
aGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3Jl
ZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCi0vLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBT
cGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgot
Ly8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKLS8vICAgICBiZSBzdG9yZWQgaW4g
dGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0
aGUgZGVuc2l0eSBvZgotLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZl
Y3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAotLy8gICAgICgxIC8gbWlu
RGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCi0v
LyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCi0vLyAgICAgaW4gdGhlIHNwYXJz
ZSBhcnJheS4KLQotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBpcyBkZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9u
IGJlbG93IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBz
dWNoIHRoYXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93
LiAgKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
ICsKLS8vICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVz
dCBiZSA8PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgot
I2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigo
MHhGRkZGRkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNl
IHZhbHVlcyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3
aXRob3V0IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBz
ZWUgPHJkYXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIDEwMDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggLSAxKQotLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBu
b3QgYW4gYXJyYXkgaW5kZXggZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgotI2RlZmluZSBN
QVhfQVJSQVlfSU5ERVggMHhGRkZGRkZGRVUKLQotLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xF
TiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRl
Ci0vLyBmb3IgYW4gYXJyYXkgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0
aCAoZS5nLiBhID0gbmV3IEFycmF5KDEyMykpCi0jZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQot
ICAgIAotLy8gVGhlIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxl
bmd0aCBhcnJheSB3aGVuIHRoZSBmaXJzdCBlbGVtZW50Ci0vLyBpcyBhZGRlZC4KLSNkZWZpbmUg
RklSU1RfVkVDVE9SX0dST1cgNFUKLQotLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2
ZWN0b3IgYW5kIHdoZW4gdG8gdXNlIGEgc3BhcnNlIG1hcC4KLS8vIEZvciBhbGwgYXJyYXkgaW5k
aWNlcyB1bmRlciBNSU5fU1BBUlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9y
LgotLy8gV2hlbiBpbmRpY2VzIGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFy
ZSBpbnZvbHZlZCwgd2UgdXNlIGEgdmVjdG9yCi0vLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxs
LiBJZiBtb3JlIHNwYXJzZSB0aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5EZW5zaXR5TXVsdGlwbGllciA9IDg7Ci0KIGNvbnN0IENsYXNzSW5mbyBKU0Fy
cmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5KX07CiAKLS8vIFdlIGtlZXAgdHJhY2sgb2YgdGhl
IHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiAgV2UgdXNlIHRoaXMK
LS8vIGFzIGEgc2ltcGxlIGhldXJpc3RpYyBmb3IgYXMgdGhlIHZhbHVlIHRvIGdyb3cgdGhlIG5l
eHQgYXJyYXkgZnJvbSBzaXplIDAuCi0vLyBUaGlzIHZhbHVlIGlzIGNhcHBlZCBieSB0aGUgY29u
c3RhbnQgRklSU1RfVkVDVE9SX0dST1cgZGVmaW5lZCBhYm92ZS4KLXN0YXRpYyB1bnNpZ25lZCBs
YXN0QXJyYXlTaXplID0gMDsKLQotc3RhdGljIGlubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JW
ZWN0b3IodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCi17Ci0gICAgcmV0dXJu
IGxlbmd0aCA8PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlN
dWx0aXBsaWVyIDw9IG51bVZhbHVlczsKLX0KLQotc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAg
ICBpZiAodGhyb3dFeGNlcHRpb24pCi0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3Nh
Z2UpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5D
WQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgp
CiB7Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsK
LSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVj
dG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9y
YWdlKSkKLSAgICAgICAgQ1JBU0goKTsKICAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2Fz
dDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
ID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwot
ICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIEluZGV4aW5n
SGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5zZXRMZW5n
dGgoaW5pdGlhbExlbmd0aCk7CisgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAg
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciA9IDA7CiAjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyAgICBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPSAwOworICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24gPSAwOwogI2VuZGlmCi0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLUpTQXJyYXkq
IEpTQXJyYXk6OnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAg
IC8vIENoZWNrIGZvciBsZW5ndGhzIGxhcmdlciB0aGFuIHdlIGNhbiBoYW5kbGUgd2l0aCBhIHZl
Y3Rvci4KLSAgICBpZiAoaW5pdGlhbExlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9
IG1heChpbml0aWFsTGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwotICAgIHVuc2lnbmVkIGluaXRp
YWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0b3JMZW5ndGgpOwotCi0gICAg
dm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3JhZ2UpKQotICAgICAgICBDUkFT
SCgpOwotICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+KG5l
d1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBtX3N0b3JhZ2U7Ci0gICAg
bV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0gICAgbV92ZWN0b3JMZW5ndGgg
PSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IGluaXRpYWxMZW5ndGg7Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1f
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKLSAgICBtX3N0b3JhZ2UtPm1faW5D
b21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGhpczsK
LX0KLQotLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIG9uIHRo
ZSBzYW1lIG9iamVjdC4KLXZvaWQgSlNBcnJheTo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQotewot
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spOwot
ICAgIHRoaXNPYmplY3QtPmRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLX0KLQotaW5saW5lIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJh
eSogYXJyYXksIHVuc2lnbmVkIGkpCi17Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKLSAg
ICBlbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgQWRk
UmVzdWx0IHJlc3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5
ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFj
aXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
KGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5
ID0gY2FwYWNpdHk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwotICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KLSAgICBpZiAocmVzdWx0
LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICByZW1vdmUo
cmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMg
JiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkg
ewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nv
ci5pc0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0
ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzZXR0
ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2FsbERhdGEpOwotICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgYXJncy5hcHBlbmQodmFsdWUpOwotICAgIGNh
bGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBhcmdzKTsKLX0KLQot
aW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdElu
ZGV4TW9kZSBtb2RlKQotewotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOwot
ICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0K
LSAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFk
ZCB0byB0aGUgc3BhcnNlIG1hcC4KLSAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRo
aXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90Ci0gICAgLy8gZXh0ZW5z
aWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92
ZSBhZ2Fpbi4KLSAgICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgJiYg
cmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgewotICAgICAgICBy
ZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBtb2Rl
ID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICB9Ci0KLSAgICBl
bnRyeS5hdHRyaWJ1dGVzID0gMDsKLSAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBh
cnJheSwgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAotewotICAgIEpTVmFsdWUg
dmFsdWUgPSBCYXNlOjpnZXQoKTsKLSAgICBBU1NFUlQodmFsdWUpOwotCi0gICAgaWYgKExJS0VM
WSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNH
ZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikgewotICAgICAg
ICBzbG90LnNldFVuZGVmaW5lZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2xv
dC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50
cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Ci17Ci0gICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKLX0KLQotaW5s
aW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXkpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKLSAg
ICBBU1NFUlQocmVzdWx0KTsKLQotICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRl
cigpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBh
c0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKLSAgICBpZiAoIWdldHRlcikKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0
dGVyLCBjYWxsRGF0YSk7Ci0gICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci19Ci0KLWlubGluZSBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAotewotICAgIEFTU0VS
VCghYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIEJhc2U6OmdldCgpOwotfQotCi1pbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotewotICAgIGl0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3Ig
aXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZpdC0+c2Vjb25kKTsKLX0KLQotdm9pZCBKU0FycmF5OjphbGxvY2F0ZVNwYXJzZU1hcChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IG5ldyBT
cGFyc2VBcnJheVZhbHVlTWFwOwotICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIodGhp
cywgZmluYWxpemUpOwotfQotCi12b2lkIEpTQXJyYXk6OmRlYWxsb2NhdGVTcGFyc2VNYXAoKQot
ewotICAgIGRlbGV0ZSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIG1fc3BhcnNlVmFsdWVNYXAgPSAw
OwotfQotCi12b2lkIEpTQXJyYXk6OmVudGVyRGljdGlvbmFyeU1vZGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgaWYg
KCFtYXApIHsKLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZ2xvYmFsRGF0YSk7Ci0gICAgICAg
IG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgfQotCi0gICAgaWYgKG1hcC0+c3BhcnNlTW9k
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKLQotICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5ldyBlbnRyeSBpbiB0aGUg
bWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKLSAgICAgICAgLy8gYW5kIGF0
dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhlbS4KLSAgICAgICAgaWYg
KHZhbHVlKQotICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRlcmF0b3ItPnNlY29uZC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQqIG5ld1Jhd1N0
b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShz
dG9yYWdlU2l6ZSgwKSwgJm5ld1Jhd1N0b3JhZ2UpKQotICAgICAgICBDUkFTSCgpOwotICAgIAot
ICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IHN0YXRpY19jYXN0PEFycmF5U3RvcmFnZSo+
KG5ld1Jhd1N0b3JhZ2UpOwotICAgIG1lbWNweShuZXdTdG9yYWdlLCBtX3N0b3JhZ2UsIHN0b3Jh
Z2VTaXplKDApKTsKLSAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0g
ICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICBtX2luZGV4QmlhcyA9IDA7Ci0gICAgbV92
ZWN0b3JMZW5ndGggPSAwOwotfQotCi12b2lkIEpTQXJyYXk6OnB1dERlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKLXsKLSAg
ICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgaWYgKGRlc2Ny
aXB0b3IudmFsdWUoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGVudHJ5SW5NYXAt
PnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBl
bnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1
cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7Ci0gICAgICAg
IEpTT2JqZWN0KiBnZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVz
ZW50KCkpCi0gICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwot
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0g
ICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOwotICAgICAg
ICBKU09iamVjdCogc2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpKQotICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsK
LSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQot
ICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKLQotICAg
ICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7
Ci0gICAgICAgIGlmIChnZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKLSAgICAgICAgaWYgKHNldHRlcikKLSAgICAgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwotCi0g
ICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29y
KTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRl
c092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRv
cigpKTsKLSAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Ci19Ci0KLS8vIERlZmluZWQgaW4gRVM1
LjEgOC4xMi45Ci1ib29sIEpTQXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgdGhyb3dFeGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYp
OwotCi0gICAgaWYgKCFpblNwYXJzZU1vZGUoKSkgewotICAgICAgICAvLyBGYXN0IGNhc2U6IHdl
J3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRy
aWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAg
IC8vIOKAkyBob3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3Npbmcg
YXR0cmlidXRlcyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKLSAgICAg
ICAgLy8gc3RhdGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQg
YSB2YWx1ZSB3aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KLSAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIHRocm93RXhjZXB0
aW9uID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90
VGhyb3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5n
bG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0gICAgQVNTRVJUKG1hcCk7Ci0KLSAgICAvLyAxLiBMZXQgY3VycmVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KLSAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwotICAgIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0KLSAg
ICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgLy8gMy4gSWYgY3VycmVudCBpcyB1bmRlZmlu
ZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgotICAgIC8vIDQuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KLSAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewotICAg
ICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9w
ZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0RhdGFEZXNj
cmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3BlcnR5Ci0g
ICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dyaXRhYmxl
XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMK
LSAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXds
eQotICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1
ZS4KLSAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVy
dHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQ
IG9mCi0gICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtbRW51bWVy
YWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJl
ZCBieQotICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxk
IG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVhdGVkIHBy
b3BlcnR5Ci0gICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICAgICAg
Ly8gNC5jLiBSZXR1cm4gdHJ1ZS4KLQotICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVs
dHM7Ci0gICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBSZWFkT25seTsKLSAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKLQot
ICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1
bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAg
ICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBpcyBhYnNlbnQuCi0gICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERl
c2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGlu
IERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3Vy
cmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4K
LSAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKLSAgICBlbnRyeUluTWFwLT5nZXQoY3Vy
cmVudCk7Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxU
byhleGVjLCBjdXJyZW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyA3LiBJZiB0
aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KLSAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlm
IHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgaWYg
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1l
cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBm
aWVsZHMgb2YgY3VycmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFj
aCBvdGhlci4KLSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBj
dXJyZW50LmVudW1lcmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
LSAgICB9Ci0KLSAgICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUs
IHRoZW4gbm8gZnVydGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghZGVzY3Jp
cHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNE
YXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRp
ZmZlcmVudCByZXN1bHRzLCB0aGVuCi0gICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0
b3IoKSAhPSBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgLy8g
OS5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOwotICAgICAgICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlz
IHRydWUsIHRoZW4gY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGEKLSAgICAgICAgICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHku
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKA
mHMKLSAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0
dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMg
dG8KLSAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICAgICAgLy8g
OS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20g
YW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgotICAgICAgICAgICAgLy8g
UHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCY
cyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXQotICAgICAgICAgICAgLy8gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0
byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0
YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAg
ICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0
YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgotICAgICAgICAgICAgLy8gMTAu
YS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhl
bgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50Lndy
aXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtb
V3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1d
IGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53
cml0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVu
Y29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElm
IHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAg
ICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50Lltb
VmFsdWVdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUo
KSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgp
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0
YWJsZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5z
ZXR0ZXJQcmVzZW50KCkpOwotICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNj
cmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0
cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNl
LCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBp
cyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkg
JiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBE
ZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRd
XSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2Vu
dCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAxMi4gRm9yIGVhY2gg
YXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3Bv
bmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KLSAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVu
dHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOwotICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYnV0dGVyZmx5OwogfQogCiB2b2lkIEpTQXJy
YXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKQEAg
LTUyNyw5ICs3NCw5IEBAIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXQK
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSB8fCB3cml0YWJsZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZW50ZXJEaWN0aW9uYXJ5TW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOwogCi0gICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAg
QVNTRVJUKG1hcCk7CiAgICAgbWFwLT5zZXRMZW5ndGhJc1JlYWRPbmx5KCk7CiB9CkBAIC02MzAs
MzggKzE3NywxMCBAQCBib29sIEpTQXJyYXk6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0CiAg
ICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KICAg
ICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywg
YW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVl
LgogICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZp
bmVPd25OdW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci19
Ci0KLWJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIGlmIChpID49
IHN0b3JhZ2UtPm1fbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQot
ICAgICAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChpIDwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3Bh
cnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICByZXR1cm4gYXJyYXktPkpTT2Jq
ZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgdGhyb3dFeGNlcHRpb24pOwogfQogCiBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtNjcyLDEwICsxOTEsNiBAQCBib29sIEpTQXJy
YXk6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIEpTQXJyYXk6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgc2xvdCk7Ci0KICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCkBAIC02ODcsMjYgKzIwMiw2IEBAIGJvb2wgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwot
ICAgIAotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBpZiAoaSA+PSBzdG9yYWdl
LT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGkgPCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVlLmdl
dCgpLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5t
X3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCkBAIC03MTQsMTEgKzIw
OSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoKIHZvaWQgSlNB
cnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
SlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWdu
ZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CiAg
ICAgICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IHZhbHVlLnRvVUludDMyKGV4ZWMpOwpAQCAtNzMz
LDE5NiArMjIzLDkgQEAgdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdAog
ICAgIEpTT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7CiB9CiAKLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
LXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAg
ICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBzdG9y
ZSB0byB0aGUgdmVjdG9yLgotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgp
IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7
Ci0KLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3RvciBhcyBu
ZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAgICAgbGVuZ3Ro
ID0gaSArIDE7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfSBlbHNlIGlm
ICghdmFsdWVTbG90KQotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OwotCi0gICAgICAgIHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0
LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSAyXjMyLTEgLSB0aGlzIGlzIG5vdCBh
biBhcnJheSBpbmRleCAoc2VlIEVTNS4xIDE1LjQpLCBhbmQgaXMgdHJlYXRlZCBhcyBhIHJlZ3Vs
YXIgcHJvcGVydHkuCi0gICAgaWYgKFVOTElLRUxZKGkgPiBNQVhfQVJSQVlfSU5ERVgpKSB7Ci0g
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKLSAgICAgICAgdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEZvciBhbGwgb3RoZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aC4KLSAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgp
OwotfQotCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQot
ewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQot
ICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9m
IHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJz
ZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBj
dXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAg
ICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVu
dGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAg
ICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5n
dGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sg
dGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4g
dHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2Vz
cyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRl
ZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9y
YWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50
IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2Nh
dGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VN
YXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsK
LSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nh
cnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkg
Pj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxl
bmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHko
KSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhl
ciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUg
IHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxk
IGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVt
VmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUo
KTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
bGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGks
IHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBS
ZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZh
bHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2
YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0g
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
LSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChn
bG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVh
bGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRv
IHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0
b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
LX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9k
ZSBtb2RlKQotewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBv
dXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3
ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFw
KSkgewotICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3Vs
ZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFw
LgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xl
bmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3Rvciwg
YW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNE
ZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYg
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdl
ID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJv
cGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBh
bGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywg
aSwgdmFsdWUsIG1vZGUpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNl
c3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYg
KGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlm
IGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0gICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdElu
ZGV4TGlrZVB1dERpcmVjdCkgewotICAgICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJl
Y3RJbmRleFNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxl
LiIpOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVz
aW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgot
ICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9k
ZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24g
ZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwg
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotCi0gICAg
Ly8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9u
dW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBh
bGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1h
cC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9y
OwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5k
KCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkg
aW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
dmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0g
ICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC05MzAsMzUgKzIzMyw2IEBAIGJvb2wgSlNBcnJheTo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNl
bGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGlmIChpID4g
TUFYX0FSUkFZX0lOREVYKQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xl
YXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVj
dC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQo
KSkgewotICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFwLT5yZW1vdmUo
aXQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNv
cnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICB1bnNpZ25lZCBkYSA9ICpz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+KGEpOwpAQCAtOTY2LDEyNyArMjQwLDI2IEBAIHN0
YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4g
ZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAg
IC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBm
b3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxh
cmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBh
bG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlO
YW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdl
LT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgVmVjdG9yPHVu
c2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7
Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25k
LmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNv
cnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtl
eXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkK
LXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0
TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRl
c2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBt
YXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5j
cmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVs
c2UgewotICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAv
LyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAv
LyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdM
ZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRl
cm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCAr
IChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFy
cmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAg
IHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
LX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxl
YXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1
c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAg
IC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNh
dXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JM
ZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0
aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNp
dHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZ
KCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1f
YWxsb2NCYXNlOwotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3Rv
cmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUo
bmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
c3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+
KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9h
bGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9j
QmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwg
YnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRv
IG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0g
bWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0
b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2lu
ZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBh
Y2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxv
Y0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShz
dG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBt
X2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgot
ICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYm
IChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhC
aWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5k
ZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5
U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVt
bW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0g
ICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBt
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7
CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9v
bSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGNvdW50KQogewotICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxl
ZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0gICAgQVNTRVJUKGNvdW50ID4gbV9pbmRleEJpYXMp
OworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOwor
ICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAg
IC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGgu
CisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3Rl
cCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBtZXRyaWNzOgpAQCAtMTA5NSw4ICsyNjgsOCBAQCBi
b29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gICogY3VycmVu
dENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1
ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBs
YXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCBy
ZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1f
bGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV92ZWN0b3JMZW5n
dGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7Cisg
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGgg
aXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQg
PiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTExMDQs
OCArMjc3LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAg
IHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50
OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4Qmlh
cyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VS
VChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAg
ICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFz
OworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50
Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFz
OwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZs
b3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1
bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwg
bWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCkBAIC0x
MTE2LDEwICsyODksMTEgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0ds
bwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKICAgICAvLyBJZiB0aGUgY3VycmVu
dCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2Uh
KSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVz
aXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCBy
ZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+
bV9hbGxvY0Jhc2U7CisgICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsK
ICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCisgICAg
ICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOworICAg
ICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJm5l
d0FsbG9jQmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3Jh
Z2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0xMTMyLDQ1ICszMDYsNDAg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vIElmIGl0
IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBhbW91bnQgdGhhdCB3aWxsIHJlbWFpbiBiYXNlZCBvbiBh
biBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0aGUKICAgICAvLyB2ZWN0b3Igd2l0aCBoYWxmIHRoZSBw
b3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2aW91c2x5LgogICAgIHVuc2lnbmVkIHBvc3RDYXBhY2l0
eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKGxlbmd0
aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgIC8vIEF0b21pYyBkZWNheSwg
KyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxh
YmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkgPSBtaW4oKG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3Ro
KSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7CisgICAg
ICAgIHBvc3RDYXBhY2l0eSA9IG1pbigoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgp
ID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9u
LCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgotICAgICAgICBBU1NFUlQobmV3
QWxsb2NCYXNlICE9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlIHx8IHBvc3RDYXBhY2l0eSA8IG1fdmVj
dG9yTGVuZ3RoIC0gbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IHJlcXVp
cmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OwotICAgIG1faW5kZXhCaWFzID0gbmV3U3Rv
cmFnZUNhcGFjaXR5IC0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8
VW5rbm93bj4qPihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwotCi0gICAgLy8gU3RlcCA0
OgotICAgIC8vIENvcHkgYXJyYXkgZGF0YSAvIGhlYWRlciBpbnRvIHRoZWlyIG5ldyBsb2NhdGlv
bnMsIGNsZWFyIHBvc3QtY2FwYWNpdHkgJiBmcmVlIGFueSBvbGQgYWxsb2NhdGlvbi4KLQotICAg
IC8vIElmIHRoaXMgaXMgYmVpbmcgbW92ZWQgd2l0aGluIHRoZSBleGlzdGluZyBidWZmZXIgb2Yg
bWVtb3J5LCB3ZSBhcmUgYWx3YXlzIHNoaWZ0aW5nIGRhdGEKLSAgICAvLyB0byB0aGUgcmlnaHQg
KHNpbmNlIGNvdW50ID4gbV9pbmRleEJpYXMpLiBBcyBzdWNoIHRoaXMgbWVtbW92ZSBjYW5ub3Qg
dHJhbXBsZSB0aGUgaGVhZGVyLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLT5tX3ZlY3RvciArIGNv
dW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiB1
c2VkVmVjdG9yTGVuZ3RoKTsKLSAgICBtZW1tb3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOwotCi0gICAgLy8gQXJlIHdlIGNvcHlpbmcgaW50byBhIG5ldyBhbGxvY2F0aW9u
PwotICAgIGlmIChuZXdBbGxvY0Jhc2UgIT0gbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAg
ICAgICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAg
ICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3QWxsb2NCYXNlOworICAgICAgICBBU1NF
UlQobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSkgfHwgcG9zdENh
cGFjaXR5IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBv
c3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNp
dHkgLSBuZXdWZWN0b3JMZW5ndGg7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1
dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMsIHByb3BlcnR5Q2Fw
YWNpdHkpOworICAgIAorICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVz
ZWRWZWN0b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3Bl
cnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Cisg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJp
YXM7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxl
bmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRl
ciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KLSAgICBB
U1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXApOworICAgIEFTU0VS
VChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCi0gICAgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
ICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAg
aWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKQEAgLTExOTcsNyArMzY2LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLAogICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRv
ciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAh
PSBtYXAtPm5vdEZvdW5kKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5h
dHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3Zl
KGl0KTsKQEAgLTEyMDYsMTQgKzM3NSwxNCBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGtleXNbaV0p
OwogICAgICAgICAgICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAg
ICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRlIHByb3BlcnRpZXMg
ZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWlu
KGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90OwpAQCAtMTIy
Miw1MyArMzkxLDY1IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVuZ3RoOwor
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAg
ICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlz
TGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzTGVuZ3Ro
V3JpdGFibGUoKSkKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsK
LSAgICBpZiAoaW5kZXggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKLSAgICAgICAg
aWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOwotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90LmdldCgpOwotICAg
ICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbGVu
Z3RoIC0gMTsKKyAgICAgICAgaWYgKGluZGV4IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaW5kZXhdOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAg
ICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7CisgICAgICAgICAgICAgICAgdmFsdWVT
bG90LmNsZWFyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdy
aXRhYmxlKCkpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleDsKLSAgICAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owor
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkpOworICAgICAgICAgICAg
ICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCk7CisgICAgICAgICAgICAgICAgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudCBpbmR4LgotICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCi0gICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
dGhpcywgZXhlYywgaW5kZXgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFi
bGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8v
IENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMg
aW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywg
ZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxl
IHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBz
ZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4K
KyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwg
dGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIs
IGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAg
Ly8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBl
bGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdp
dGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3Niw2MyArNDU3LDc3IEBAIEpTVmFsdWUg
SlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkg
b2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2Ug
ZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFs
d2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAg
ICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9w
ZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdl
LT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAg
ICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0g
ICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhp
biB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAg
ICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJv
cGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0
b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRy
dWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4x
IHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5k
ZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFnZSk7CisgICAgICAg
IGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
IH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50
KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291
bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFy
cmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBv
ciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5l
cmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3RoICE9IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKG9s
ZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghb2xkTGVuZ3RoKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50OworICAgIHN0b3Jh
Z2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYgKG1fdmVjdG9y
TGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAodW5zaWduZWQp
Y291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBtaW4odmVjdG9y
TGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92ZWN0b3JMZW5n
dGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgc3Rv
cmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBp
ZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3Rv
cmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCi0gICAgICAgICAg
ICBtX2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAg
ICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNv
dW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNDEsNTkgKzUzNiwzMCBAQCBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVu
c2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFy
cmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9y
IGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVy
aWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3Ro
ICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2Rl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3Vu
dCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFz
ZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3Jh
Z2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBt
X3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0g
Y291bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5z
aGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsK
KyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
ICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmds
b2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxh
Zyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fc3RvcmFn
ZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhpc09iamVjdC0+bGVu
Z3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1f
c3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFz
ZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3Ro
ICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rvci0+c2xvdCgpLCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJhc2VTdG9yYWdlICE9
IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgICAgIHRoaXNP
YmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0
YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzT2Jq
ZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1f
YWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkKLSAg
ICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0aWMgaW50IGNvbXBh
cmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICBk
b3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVyKCk7CkBA
IC0xNDEwLDExMiArNTc2LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JR
U29ydChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBj
YWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdN
b2RlKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29t
cGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJz
ID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFz
dG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNB
cmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7OworICAg
ICAgICAKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYm9vbCBhbGxWYWx1
ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7
CisgICAgICAgICAgICAgICAgYWxsVmFsdWVzQXJlTnVtYmVycyA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWFsbFZhbHVlc0FyZU51bWJlcnMpCisgICAgICAgICAgICByZXR1cm4gc29ydChleGVj
LCBjb21wYXJlRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBpcyBmYXN0LCBxc29ydCBpcyBmYXN0
ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCisgICAgICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJn
ZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCisgICAgICAg
IC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVxdWFsIHByaW1pdGl2
ZSB2YWx1ZXMuCisgICAgICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplLCBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7CisgICAgICAg
IAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2sp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBpZiAoIWFsbFZhbHVlc0FyZU51
bWJlcnMpCi0gICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhKTsKLQotICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlz
IGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKLSAgICAvLyBhbHNvIGRv
bid0IHJlcXVpcmUgbWVyZ2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIg
dmlzaWJsZQotICAgIC8vIHNpZGUtZWZmZWN0IGZyb20gc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGVx
dWFsIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUs
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsK
LQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lk
IEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VN
b2RlKCkpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29t
cGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ29udmVydGluZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBz
dHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRvIGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNv
cnQgYmFzZWQgb24gdGhhdC4KLSAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVt
ZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJl
cyBhIGxhcmdlIHRlbXBvcmFyeQotICAgIC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0
cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNvbWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBt
ZXRob2RzIHRoYXQgcmV0dXJuCi0gICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyBy
ZXN1bHRzLCBlZmZlY3RpdmVseSBtYWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQu
Ci0KLSAgICBWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKTsKLSAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogICAgIAotICAgIEhlYXA6OmhlYXAodGhpcyktPnB1
c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLQotICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZDsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OwotICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKLSAgICAgICAgaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0
aXZlKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgbG9vcCBjb250aW51
ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50IHZhbHVlcyBldmVuIGFmdGVyCi0gICAg
Ly8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQotICAgICAgICB2
YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMp
OwotCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5IHN0cmluZyB2YWx1ZSwgYSBm
YXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBzb3J0LiBUaGF0IHdvdWxkIGJl
IE8oTikgcmF0aGVyCi0gICAgLy8gdGhhbiBPKE4gbG9nIE4pLgotCisgICAgICAgIAorICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydGlu
ZyBKYXZhU2NyaXB0IHZhbHVlcyB0byBzdHJpbmdzIGNhbiBiZSBleHBlbnNpdmUsIHNvIHdlIGRv
IGl0IG9uY2UgdXAgZnJvbnQgYW5kIHNvcnQgYmFzZWQgb24gdGhhdC4KKyAgICAgICAgLy8gVGhp
cyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3ZlbWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBj
b21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWlyZXMgYSBsYXJnZSB0ZW1wb3JhcnkKKyAgICAgICAg
Ly8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29t
ZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KKyAgICAg
ICAgLy8gcmFuZG9tIG9yIG90aGVyd2lzZSBjaGFuZ2luZyByZXN1bHRzLCBlZmZlY3RpdmVseSBt
YWtpbmcgY29tcGFyZSBmdW5jdGlvbiBpbmNvbnNpc3RlbnQuCisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiB2YWx1ZXMobGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KTsKKyAgICAgICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wdXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVl
cyk7CisgICAgICAgIAorICAgICAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyA9IHRy
dWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOyBpKyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7
CisgICAgICAgICAgICB2YWx1ZXNbaV0uZmlyc3QgPSB2YWx1ZTsKKyAgICAgICAgICAgIGlzU29y
dGluZ1ByaW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5p
c1ByaW1pdGl2ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhl
IGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQg
dmFsdWVzIGV2ZW4gYWZ0ZXIKKyAgICAgICAgLy8gYSB0b1N0cmluZyBjYWxsIHJhaXNlcyBhbiBl
eGNlcHRpb24uCisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgdmFsdWVzW2ldLnNlY29u
ZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVjKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgSGVhcDo6aGVh
cCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3ZSBzb3J0IGJ5
IHN0cmluZyB2YWx1ZSwgYSBmYXN0IGFsZ29yaXRobSBtaWdodCBiZSB0byB1c2UgYSByYWRpeCBz
b3J0LiBUaGF0IHdvdWxkIGJlIE8oTikgcmF0aGVyCisgICAgICAgIC8vIHRoYW4gTyhOIGxvZyBO
KS4KKyAgICAgICAgCiAjaWYgSEFWRShNRVJHRVNPUlQpCi0gICAgaWYgKGlzU29ydGluZ1ByaW1p
dGl2ZVZhbHVlcykKLSAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwot
ICAgIGVsc2UKLSAgICAgICAgbWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgp
LCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsK
KyAgICAgICAgaWYgKGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcykKKyAgICAgICAgICAgIHFzb3J0
KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwg
Y29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bWVyZ2Vzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbHNlCi0gICAgLy8gRklY
TUU6IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFi
bGUgc29ydC4KLSAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgot
ICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFsdWVTdHJp
bmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKKyAgICAgICAgLy8gRklYTUU6
IFRoZSBxc29ydCBsaWJyYXJ5IGZ1bmN0aW9uIGlzIGxpa2VseSB0byBub3QgYmUgYSBzdGFibGUg
c29ydC4KKyAgICAgICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJs
ZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4K
KyAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2VuZGlmCi0KLSAg
ICAvLyBJZiB0aGUgdG9TdHJpbmcgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBh
cnJheSBvciB2ZWN0b3Igc3RvcmFnZSwKLSAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhh
bmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KLSAgICBpZiAobV92ZWN0
b3JMZW5ndGggPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0gICAgICAgIGluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCkKLSAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZDsKLQotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKQotICAgICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3QpOwotCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9w
VGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgdG9TdHJpbmcg
ZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBvciB2ZWN0b3Igc3RvcmFn
ZSwKKyAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBoYW5kbGUgdGhlIG9yaWduYWwg
bnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCisgICAgICAgIGlmIChzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkgeworICAgICAgICAgICAgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZXNbaV0uZmlyc3Qp
OworICAgICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3Io
JnZhbHVlcyk7CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29y
dENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0
cnVjdCBBVkxUcmVlTm9kZUZvckFycmF5Q29tcGFyZSB7CkBAIC0xNTk3LDI1MyArNzg4LDI1NyBA
QCBzdHJ1Y3QgQVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUgCiAKIHZvaWQgSlNBcnJh
eTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlw
ZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5T
cGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgLy8gRklYTUU6
IFRoaXMgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBv
ciBpbiB0b051bWJlci4KLQotICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGls
ZWQgaW4gLSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKLSAgICAvLyBp
ZiBhIGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCi0gICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9sZW5n
dGggPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpKTsKLSAgICBpZiAobV9zdG9yYWdlLT5tX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCBt
X3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0
aCArIChtX3NwYXJzZVZhbHVlTWFwID8gbV9zcGFyc2VWYWx1ZU1hcC0+c2l6ZSgpIDogMCk7Ci0K
LSAgICBpZiAoIW5vZGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZMVHJlZTxBVkxU
cmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVu
b3VnaCBmb3IgMl4zMSBpdGVtcwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fZXhlYyA9IGV4ZWM7
Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24gPSBjb21wYXJlRnVuY3Rp
b247Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsK
LSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsRGF0YSA9ICZjYWxsRGF0YTsKLSAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKLQotICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hl
ZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKLQotICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlcy5iZWdpbigpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOworICAgIAorICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2Rp
ZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAot
ICAgIC8vIHJpZ2h0IG91dCBmcm9tIHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0
cmVlIGhlcmUuCi0KLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBu
dW1VbmRlZmluZWQgPSAwOwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwgaWdub3Jp
bmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5zZXJ0aW5n
IGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9z
dG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAgICAgaWYgKCF2IHx8IHYu
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgdHJlZS5pbnNlcnQo
bnVtRGVmaW5lZCk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9zdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2
LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251
bURlZmluZWRdLnZhbHVlID0gdjsKLSAgICAgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZp
bmVkKTsKLSAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2Vw
dGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgorICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAt
IGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAorICAgICAgICAvLyBpZiBh
IGxhcmdlciBhcnJheSBpcyBwYXNzZWQuCisgICAgICAgIEFTU0VSVChzdG9yYWdlLT5sZW5ndGgo
KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpOworICAgICAgICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVk
IG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5ndGggKyAoc3RvcmFnZS0+bV9zcGFyc2VNYXAgPyBz
dG9yYWdlLT5tX3NwYXJzZU1hcC0+c2l6ZSgpIDogMCk7CisgICAgICAgIAorICAgICAgICBpZiAo
IW5vZGVDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFWTFRy
ZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0
NCBpcyBlbm91Z2ggZm9yIDJeMzEgaXRlbXMKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9l
eGVjID0gZXhlYzsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlRnVuY3Rpb24g
PSBjb21wYXJlRnVuY3Rpb247CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxUeXBlID0gY2FsbFR5cGU7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxEYXRhID0gJmNhbGxEYXRhOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdy
b3cobm9kZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZUpTKQorICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQ
dHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rp
b24pLCAyKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXMuYmVnaW4oKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9y
LCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQKKyAgICAgICAgLy8gcmlnaHQgb3V0IGZyb20g
dW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBhcnJheSwg
aWdub3JpbmcgbWlzc2luZyB2YWx1ZXMsIGNvdW50aW5nIHVuZGVmaW5lZCBvbmVzLCBhbmQgaW5z
ZXJ0aW5nIGFsbCBvdGhlciBvbmVzIGludG8gdGhlIHRyZWUuCisgICAgICAgIGZvciAoOyBudW1E
ZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0g
djsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICB9CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
OworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOworICAgICAgICAgICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
bmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0KLSAgICBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAg
ICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0
aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3VnaCB0byBo
b2xkIGFsbCB0aGUgZW50cmllcy4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChl
eGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZp
bmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBu
ZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFy
Z2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgorICAgICAgICAgICAgICAgIGlmICgo
bmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIG5ld1VzZWRWZWN0b3JMZW5ndGgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVk
XS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgICAg
IHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOworICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKCk7CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0u
dmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKLSAgICAgICAgICAgIHRyZWUu
aW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURl
ZmluZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQg
YmUKKyAgICAgICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCisgICAgICAg
IAorICAgICAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KKyAgICAg
ICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+OjpJdGVyYXRv
ciBpdGVyOworICAgICAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7CisgICAgICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgeworICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKKyAgICAgICAgICAgICsraXRlcjsKICAgICAgICAgfQot
Ci0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1
dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHVudXNlZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7
CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNl
ZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBB
U1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7Ci0K
LSAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3Ro
IG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQotICAgIC8vIG1vZGlmeWluZyB0
aGUgdmVjdG9yIGluY29ycmVjdGx5LgotCi0gICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50
byBtX3N0b3JhZ2UuCi0gICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSwgNDQ+OjpJdGVyYXRvciBpdGVyOwotICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsK
LSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bURlZmluZWQ7ICsraSkgewotICAgICAgICBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzWyppdGVyXS52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKKyAgICAgICAgCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgLy8g
UHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1E
ZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdW51c2Vk
IHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgotICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKLQotICAgIG1fc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9pZCBKU0FycmF5OjpmaWxsQXJn
TGlzdChFeGVjU3RhdGUqIGV4ZWMsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzKQogewotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgdmVjdG9y
RW5kID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgdW5zaWdu
ZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVu
Z3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7
CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPmxlbmd0aCgp
OyArK2kpCisgICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiB9CiAKIHZvaWQgSlNBcnJh
eTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgp
KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAg
dW5zaWduZWQgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZv
ciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0g
bWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKDsgaSA8
IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXYpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9Ci0KLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBj
YWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CiB9CiAKIHVuc2lnbmVkIEpT
QXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAg
ICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQot
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsK
KyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogCi0gICAgdW5zaWduZWQgbnVt
RGVmaW5lZCA9IDA7Ci0gICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKLQotICAgIGZvciAo
OyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAg
IEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAg
ICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQor
ICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkK
LSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodik7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5s
ZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7
CisgICAgICAgIAorICAgICAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsrbnVtRGVmaW5lZCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0
b3JbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7Ci0K
LSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgewot
ICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwotICAgICAgICBpZiAo
bmV3VXNlZFZlY3Rvckxlbmd0aCA+IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBD
aGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxhcmdlIGVub3Vn
aCB0byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKLSAgICAgICAgICAgIC8vIGV4Y2Vw
dGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5ndGgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZp
bmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5l
ZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgfQogICAgICAgICB9
Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNv
bmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7
Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRW
ZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZp
bmVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKLQotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVu
Z3RoOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Ci0KLSAg
ICByZXR1cm4gbnVtRGVmaW5lZDsKLX0KLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0K
LXZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBl
KQotewotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIEFTU0VS
VCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0KLSAgICBBU1NFUlQoc3Rv
cmFnZSk7Ci0gICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgIEFT
U0VSVCghbV9zcGFyc2VWYWx1ZU1hcCk7Ci0KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3Rv
ciA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yTGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KSkgewotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAg
ICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAg
ICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVj
dCB3YXMgZGVhbGxvY2F0ZWQuCi0gICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hl
Y2spCi0gICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3Rvcik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0g
bnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAg
ICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlm
IChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFy
cmF5IGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcyAtIGlmIG5vdCwKKyAgICAg
ICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgdGhyb3duIGJ5IGNhbGxlci4KKyAgICAgICAgICAg
ICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0
aCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsr
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7
IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNl
ZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKKyAgICAgICAgCisgICAg
ICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbnVtRGVmaW5lZDsKICAgICB9Ci0gICAgQVNTRVJUKG51bVZh
bHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgIEFTU0VS
VChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0KLSAgICBpZiAobV9z
cGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+
Zmlyc3Q7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAg
QVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZCk7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaykKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1Vu
ZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0
ZWQuCi0gICAgICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIAotI2VuZGlmCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
LDE0MiArMjEsMzAgQEAKICNpZm5kZWYgSlNBcnJheV9oCiAjZGVmaW5lIEpTQXJyYXlfaAogCisj
aW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCi0jZGVmaW5lIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZIDAKLQogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBKU0FycmF5OwogICAg
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgIGVudW0gUHV0RGlyZWN0SW5kZXhN
b2RlIHsgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0LCBQdXREaXJlY3RJbmRleFNob3VsZE5v
dFRocm93LCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IH07Ci0KLSAgICBzdHJ1Y3QgU3BhcnNl
QXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewotICAgICAgICB0eXBl
ZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOwotCi0gICAgICAgIFNwYXJzZUFycmF5RW50
cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KLQotICAgICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUq
LCBKU0FycmF5KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5U2xvdCYpIGNvbnN0
OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0b3ImKSBjb25zdDsKLSAgICAgICAg
SlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7Ci0KLSAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCB7Ci0gICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRI
YXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRf
dD4gPiBNYXA7Ci0KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOb3JtYWwgPSAw
LAotICAgICAgICAgICAgU3BhcnNlTW9kZSA9IDEsCi0gICAgICAgICAgICBMZW5ndGhJc1JlYWRP
bmx5ID0gMiwKLSAgICAgICAgfTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0
OwotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoKQotICAgICAgICAgICAgOiBtX2ZsYWdz
KE5vcm1hbCkKLSAgICAgICAgICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwot
Ci0gICAgICAgIGJvb2wgc3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3Bh
cnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxG
bGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBs
ZW5ndGhJc1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3Mg
JiBMZW5ndGhJc1JlYWRPbmx5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMZW5ndGhJ
c1JlYWRPbmx5KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0
PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAg
ICAgICAgdm9pZCBwdXQoRXhlY1N0YXRlKiwgSlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNB
cnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUpOwotICAgICAgICBB
ZGRSZXN1bHQgYWRkKEpTQXJyYXkqLCB1bnNpZ25lZCk7Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQo
dW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQotICAgICAgICAvLyBUaGlzIHNo
b3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxpZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUg
ZmluZCkuCi0gICAgICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShp
dCk7IH0KLSAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7
IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGRvIG5vdCBtdXRhdGUgdGhlIGNvbnRlbnRz
IG9mIHRoZSBtYXAuCi0gICAgICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KLSAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNF
bXB0eSgpOyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnModW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV9tYXAuY29udGFpbnMoaSk7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5zaXplKCk7IH0KLSAgICAgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9l
bmQgaXRlcmF0aW9uLgotICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmJlZ2luKCk7IH0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1hcCBtX21h
cDsKLSAgICAgICAgRmxhZ3MgbV9mbGFnczsKLSAgICAgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBh
Y2l0eTsKLSAgICB9OwotCi0gICAgLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFjdHVhbCBkYXRh
IHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3MgY29u
dGFpbmVkIEFycmF5U3RvcmFnZQotICAgIC8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rv
ci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVkIEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUg
Z2V0U3RvcmFnZSgpIGFuZCAKLSAgICAvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gIEl0IGlzIGlt
cG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlT
dG9yYWdlIHRoYXQgCi0gICAgLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3Bl
cmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNp
bmc6Ci0gICAgLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFs
dWUpCi0gICAgc3RydWN0IEFycmF5U3RvcmFnZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OyAvLyBUaGUgImxlbmd0aCIgcHJvcGVydHkgb24gdGhlIGFycmF5Ci0gICAgICAgIHVuc2lnbmVk
IG1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYWxsb2NCYXNlOyAvLyBQb2lu
dGVyIHRvIGJhc2UgYWRkcmVzcyByZXR1cm5lZCBieSBtYWxsb2MoKS4gIEtlZXBpbmcgdGhpcyBw
b2ludGVyIGRvZXMgZWxpbWluYXRlIGZhbHNlIHBvc2l0aXZlcyBmcm9tIHRoZSBsZWFrIGRldGVj
dG9yLgotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgIC8vIE5lZWRzIHRvIGJl
IGEgdWludHB0cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCi0gICAgICAgIHVpbnRwdHJfdCBt
X2luaXRpYWxpemF0aW9uSW5kZXg7Ci0gICAgICAgIHVpbnRwdHJfdCBtX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uOwotI2Vsc2UKLSAgICAgICAgdWludHB0cl90IG1fcGFkZGluZzsKLSNlbmRpZgot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07Ci0KLSAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1
ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgYWxsb2NC
YXNlT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9hbGxv
Y0Jhc2UpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Ci0gICAgfTsKLQog
ICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBX
YWxrZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKKyAgICBwdWJsaWM6CisgICAgICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCiAgICAgcHJvdGVjdGVkOgotICAgICAg
ICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQotICAgICAgICAgICAgLCBtX2luZGV4QmlhcygwKQotICAgICAgICAgICAgLCBtX3N0
b3JhZ2UoMCkKLSAgICAgICAgICAgICwgbV9zcGFyc2VWYWx1ZU1hcCgwKQorICAgICAgICBleHBs
aWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNBcnJheSogdHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwotICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgZmlu
YWxpemUoSlNDZWxsKik7Ci0KICAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAg
ICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlv
biBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKQEAgLTE2OSwyNiArNTcsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
Ci0gICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgSlNPYmplY3Q6OnB1dERpcmVjdCog
bWV0aG9kczoKLSAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3Vs
dGVkCi0gICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KLSAgICAgICAgLy8g
IC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJpbGl0eSBhbmQgcmVhZC1vbmx5IHByb3BlcnRpZXMg
aWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0IGlzIHBhc3NlZCBhcyB0aGUgbW9kZSAodGhl
IGRlZmF1bHQpLgotICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJvcGVydHkgd2l0
aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFibGUgYWxsIHNl
dCB0byB0cnVlLgotICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUg
bW9kZSA9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGNhblNldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBzZXRJ
bmRleChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IG1vZGUpOwotICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gZ2V0QXJyYXlMZW5ndGgoKTsgfQogICAgICAgICAvLyBPSyB0
byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNo
QXJyYXkuCiAgICAgICAgIGJvb2wgc2V0TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBib29s
IHRocm93RXhjZXB0aW9uID0gZmFsc2UpOwogCkBAIC0yMDIsMTQyICs3NSw4NCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8
IG1fdmVjdG9yTGVuZ3RoICYmIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07IH0KLSAgICAgICAgSlNW
YWx1ZSBnZXRJbmRleCh1bnNpZ25lZCBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
Y2FuR2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGNhblNldEluZGV4KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIGkgPCBtX3ZlY3Rvckxlbmd0aDsgfQotICAgICAgICB2b2lkIHNldEluZGV4
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldOwotICAgICAgICAgICAgaWYgKCF4KSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdl
ICpzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICBBcnJheVN0b3Jh
Z2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAg
ICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRl
eCBpbiBzZXF1ZW5jZS4KLSAgICAgICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCk7Ci0gICAgICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIHNl
dCBtX251bVZhbHVlc0luVmVjdG9yIHRvIHRoZSBpbml0aWFsTGVuZ3RoLAotICAgICAgICAgICAg
Ly8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJl
ciBvZiBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4Kys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEFT
U0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGlu
ZSB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVu
eSBwcm9wZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCi0gICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IG1fc3RvcmFnZS0+bV9sZW5ndGgpOwotI2lmIENI
RUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBudW1i
ZXIgb2YgcHJvcHJldGllcyBpbml0aWFsaXplZCBtYXRjaGVzIHRoZSBpbml0aWFsTGVuZ3RoLgot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1f
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGluU3BhcnNlTW9kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgICAgICByZXR1
cm4gbWFwICYmIG1hcC0+c3BhcnNlTW9kZSgpOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBm
aWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2
b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCB1aW50MzJfdCBsZW5n
dGgpOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzdG9y
YWdlT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0FycmF5LCBtX3N0b3JhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCB2ZWN0b3JMZW5ndGhPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKLQotICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeU1vZGUoSlNH
bG9iYWxEYXRhJik7Ci0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZSh1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgpOwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZh
bHVlTWFwOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdl
T3JaZXJvKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFn
ZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gIW1hcCB8fCAhbWFwLT5s
ZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldExlbmd0aFdy
aXRhYmxlKEV4ZWNTdGF0ZSosIGJvb2wgd3JpdGFibGUpOwotICAgICAgICB2b2lkIHB1dERlc2Ny
aXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYs
IFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKLSAgICAgICAgYm9vbCBkZWZpbmVPd25OdW1lcmlj
UHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
dGhyb3dFeGNlcHRpb24pOwotICAgICAgICB2b2lkIGFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFs
RGF0YSYpOwotICAgICAgICB2b2lkIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKIAotICAgICAgICB2
b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSk7Ci0K
LSAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpOwotICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CisgICAgfTsKIAotICAgICAgICBlbnVt
IENvbnNpc3RlbmN5Q2hlY2tUeXBlIHsgTm9ybWFsQ29uc2lzdGVuY3lDaGVjaywgRGVzdHJ1Y3Rv
ckNvbnNpc3RlbmN5Q2hlY2ssIFNvcnRDb25zaXN0ZW5jeUNoZWNrIH07Ci0gICAgICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5
Q2hlY2spOwotCi0gICAgICAgIHVuc2lnbmVkIG1fdmVjdG9yTGVuZ3RoOyAvLyBUaGUgdmFsaWQg
bGVuZ3RoIG9mIG1fdmVjdG9yCi0gICAgICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOyAvLyBUaGUg
bnVtYmVyIG9mIEpTVmFsdWUgc2l6ZWQgYmxvY2tzIGJlZm9yZSBBcnJheVN0b3JhZ2UuCi0gICAg
ICAgIEFycmF5U3RvcmFnZSAqbV9zdG9yYWdlOwotCi0gICAgICAgIC8vIEZJWE1FOiBNYXliZSBT
cGFyc2VBcnJheVZhbHVlTWFwIHNob3VsZCBiZSBwdXQgaW50byBpdHMgb3duIEpTQ2VsbD8KLSAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBpbmxpbmUg
QnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCisgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwg
dHJ1ZSwgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCksIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihCQVNFX1ZFQ1RPUl9MRU4pKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9z
cGFyc2VNYXAuY2xlYXIoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9
IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGJ1dHRlcmZseTsKKyAgICB9CiAK
LSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQotICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0FycmF5LCBtX2luZGV4Qmlhcyk7IH0KLSAgICB9OworICAgIEJ1dHRlcmZseSogY3JlYXRl
QXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAogICAgIGlubGluZSBKU0FycmF5KiBK
U0FycmF5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFw
KSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0
aCk7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
ICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAg
cmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4
KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIGlmICh2ZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIAorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpLCAmdGVtcCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21C
YXNlKHRlbXAsIDAsIDApOworICAgICAgICAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0g
aW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoLCB2ZWN0b3JMZW5ndGgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAg
ICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgor
ICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJh
eShKU1ZhbHVlKTsKQEAgLTM1NiwzMCArMTcxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5s
aW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZv
KCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU1Zh
bHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAK
LS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5k
YW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRo
ZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRo
ZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2Yo
QXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVj
dG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhG
RkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZV
IC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2
ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRy
b2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8v
cHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUK
LSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFi
b3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAg
IHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGlu
IHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0
aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRl
ZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0g
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2Up
IC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVy
biBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZh
bHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJn
cy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4
UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7CiAK
QEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0
aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChi
b3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5n
ZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5h
cmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQo
aSkpOwogCkBAIC0xMTIsOCArMTEyLDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENy
ZWF0aW9uKEV4ZQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUsIGxl
bmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAotICAgIHB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFy
Z3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMp
LCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgcHV0RGlyZWN0QWNjZXNz
b3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyLCBnbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVy
LCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnRE
ZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAogdm9pZCBKU0JvdW5kRnVuY3Rpb246
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwogU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAg
ICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgICAgIFN0
cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS51bnZh
bGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUgc3Rh
dGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUKICAg
ICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQ2UKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5p
c1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3Qt
PnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0yNTUsNyAr
MjU1LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZQogICAgICAg
ICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsK
LSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93
VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nl
c3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQCBib29sIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4
ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
QmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JH
ZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgSlNGdW5j
dGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpz
RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwor
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBKU0Z1
bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
SlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAg
ICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIEpTRnVuY3Rpb246
OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNl
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0zOTYsMTQgKzM5NiwxNCBAQCBib29sIEpTRnVuY3Rp
b246OmRlZmluZU93blByb3BlcnR5KEpTT2JqCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGlmICghQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNz
b3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
PnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0g
fCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
ICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBz
YW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5y
ZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0gZWxz
ZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAg
ICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewog
ICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlz
T2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVy
KGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAg
ICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyks
IERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIHZhbHVlQ2hlY2sgPSAh
ZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCks
IGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlz
T2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2
aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlBhcnNl
ckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmpl
Y3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTIwNCw2ICsyMDUsNyBAQCBKU0dsb2Jh
bERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgcmVnRXhwU3RydWN0dXJlLnNl
dCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTaGFyZWRTeW1ib2xUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0cnVjdHVyZUNo
YWluU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLnNl
dCgqdGhpcywgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFi
bGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJl
ZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1
cmVDaGFpblN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlW
YWx1ZU1hcFN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJU
YWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgR2V0dGVyU2V0dGVyKiBwcm90b0Fj
Y2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHJvdG9BY2Nlc3Nvci0+
c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIDAsICIiLCBnbG9iYWxGdW5jUHJvdG9HZXR0ZXIpKTsKICAgICBwcm90b0FjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhp
cywgMCwgIiIsIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwotICAgIG1fb2JqZWN0UHJvdG90eXBl
LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0p
OworICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8
IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJv
dG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE4LDgg
KzUxOCw4IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICBp
ZiAobV9pc0FycmF5KSB7CiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7Ci0gICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0Lmdl
dCgpKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgdmFsdWUgPSBhc0FycmF5KG1f
b2JqZWN0LmdldCgpKS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAobV9pc0pTQXJyYXkg
JiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisg
ICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
KG1fb2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4ZWMsIGluZGV4
LCBzbG90KSkKQEAgLTY4NCw4ICs2ODQsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2sucmVtb3ZlTGFzdCgp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldEluZGV4KGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgICAgICAgICAgICAgIGlmIChh
cnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChhcnJheSwgbV9l
eGVjLCBpbmRleCwgc2xvdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRhdGVQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxUaGlzLmgiCkBAIC0zOCwxMiArNDAsMTkgQEAKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0
aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcworLy8gYXMgYSBz
aW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBm
cm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJT
VF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNp
emUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5
ICs5NSw4MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAg
fQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFn
ZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBz
dG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFn
ZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7
CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNp
emVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2Ug
LSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5P
dGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFn
ZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0
eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsg
MTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsK
KyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4
aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChVTkxJS0VMWSho
YXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBy
ZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwor
ICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUo
CisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAg
IAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6
ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291
cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJy
ZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6
VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3Rv
cmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAg
aWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgKm5ld0J1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFw
cHJvcHJpYXRlLgorICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7
CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChj
dXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV9zcGFyc2VNYXApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3Jh
Z2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJh
eSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CkBAIC0xMjIsOSArMTgyLDkgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5l
U3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdE91
dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkK
KyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmpl
Y3QoKSk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b247CkBAIC0xNDIsOSArMjAyLDkgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKIAotICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZM
aW5lU3RvcmFnZSgpOwotICAgIGlmIChzdG9yYWdlKQotICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dE91dE9mTGluZVN0b3JhZ2UodmlzaXRvciwgc3RvcmFnZSwgdGhpc09iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgaWYgKGJ1dHRlcmZseSkK
KyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3Qo
KSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKQEAgLTE2MSwxMCAr
MjIxLDUwIEBAIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWMKICAgICBy
ZXR1cm4gaW5mby0+Y2xhc3NOYW1lOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICAvLyBOQi4gVGhlIGZhY3QgdGhhdCB3ZSdyZSBk
aXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2UgaW1wbGllcyB0aGF0IGl0IGlz
IG5vdAorICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlT
bG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKKyAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KCkuCisgICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJv
cGVydHlOYW1lKSwgc2xvdCk7CisgICAgCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisg
ICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7Cisg
ICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49
IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAg
aWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkp
IHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5m
aW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEVDTUEg
OC42LjIuMgpAQCAtMTc0LDYgKzI3NCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwog
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAK
KyAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7
CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgog
ICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMjM1LDkgKzM0MiwxNDYgQEAgdm9pZCBKU09iamVj
dDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3Qoc2hvdWxkVGhyb3cpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNs
b3QpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgIAor
ICAgIGlmIChVTkxJS0VMWShwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltwcm9wZXJ0eU5hbWVdOworICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFVw
ZGF0ZSBsZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAg
aWYgKHByb3BlcnR5TmFtZSA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb3Bl
cnR5TmFtZSArIDE7CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNl
IGlmICghdmFsdWVTbG90KQorICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yOworICAgICAgICAKKyAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXNPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB0aGlz
T2JqZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKKyAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisKKyAgICBpZiAoIW1hcCkKKyAg
ICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKworICAgIGlm
IChtYXAtPnNwYXJzZU1vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisKKyAgICBtYXAt
PnNldFNwYXJzZU1vZGUoKTsKKworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6
Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBU
aGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8g
Y2hlY2sgd2UgY2FuIHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVs
dCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAg
ICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdl
LT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIDAsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAg
IENSQVNIKCk7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOworICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgbWFw
KTsKKyAgICAKKyAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKK30KKwor
dm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsIG9sZFR5cGUgPT0g
Tm9uQXJyYXkgfHwgb2xkVHlwZSA9PSBBcnJheSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisg
ICAgICAgIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5l
d0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgQVNTRVJUKCFyZXN1bHQtPmxlbmd0
aCgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+dmVjdG9yTGVuZ3RoKCkpOworICAgIHJlc3VsdC0+
c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVu
Z3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgcmVzdWx0LT5tX251
bVZhbHVlc0luVmVjdG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJl
c3VsdC0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSwgQWxsb2NhdGVBcnJheVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBu
ZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxE
YXRhLCAwLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAg
IGNhc2UgTm9uQXJyYXk6IHsKKyAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEs
IDAsIDApOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAg
ICAgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0yNjksMTAgKzUxMywxOCBAQCBib29sIEpTT2Jq
ZWN0OjphbGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+YWxsb3dzQWNjZXNzRnJvbShnbG9iYWxPYmplY3Qs
IGV4ZWMpOwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVy
KCkgJiYgKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogCisgICAgdW5zaWduZWQgaW5kZXggPSBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpIHsKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIHZhbHVlLCBh
dHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOworCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZURlZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogCkBAIC0zMDQs
NiArNTU2LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXgKIGJv
b2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3Bl
cnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
KQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5z
dGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGlj
RnVuY3Rpb25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1ODgsNDUgQEAgYm9vbCBKU09i
amVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9j
YXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJv
b2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQog
ewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0g
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAg
CisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAg
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7
CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+Zmlu
ZChpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVj
dC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3
NTYsNTEgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lk
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBw
ZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGlu
ZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIK
KyAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5l
ZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBt
ZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3
aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5v
bkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0
b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBrZXlzOworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAg
ICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdp
bigpLCBrZXlzLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBr
ZXlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywg
b2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5
TmFtZXNGcm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CkBAIC01MTUsOCArODUxLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFs
RGF0YSYgZ2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNB
cnJheSh0aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgp
KQogICAgICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0
ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3Mywx
MSArOTA4LDExIEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0
ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBsb2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJv
cGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewot
ICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlv
bi0+Z2V0KCkpLT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24g
PSBhc0dldHRlclNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAg
ICAgICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xv
dC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JM
b2NhdGlvbihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJT
bG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAt
NjAzLDI2ICs5MzgsNTI3IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklE
KEoKICAgICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVj
dDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlw
dG9yKQogewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0
b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkp
CisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBk
ZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNj
ZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0
cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2Ny
aXB0b3IpICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09iamVjdCogZ2V0
dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQorICAgICAg
ICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZ2V0
dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgSlNPYmplY3QqIHNl
dHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKKyAgICAg
ICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVsc2Ug
aWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHNl
dHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7CisKKyAgICAgICAgR2V0dGVyU2V0
dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOworICAgICAgICBpZiAo
Z2V0dGVyKQorICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIGdldHRlcik7CisgICAgICAgIGlmIChzZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKKworICAgICAgICBlbnRyeUlu
TWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7CisgICAgICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFkT25seTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7CisgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpOworfQorCisvLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQorYm9v
bCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7CisKKyAgICBpZiAo
IWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKKyAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBw
dXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3VsYXIgYXJyYXkKKyAgICAgICAgLy8g
RklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRl
cyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0byBmYWxzZQorICAgICAgICAvLyBo
b3dldmVyIGlmIHRoZSBwcm9wZXJ0eSBjdXJyZW50bHkgZXhpc3RzIG1pc3NpbmcgYXR0cmlidXRl
cyB3aWxsIG92ZXJyaWRlIGZyb20gdGhlaXIgY3VycmVudCAndHJ1ZScKKyAgICAgICAgLy8gc3Rh
dGUgKGkuZS4gZGVmaW5lT3duUHJvcGVydHkgY291bGQgYmUgdXNlZCB0byBzZXQgYSB2YWx1ZSB3
aXRob3V0IG5lZWRpbmcgdG8gZW50ZXJpbmcgJ1NwYXJzZU1vZGUnKS4KKyAgICAgICAgaWYgKCFk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFkZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLnZhbHVlKCksIDAsIHRocm93RXhjZXB0aW9uID8g
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cp
OworICAgICAgICB9CisKKyAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgfQorCisgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcC5nZXQoKTsKKyAgICBBU1NFUlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJy
ZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3Bh
cnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVm
aW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYg
Y3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Cisg
ICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHBy
b3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkK
KyAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFi
bGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVl
cworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5l
d2x5CisgICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZh
bHVlLgorICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9w
ZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVk
IFAgb2YKKyAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVt
ZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3Jp
YmVkIGJ5CisgICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmll
bGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQg
cHJvcGVydHkKKyAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgorICAgICAg
ICAvLyA0LmMuIFJldHVybiB0cnVlLgorCisgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZh
dWx0czsKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBE
b250RW51bSB8IFJlYWRPbmx5OworICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwor
CisgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0
b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldExlbmd0aChpbmRleCArIDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyA1LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQu
CisgICAgLy8gNi4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1
cnMgaW4gY3VycmVudCBhbmQgdGhlIHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhl
IHNhbWUgdmFsdWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNv
bXBhcmVkIHVzaW5nIHRoZSBTYW1lVmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgY3VycmVudDsKKyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7CisgICAg
aWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJy
ZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQu
Y29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZp
Z3VyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgLy8gNy5iLiBSZWplY3QsIGlmIHRoZSBbW0VudW1lcmFibGVdXSBmaWVs
ZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIHRoZSBbW0VudW1lcmFibGVdXSBmaWVsZHMgb2YgY3Vy
cmVudCBhbmQgRGVzYyBhcmUgdGhlIEJvb2xlYW4gbmVnYXRpb24gb2YgZWFjaCBvdGhlci4KKyAg
ICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZVByZXNlbnQoKSAmJiBjdXJyZW50LmVudW1l
cmFibGUoKSAhPSBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJh
YmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICB9CisKKyAg
ICAvLyA4LiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gbm8gZnVy
dGhlciB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghZGVzY3JpcHRvci5pc0dlbmVy
aWNEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgLy8gOS4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRv
cihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBoYXZlIGRpZmZlcmVudCByZXN1
bHRzLCB0aGVuCisgICAgICAgIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAhPSBkZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gOS5hLiBSZWplY3Qs
IGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UuCisgICAg
ICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFj
Y2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgLy8gOS5iLiBJZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGlzIHRydWUsIHRoZW4g
Y29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGEKKyAgICAgICAg
ICAgIC8vIGRhdGEgcHJvcGVydHkgdG8gYW4gYWNjZXNzb3IgcHJvcGVydHkuIFByZXNlcnZlIHRo
ZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzCisgICAgICAgICAg
ICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBz
ZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0bworICAgICAgICAgICAg
Ly8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZl
cnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9w
ZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhp
c3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncyBbW0NvbmZpZ3VyYWJsZV1d
IGFuZCBbW0VudW1lcmFibGVdXQorICAgICAgICAgICAgLy8gYXR0cmlidXRlcyBhbmQgc2V0IHRo
ZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVz
Y3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBp
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFy
ZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgIGlmICgh
Y3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRy
dWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlp
LjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5k
IFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgor
ICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVj
LCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3Vy
cmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYm
IGN1cnJlbnQuZ2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKKyAg
ICAgICAgICAgIC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQg
SXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAg
aWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMTEuaS4g
UmVqZWN0LCBpZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVW
YWx1ZShEZXNjLltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAg
ICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVy
KCkgIT0gY3VycmVudC5zZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIg
b2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTEu
aWkuIFJlamVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBT
YW1lVmFsdWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdl
dHRlcigpICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0
dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBE
ZXNjIHRoYXQgaXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmli
dXRlIG9mIHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0
aGUgZmllbGQuCisgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVz
Y3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAgIHJldHVybiB0
cnVlOworfQorCitTcGFyc2VBcnJheVZhbHVlTWFwKiBKU09iamVjdDo6YWxsb2NhdGVTcGFyc2VJ
bmRleE1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogcmVzdWx0ID0gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKGdsb2JhbERhdGEpOwor
ICAgIGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhh
dCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQotICAgIC8vIHdl
IG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgordm9pZCBKU09iamVjdDo6
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBpZiAoQXJyYXlTdG9yYWdlKiBhcnJh
eVN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlLT5t
X3NwYXJzZU1hcC5jbGVhcigpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkK
K3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisK
KyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBv
ZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsK
KyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAg
Ci0gICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3Rv
cmFnZS5nZXQoKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsK
KyAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZl
IGEgc3BhcnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRo
ZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9u
YXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4
dGVuc2libGUoKSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nh
cnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNl
bnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0
aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGks
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChn
bG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBt
X3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUg
dG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3Ig
Y2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3Bh
cnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFrZSBHQ0MncyB0aGlyc3Qg
Zm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlwZS1wdW5uZWQgcG9pbnRl
cnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsKLSAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQotICAgICAgICBDUkFTSCgpOwotICAgIG5ld1Byb3Bl
cnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBuZXdTaXpl
ICsgMTsKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAg
ICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRh
YmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsK
KyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2Ug
YXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0
byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2Ug
bWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBv
ciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+
c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVz
SW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVu
Z3RoKSkgeworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91
bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJlYWQgbV9zdG9y
YWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMg
ZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxE
YXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8g
dGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3Rv
cltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwor
fQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAg
ICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0
aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKSB7CisgICAgICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB7CisgICAg
ICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAw
LCAwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkg
KyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3csIGFycmF5U3RvcmFnZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1v
ZGUsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNT
RVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CisgICAgQVNT
RVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBj
YXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYg
KExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2li
bGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0
aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwogICAgIAotICAg
IG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9s
ZFNpemUpOworICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAg
ICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBz
dGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4K
KyAgICAgICAgaWYgKExJS0VMWSgKKyAgICAgICAgICAgICAgICAhYXR0cmlidXRlcworICAgICAg
ICAgICAgICAgICYmIChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IpKQorICAgICAgICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGds
b2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1f
c3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0
byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8s
IG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBh
IHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBtYXAtPnB1dERp
cmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgfQorCisg
ICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgaWYg
KG1vZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KSB7CisgICAgICAgICAgICAvLyBQ
cm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAg
ICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0g
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisgICAgICAg
IGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAg
ICB9CiAKLSAgICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJv
cGVydHlTdG9yYWdlOworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVj
ayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBj
b250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0
b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNp
Z25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1h
cC0+c2l6ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1dGVzIHx8ICFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0
dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
KTsKKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgs
IHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsK
KworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBh
bmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBz
dG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVj
dG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3Bh
cnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0
b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0
SW5kZXhNb2RlIG1vZGUpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAg
aWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQorICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgaWYg
KCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNy
ZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIAorICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSAr
IDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0FMV0FZU19J
TkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJy
ZW50VmVjdG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVk
TGVuZ3RoKQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVk
IG1heEluaXRMZW5ndGggPSBzdGQ6Om1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAg
IGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVu
Z3RoID0gbWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkK
KyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFy
cmF5U2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxl
bnQgdG86CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAx
KSAvIDI7CisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1
bnNpZ25lZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMg
bm90IHByb25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGgg
PSBkZXNpcmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAm
IDEpOworICAgIH0KKworICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0
aCk7CisKKyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJT
VF9WRUNUT1JfR1JPVyk7CisKKyAgICByZXR1cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBK
U09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAg
bGVuZ3RoID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
ICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICByZXR1cm4gZ2V0TmV3VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCwgbGVuZ3Ro
LCBkZXNpcmVkTGVuZ3RoKTsKK30KKworYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5n
dGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25z
aXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNw
YXJzZSB2YWx1ZSBtYXAKKyAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNj
b3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5Lgor
ICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKworICAgIHVuc2lnbmVkIGluZGV4QmlhcyA9IHN0b3JhZ2UtPm1faW5kZXhCaWFzOworICAg
IHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIEFT
U0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOworICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxl
bmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOworCisgICAgLy8gRmFzdCBjYXNl
IC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxvYyBtYWtl
cyBzZW5zZS4KKyAgICBpZiAoTElLRUxZKCFpbmRleEJpYXMpKSB7CisgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmdyb3dBcnJheVJpZ2h0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
dHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVy
Zmx5OworICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIC8vIFJlbW92ZSBzb21lLCBidXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21p
YyBkZWNheSwgJiBjYXBwZWQgdG8gbm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KKyAgICB1bnNp
Z25lZCBuZXdJbmRleEJpYXMgPSBzdGQ6Om1pbihpbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+cmVzaXplQXJyYXkoCisgICAgICAgIGdsb2Jh
bERhdGEsCisgICAgICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwKKyAgICAgICAgbmV3SW5kZXhCaWFz
LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgaWYg
KCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCit2b2lkIEpTT2JqZWN0OjpjaGVja0lu
ZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlwZSkKK3sKKyAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICBpZiAoIXN0b3Jh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbik7CisKKyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0g
U29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VN
YXApOworCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAg
IGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5
cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUu
aXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxs
b2NhdGVkLgorICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAg
ICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAg
ICAgICB9CisgICAgfQorICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3Rv
cmFnZS0+bGVuZ3RoKCkpOworCisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1h
cC0+ZW5kKCk7CisgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJU
KGluZGV4IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBN
QVhfQVJSQVlfSU5ERVgpOworICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAg
ICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlr
ZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9Cisg
ICAgfQorfQorI2VuZGlmIC8vIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSog
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4g
b2xkU2l6ZSk7CisKKyAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90
IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkKKyAgICAvLyBjYXBhY2l0eSwg
c2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFj
ZS4KKyAgICAKKyAgICByZXR1cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCkBAIC02MzAsMTAgKzE0NjYsNDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2Vs
bCogY2VsbCA9IDA7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBj
ZWxsKTsKLSAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0
LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTsKKyAgICBpZiAoaSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RP
ZmZzZXQob2Zmc2V0KSwgYXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
c3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
Tm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+
bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHZhbHVlLmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFwLT5u
b3RGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGl0
LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKQEAgLTY1OCw3ICsxNTMwLDcgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICAgICAg
ICAgIGlmIChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKICAgICAgICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0
ZXJPYmplY3QoKSk7Ci0gICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vz
c29yKTsKKyAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgbmV3VmFsdWUgPSBqc1VuZGVm
aW5lZCgpOwpAQCAtNjgzLDEwICsxNTU1LDE5IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3Io
RXhlY1N0YXRlKiBleGUKICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQo
KSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERl
c2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwogCi0gICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMg
fCBBY2Nlc3Nvcik7CisgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVl
OwogfQogCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICB1bnNp
Z25lZCBhc0luZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoYXNJbmRleCA9
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgcHV0RGly
ZWN0SW5kZXgoZXhlYywgYXNJbmRleCwgdmFsdWUpOworfQorCiBjbGFzcyBEZWZpbmVPd25Qcm9w
ZXJ0eVNjb3BlIHsKIHB1YmxpYzoKICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlKEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTcwNCwyNiArMTU4NSwyNiBAQCBwcml2YXRlOgogICAgIEpTR2xvYmFsRGF0
YSYgbV9nbG9iYWxEYXRhOwogfTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24p
Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxk
YXRhIHRoYXQgd2UncmUgaW4gZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJlbnRseSBEZWZp
bmVPd25Qcm9wZXJ0eSB1c2VzIGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3aGVuIHRoZXkg
YXJlIGJlaW5nIHJlcGxhY2VkCiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNoYW5naW5nIGF0
dHJpYnV0ZXMpLCBob3dldmVyIGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmlndXJhYmxlIChp
LmUuCiAgICAgLy8gRG9udERlbGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93
LCB3ZSBjYW4gdXNlIHRoaXMgZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBEZWZpbmVPd25Q
cm9wZXJ0eVNjb3BlIHNjb3BlKGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5l
dyBwcm9wZXJ0eSB3ZSBjYW4ganVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgY3VycmVudDsKLSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkg
eworICAgIGlmICghbWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5sZXNzIGV4dGVu
c2lvbnMgYXJlIHByZXZlbnRlZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0ZW5zaWJsZSgp
KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAgIGlmICh0aHJv
d0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQg
aXMgbm90IGV4dGVuc2libGUuIikpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgICAgICBv
bGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gcHV0
RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3Jp
cHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4gcHV0RGVz
Y3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVzY3JpcHRv
ci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTYzMCw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBzaW1wbHkg
Y2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAgICBpZiAo
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50
LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3Vy
cmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREZXNj
cmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5h
dHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjQzLDggQEAgYm9vbCBK
U09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBh
Y2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwg
Y3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRo
aXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJp
ZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5n
IHRoZSB2YWx1ZSBhbmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQpAQCAtNzg0
LDggKzE2NjUsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3Ip
ICYmICFkZXNjcmlwdG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXRE
ZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0K
IAogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhpc3Rpbmcg
YWNjZXNzb3IgcHJvcGVydHkKQEAgLTgwMiw3ICsxNjgzLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfQotICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdl
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFhY2Nl
c3NvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjkzLDM3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgZ2V0dGVyU2V0
dGVyLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVj
dCgpKTsKICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWduZWQgYXR0cnMg
PSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KTsKLSAgICBv
YmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7
CisgICAgLy8gSWYgaXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJv
cGVydHkgc3RvcmFnZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAg
ICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVs
dCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFz
c2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAgICAvLyBkLiBSZWpl
Y3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRM
ZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAx
LgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHld
XSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5E
ZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJu
IHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0
LT5kZWZpbmVPd25JbmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93
RXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9u
SW5kZXhQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0
aW9uKTsKK30KKworYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVybiBmYWxzZTsKK30K
KwogSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBtZXNzYWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMiBAQAogI2RlZmlu
ZSBKU09iamVjdF9oCiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQXJyYXlDb252
ZW50aW9ucy5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZs
eS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlTbG90LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVk
ZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAK
LSNpbmNsdWRlICJTdG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAi
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC03OSw2ICs4NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQWNjZXNzb3IgICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVy
CiAgICAgfTsKIAorICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdEludGVybmFsQXR0cmli
dXRlLCBOb25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVf
QVNTRVJUKFJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udEVudW0g
PCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFs
QXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSwgRG9udERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KyAgICBDT01QSUxFX0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1
bmN0aW9uX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNT
RVJUKEFjY2Vzc29yIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3df
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAg
ICAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2LDcgKzEwOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwotCisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTEyMCwx
OCArMTMyLDE5NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vz
c0Zyb20oRXhlY1N0YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pmxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5
OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWls
YXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlw
ZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90
IGNhbGxlZC4KKyAgICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJpbGl0eSBhbmQg
cmVhZC1vbmx5IHByb3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0IGlzIHBh
c3NlZCBhcyB0aGUgbW9kZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBj
cmVhdGVzIGEgcHJvcGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFu
ZCBjb25maWd1cmFibGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdElu
ZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVpY2tseShwcm9w
ZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9k
ZSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBBIG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBhbmQgcHV0RGlyZWN0SW5kZXgu
CisgICAgICAgIHZvaWQgcHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7
CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5k
ZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJl
IGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAg
ICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3Ig
dG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90
IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGll
cyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdG9y
YWdlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3Ro
ID09IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRp
YWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
KTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZl
c2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBl
IGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKICAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3Qg
Y2FsbGVkLgogICAgICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChhZnRl
ciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1
dGVzKQorICAgICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBi
ZSBhbiBpbmRleC4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0RGly
ZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0
YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAg
ICAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZv
aWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBib29sIHByb3BlcnR5SXNFbnVtZXJhYmxl
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKQEAg
LTE0Nyw2ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKQEAgLTIwMyw4ICszOTQsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxp
bmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAg
ICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQyMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFn
ZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24g
KyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
b3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBA
IC0yNjUsMjEgKzQ1OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1NlYWxl
ZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxl
ZChnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAg
ICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5z
aWJsZSgpOyB9CisgICAgICAgIGJvb2wgaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhaXNFeHRlbnNpYmxlKCkKKyAgICAgICAgICAgICAgICB8
fCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7CisgICAgICAgIH0KIAogICAgICAgICBib29s
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JE
ZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9w
ZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRC
dXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CisgICAgICAg
IHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAv
LyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAgIAogICAgICAg
ICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lk
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFn
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwot
ICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0
ODgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUyMCw3
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3Rz
IHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3Jl
YXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93
LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
SlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAg
ICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGds
b2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdl
LCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RW
aXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBp
dCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndp
c2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhhc0FycmF5U3Rv
cmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8g
cHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgLy8g
b2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBz
dG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBh
Y3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IHRv
IGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0
CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAgICAgIGVudW0g
Q29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29u
c2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisg
ICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZv
aWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9u
KTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChK
U0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzYwNCwzMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAg
ICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSop
OworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXRE
aXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5s
aW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhh
c2hFbnRyeSogZmluZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRh
Jik7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3Rv
cmFnZSopOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9y
TGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsK
KyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5n
dGgpOwogCi0gICAgICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICAgICAgCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX3BhZGRpbmc7CiAjZW5k
aWYKICAgICB9OwpAQCAtMzcyLDggKzY1Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAg
IDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICBleHBsaWNpdCBKU05v
bkZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgICAgIDogSlNPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBA
IC00NTYsMTEgKzc0MCw2IEBAIGlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3QKICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3QsIG1faW5saW5lU3Rv
cmFnZSk7CiB9CiAKLWlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpCi17Ci0gICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9vdXRPZkxp
bmVTdG9yYWdlKTsKLX0KLQogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsT2JqZWN0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEds
b2JhbE9iamVjdFR5cGU7CkBAIC00OTEsMTggKzc3MCwxNyBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6aXNHbG9iYWxUaGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygp
LnR5cGUoKSA9PSBHbG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNl
dE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eVN0b3Jh
Z2Ugc3RvcmFnZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6
c2V0QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAg
IGlmICghc3RvcmFnZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0K
KyAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAmJiAhaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKTsKICAg
ICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0
b3JhZ2Uuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0g
YnV0dGVyZmx5OworfQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIG1fYnV0dGVy
Zmx5ID0gYnV0dGVyZmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDAsOSArODE4
LDkgQEAgaW5saW5lIEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVy
biBhc09iamVjdCh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmpl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGlu
ZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMs
IDApCisgICAgLCBtX2J1dHRlcmZseShidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5MCwxNSArODY4
LDE3IEBAIGlubGluZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUKIAogQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
Ci0gICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0
TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGlm
IChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uLT5p
c0dldHRlclNldHRlcigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90
LCBsb2NhdGlvbik7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdl
dChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKExJS0VMWShpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3RP
ZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAgICAgIGZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9u
KGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKIH0KIAogLy8gSXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBs
YXJnZSwgZXNwZWNpYWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODQsNiArOTY0LDcgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1
ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAm
IEFjY2Vzc29yKSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFw
KHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFz
SW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRl
czsKQEAgLTcxMiwxMSArOTkzLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbCgKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2li
bGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eVN0b3Jh
Z2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRX
aWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgp
KTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRPdXRP
ZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwog
CiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKQEAgLTczMCwxMyArMTAxMSwxMyBAQCBpbmxp
bmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJl
KCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkg
ewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2Uo
KTsgCisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAg
ICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERh
dGEsIGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEs
IGN1cnJlbnRDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIAogICAg
ICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRlcmZseShnbG9i
YWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERpcmVjdE9mZnNl
dChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBw
cm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50
bHkgY2FjaGFibGUsCiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFi
bGUgc3RhdGUuCkBAIC04MDMsOSArMTA4NCw5IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmVBbmRSZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0
eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIGdsb2JhbERh
dGEsIG9sZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAg
IHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJl
KTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1
cmUpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlKQpAQCAtODM5LDExICsxMTIwLDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0
OjpwdXREaXJlY3QoSlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNT
RVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7Cisg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdTdG9yYWdl
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2Fw
YWNpdHkoKSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGds
b2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+
c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGds
b2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKTsKLSAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0
cnVjdHVyZSgpKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBz
dHJ1Y3R1cmUoKSk7CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFs
dWUpOwogfQogCkBAIC05MzUsNiArMTIxNiwxMSBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJl
Z2lzdGVyOjp3aXRoQ2FsCiAgICAgcmV0dXJuIHI7CiB9CiAKK2lubGluZSBzaXplX3Qgb2Zmc2V0
SW5CdXR0ZXJmbHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBvZmZzZXRJ
bk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3Rv
cmFnZSgpOworfQorCiAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBwYXRjaGluZyBjb2RlIHdoZXJl
IHlvdSB3YW50IHRvIGVtaXQgYSBsb2FkIG9yIHN0b3JlIGFuZAogLy8gdGhlIGJhc2UgaXM6CiAv
LyBGb3IgaW5saW5lIG9mZnNldHM6IGEgcG9pbnRlciB0byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFn
ZSBwb2ludGVyLgpAQCAtOTQyLDE0ICsxMjI4LDE0IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIg
UmVnaXN0ZXI6OndpdGhDYWwKIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRT
dG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
ICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQp
OworICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVy
Zmx5KG9mZnNldCk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSAtIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KIAogaW5saW5lIGludCBpbmRleFJl
bGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxp
bmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFn
ZShvZmZzZXQpOworICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBBU1NFUlQoIShK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KQEAg
LTk1Nyw3ICsxMjQzLDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5
TwogaW5saW5lIGludCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBv
ZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldElu
SW5saW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw2ICs2Nyw5IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQK
ICAgICBpZiAoby0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcygpKQogICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICAKKyAg
ICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIoby0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgCiAgICAgc2l6ZV90
IGNvdW50ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgbyk7CiAgICAgU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluID0gby0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluKGV4
ZWMpOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVD
aGFpbi0+aGVhZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRl
UHJvcGVydHkKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQg
SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3lt
Ym9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmVuZCgpOwpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93
blByb3BlcnR5CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMs
IGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KICAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBK
U09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NF
UlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZUluZm8uaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1wbGVtZW50c0RlZmF1bHRIYXNJ
bnN0YW5jZSA9IDEgPDwgMzsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSXNFbnZpcm9ubWVu
dFJlY29yZCA9IDEgPDwgNDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90ID0gMSA8PCA1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuID0gMSA8PCA2OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0gMSA8PCA3OwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gPSAxIDw8IDY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgOTsKIAogICAgIGNsYXNzIFR5cGVJbmZv
IHsKICAgICBwdWJsaWM6CkBAIC03NSw4ICs3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIG92ZXJyaWRlc0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdz
MShPdmVycmlkZXNIYXNJbnN0YW5jZSk7IH0KICAgICAgICAgYm9vbCBpbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90KTsgfQorICAgICAgICBib29sIGludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3Mx
KEludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8pOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbik7IH0KLSAgICAgICAgYm9v
bCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdz
MShPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKTsgfQorICAgICAgICBib29sIG92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMpOyB9CiAgICAgICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMihQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcp
OyB9CiAKICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBmbGFnc09mZnNldCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJMaXRlcmFsUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIu
aCIKQEAgLTY0MCw3ICs2NDIsMTMgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6
cGFyc2UoUAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0RW5k
RXhwcmVzc2lvbjoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc09iamVjdChvYmpl
Y3RTdGFjay5sYXN0KCkpLT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZp
ZXJTdGFjay5sYXN0KCksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9i
amVjdCA9IGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgUHJv
cGVydHlOYW1lIGlkZW50ID0gaWRlbnRpZmllclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpID0gaWRlbnQuYXNJbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5w
dXREaXJlY3RJbmRleChtX2V4ZWMsIGksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERh
dGEoKSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNr
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4o
KS50eXBlID09IFRva0NvbW1hKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmpl
Y3RTdGFydEV4cHJlc3Npb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9y
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNiBA
QCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE9iamVjdFByb3RvdHlwCiAKIE9iamVjdFByb3Rv
dHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHVjdHVy
ZSkKICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHVjdHVyZSkK
LSAgICAsIG1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzKHRydWUpCiB7CiB9CiAKQEAg
LTc3LDM0ICs3Niw2IEBAIHZvaWQgT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0cK
ICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogfQogCi12b2lkIE9iamVjdFByb3RvdHlw
ZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgT2Jq
ZWN0UHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwp
OwotICAgIEJhc2U6OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
LQotICAgIGlmICh0aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyAm
JiBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAg
ICAgICAgdGhpc09iamVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgPSBmYWxz
ZTsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5cGU6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQotewotICAgIE9i
amVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihvYmpl
Y3QpOwotICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyAmJiBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgdGhpc09i
amVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgPSBmYWxzZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgT2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBPYmplY3RQcm90b3R5cGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmpl
Y3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQogYm9vbCBPYmplY3RQcm90b3R5cGU6
OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQogewogICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpv
YmplY3RQcm90b3R5cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwp
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCwxNCArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKLQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotCi0gICAgICAgIGJvb2wgbV9o
YXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXM7CiAgICAgfTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcoRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsx
MTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAg
dmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qg
b2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFn
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRl
eE1vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFB1dERpcmVjdEluZGV4
TW9kZV9oCisjZGVmaW5lIFB1dERpcmVjdEluZGV4TW9kZV9oCisKK25hbWVzcGFjZSBKU0Mgewor
CitlbnVtIFB1dERpcmVjdEluZGV4TW9kZSB7IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCwg
UHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdywgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyB9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dERpcmVjdEluZGV4TW9kZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTUgKzI2LDM3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hl
c0FycmF5LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKwogbmFtZXNwYWNlIEpTQyB7
CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoUmVnRXhwTWF0Y2hlc0FycmF5KTsKIAogY29u
c3QgQ2xhc3NJbmZvIFJlZ0V4cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU0Fy
cmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5
KX07CiAKK1JlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJl
c3VsdCkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRj
aGVzQXJyYXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQor
ICAgICwgbV9zdGF0ZShSZWlmaWVkTm9uZSkKK3sKKyAgICBtX2lucHV0LnNldChnbG9iYWxEYXRh
LCB0aGlzLCBpbnB1dCk7CisgICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4
cCk7Cit9CisKK1JlZ0V4cE1hdGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJl
c3VsdCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJu
cygpICsgMSk7CisgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhw
TWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHZvaWQgUmVnRXhwTWF0Y2hl
c0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKIH0KIAogdm9p
ZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMjggKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0
Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0
IHJlc3VsdCkKLSAgICAgICAgICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qt
PnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgLCBtX3Jlc3VsdChy
ZXN1bHQpCi0gICAgICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsKLSAgICAgICAg
ICAgIG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOwotICAgICAgICB9Cisg
ICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0ds
b2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAg
IGVudW0gUmVpZmllZFN0YXRlIHsgUmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFs
bCB9OwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAg
ICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhw
TWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1h
dGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERh
dGEsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsK
LSAgICAgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hl
c0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3Vs
dCk7CiAKICAgICAgICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwogICAgICAg
ICBKU1N0cmluZyogcmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopOwpAQCAtNTgsNyArNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0
aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xMTMs
MTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAg
QmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBSZWplY3RfaAorI2RlZmluZSBSZWplY3RfaAorCisjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGlu
ZSBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgaWYgKHRocm93RXhjZXB0aW9uKQorICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVqZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCisjaW5jbHVkZSAiQ2xhc3NJbmZv
LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBTcGFyc2VBcnJheVZhbHVlTWFwOjpzX2lu
Zm8gPSB7ICJTcGFyc2VBcnJheVZhbHVlTWFwIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShTcGFyc2VBcnJheVZhbHVlTWFwKSB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFy
c2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNs
dWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvcGVy
dHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCisjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVu
dHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0
ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7
CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVy
dHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlW
YWx1ZU1hcCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNl
QXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAg
ICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0aElz
UmVhZE9ubHkgPSAyLAorICAgIH07CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSk7CisgICAgflNwYXJzZUFycmF5VmFsdWVNYXAoKTsKKyAgICAKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKKworcHVibGljOgorICAgIHN0YXRpYyBKU19F
WFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgdHlwZWRlZiBNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAg
IHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAg
dm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2Fz
dDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3Ro
SXNSZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVh
ZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7Cisg
ICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVh
ZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0RW50cnkoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJl
Y3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0
KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9t
YXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZh
bGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVy
YXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQg
aSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11
dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQg
aXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxh
Z3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhv
ZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKKyNpbmNs
dWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
KyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VB
cnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zcGFyc2VBcnJheVZhbHVlTWFw
U3RydWN0dXJlLmdldCgpKQorICAgICwgbV9mbGFncyhOb3JtYWwpCisgICAgLCBtX3JlcG9ydGVk
Q2FwYWNpdHkoMCkKK3sKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6On5TcGFyc2VB
cnJheVZhbHVlTWFwKCkKK3sKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworfQorCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihnbG9iYWxEYXRhLmhlYXApKSBTcGFyc2VBcnJh
eVZhbHVlTWFwKGdsb2JhbERhdGEpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8U3BhcnNl
QXJyYXlWYWx1ZU1hcCo+KGNlbGwpLT5TcGFyc2VBcnJheVZhbHVlTWFwOjp+U3BhcnNlQXJyYXlW
YWx1ZU1hcCgpOworfQorCitpbmxpbmUgU3RydWN0dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENv
bXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworaW5saW5lIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNPYmpl
Y3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Cisg
ICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKworICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAgIHNpemVfdCBjYXBhY2l0
eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBh
Y2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0
eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBh
IHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBt
YXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3Bl
cnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90
IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAg
cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIShlbnRyeS5hdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVh
ZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZW50cnkuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5TcGFyc2VBcnJheUVudHJ5OjpCYXNlOjpn
ZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmpl
Y3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisg
ICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShz
ZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFy
Z3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxE
YXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6
OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1v
ZGUpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNl
QXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRv
IHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBz
cGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5l
dyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlz
IGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgor
ICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiByZXN1bHQuaXNO
ZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1
bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGly
ZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9i
amVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJp
YnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFy
cmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFy
cmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZ
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dl
dHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90
LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxp
bmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAg
ICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRl
cigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBh
c0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0
dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VS
VCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc01h
cCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4odGhpc09iamVjdCk7CisgICAgaXRlcmF0
b3IgZW5kID0gdGhpc01hcC0+bV9tYXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9IHRo
aXNNYXAtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5h
cHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VC
YXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxE
YXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10
eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVk
ZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7
Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRh
ZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAg
ICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBT
dG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAg
IHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdl
KQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAg
ICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0
b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgeyBy
ZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0
b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQ
cm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJv
cGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotCi0gICAgYm9vbCBvcGVy
YXRvciEoKSB7IHJldHVybiAhbV9zdG9yYWdlOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFByb3Bl
cnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6cHV0KEpT
Q2VsbCogY2VsbCwgRXhlCiAgICAgSlNPYmplY3Q6OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBTdHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmlu
dGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZFRocm93KTsKK30KKwogYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQog
ewogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihv
YmplY3QpOwpAQCAtMTMzLDYgKzE0NCwxNCBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29sIFN0cmluZ09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
KQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3Qq
PihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRl
eChpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOworfQorCiB2b2lkIFN0cmluZ09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyB2b2lk
IHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwogCkBAIC02Niw3ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xv
YmFsRGF0YSYsIEpTU3RyaW5nKik7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTV3JhcHBlck9iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ09iamVj
dChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNp
bmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVj
dXRhYmxlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBT
dHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUlu
Zm8pCisgICAgLCBtX2luZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9i
amVjdChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2Jh
bE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMs
IHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcs
NyBAQCBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRp
bmdFYXJseUNlbGwpCiAgICAgLCBtX3R5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbikKKyAgICAsIG1faW5kZXhpbmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShn
bG9iYWxEYXRhLCB0aGlzLCBqc051bGwoKSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAg
ICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0x
OTcsNiArMTk5LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQog
U3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1
Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUlu
Zm8oKSkKKyAgICAsIG1faW5kZXhpbmdUeXBlKHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkpCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91
cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFz
c0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hp
bmcpCkBAIC0yNTEsNiArMjU0LDggQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVy
dHlNYXAoSgogCiAgICAgZm9yIChwdHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsg
aSA+PSAwOyAtLWkpIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCisgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVj
dHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJ
blByZXZpb3VzLmdldCgpKTsKICAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwog
ICAgIH0KQEAgLTUwMiw2ICs1MDcsMzggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRF
eHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkK
K3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5k
KTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7Cisg
ICAgCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5t
X3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4
aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5z
aXRpb247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuc2V0KGds
b2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9hdHRy
aWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9pbmRleGlu
Z1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0
eVRhYmxlKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5y
ZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91
cykKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFs
RGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3Bl
cnR5TWFwKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUu
YWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHJldHVybiB0cmFuc2l0aW9uOworfQor
CiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wg
U3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUg
IkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2Vs
bC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcg
KzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
IAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFz
c0luZm8qKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29u
c3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAw
LDYgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBz
ZWFsVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Q
cm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAg
ICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5
cGVJbmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5m
bygpLmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9p
ZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBn
bG9iYWxPYmplY3QpOyB9CkBAIC0zMzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9j
bGFzc0luZm8pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAg
ICAgICAgIApAQCAtMzYzLDcgKzM3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENs
YXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJik7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUq
KTsKIApAQCAtNDE2LDYgKzQyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAg
ICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGlu
Z1R5cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1f
Z2xvYmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7
CkBAIC00NDcsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1f
aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJp
YnV0ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2
aW91cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAg
ICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5l
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlw
ZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBpbmxpbmUg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJl
U3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9i
YWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkg
U3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywg
Y2xhc3NJbmZvLCBpbmRleGluZ1R5cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogI2RlZmlu
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgi
CiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVuc2ln
bmVkIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlv
bnMgdGhhdCBkb24ndCBoYXZlIHRvIGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisvLyBT
dXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJl
bGF0ZWQgdG8gcHJvcGVydGllcy4KKy8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0
cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB7CisgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNpZ25l
ZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAg
cmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxpbmUg
SW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
CisgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUg
fCBIYXNBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBvbGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdTaW5n
bGVTbG90RmxhZyA9IDE7CiAKQEAgLTQ0LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZSB7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBs
PiwgdW5zaWduZWQ+IEtleTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5
JiBwKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNo
KCk7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBwLnNlY29uZDsKKyAgICAgICAgICAg
IGlmIChwLmZpcnN0KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwLmZpcnN0LT5leGlzdGlu
Z0hhc2goKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0
ODI4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxh
L2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgy
OC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVj
dCwgYWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHJldmVyc2UKIHZhbHVlICA9ICcxMjMnOwotZXhw
ZWN0ID0gJzEyMyc7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRv
IHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBl
LnJldmVyc2UuY2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTczLDcgKzczLDcgQEAgcmVwb3J0Q29tcGFy
ZShleHBlY3QsIGFjdHVhbCwgc3VtbWFyeSArIAogCiAvLyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsK
LWV4cGVjdCA9ICdjYmEnOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2ln
biB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3Rv
dHlwZS5zb3J0LmNhbGwodmFsdWUpICsgJyc7CkBAIC0xMTQsNyArMTE0LDcgQEAgcmVwb3J0Q29t
cGFyZSgnYWJjJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAn
ZGVmJzsKLWV4cGVjdCA9IDY7CitleHBlY3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNz
aWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJv
dG90eXBlLnVuc2hpZnQuY2FsbCh2YWx1ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0xMjgsNyArMTI4
LDcgQEAgcmVwb3J0Q29tcGFyZSgnZGVmJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzaGlm
dAogdmFsdWUgID0gJ2FiYyc7Ci1leHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5Lic7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRv
IHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBl
LnNoaWZ0LmNhbGwodmFsdWUpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2Fi
YycsIHZhbHVlLCBzdW1tYXJ5ICsgJzoKIAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4
cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9
ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsK
IHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEs
IDEpICsgJyc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNw
cAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMSBAQCBib29sIEFycmF5VmFs
dWU6OmdldChzaXplX3QgaW5kZXgsIERpY3RpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShtX3ZhbHVlKTsKLSAgICBpZiAoIWFycmF5LT5jYW5H
ZXRJbmRleChpbmRleCkpCisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNw
YXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAK
KyAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleChp
bmRleCk7CisgICAgSlNWYWx1ZSBpbmRleGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5
KGluZGV4KTsKICAgICBpZiAoaW5kZXhlZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWlu
ZGV4ZWRWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3
MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNCbG9iQ29uc3QKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNW
YWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBp
ZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGkpOwogI2lmIEVOQUJMRShCTE9CKQogICAgICAgICBpZiAoaXRlbS5pbmhlcml0
cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBl
bmQoY29udGV4dCwgdG9BcnJheUJ1ZmZlcihpdGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMCw4ICsxMTAsOSBAQCB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRX
ZWJrCiAKICAgICBEYXNoQXJyYXkgZGFzaDsKICAgICBKU0FycmF5KiB2YWx1ZUFycmF5ID0gYXNB
cnJheSh2YWx1ZSk7CisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJz
ZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBmbG9hdCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXgoaSkudG9GbG9hdChleGVj
KTsKKyAgICAgICAgZmxvYXQgZWxlbSA9IHZhbHVlQXJyYXktPmdldEluZGV4UXVpY2tseShpKS50
b0Zsb2F0KGV4ZWMpOwogICAgICAgICBpZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0ZShlbGVtKSkK
ICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw5IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
dG9ET01TdHJpbmdMaXMKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0cmluZ0xpc3QgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKKyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgc3RyaW5n
TGlzdC0+YXBwZW5kKGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOworICAgICAgICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4UXVpY2tseShp
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgcmV0dXJuIHN0cmluZ0xpc3Qu
cmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw2ICs3MCwxMSBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eShK
U0NlCiAgICAgcmV0dXJuICFlYzsKIH0KIAorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpbmRleCkpOworfQorCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjksNiArMjY5LDc1IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdChKU0MKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNET01XaW5kb3c6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNET01XaW5kb3cqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICAKKyAgICAvLyBXZSBu
ZWVkIHRvIGNoZWNrIGZvciBjcm9zcy1kb21haW4gYWNjZXNzIGhlcmUgd2l0aG91dCBwcmludGlu
ZyB0aGUgZ2VuZXJpYyB3YXJuaW5nIG1lc3NhZ2UKKyAgICAvLyBiZWNhdXNlIHdlIGFsd2F5cyBh
bGxvdyBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbiwganVzdCBkaWZmZXJlbnQgb25lcyBkZXBlbmRp
bmcgd2hldGhlciBhY2Nlc3MKKyAgICAvLyBpcyBhbGxvd2VkLgorICAgIFN0cmluZyBlcnJvck1l
c3NhZ2U7CisgICAgYm9vbCBhbGxvd3NBY2Nlc3MgPSBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSwgZXJyb3JNZXNzYWdlKTsKKworICAgIC8vIExv
b2sgZm9yIG92ZXJyaWRlcyBiZWZvcmUgbG9va2luZyBhdCBhbnkgb2Ygb3VyIG93biBwcm9wZXJ0
aWVzLCBidXQgaWdub3JlIG92ZXJyaWRlcyBjb21wbGV0ZWx5CisgICAgLy8gaWYgdGhpcyBpcyBj
cm9zcy1kb21haW4gYWNjZXNzLgorICAgIGlmIChhbGxvd3NBY2Nlc3MgJiYgSlNHbG9iYWxPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNs
b3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7CisgICAgCisgICAgLy8gQ2hl
Y2sgZm9yIGNoaWxkIGZyYW1lcyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRv
CisgICAgLy8gbWF0Y2ggTW96aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUg
c2l0ZXMgZW5kIHVwCisgICAgLy8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3
aXRoIHdpbmRvdyBwcm9wZXJ0aWVzIHRoYXQKKyAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUu
IFNpbmNlIHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbworICAgIC8vIGl0IHRo
ZSBNb3ogd2F5LgorICAgIGlmICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+
c2NvcGVkQ2hpbGQocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsK
KyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2hpbGRGcmFtZUdldHRlcik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEbyBwcm90b3R5cGUgbG9v
a3VwIGVhcmx5IHNvIHRoYXQgZnVuY3Rpb25zIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBwcm90b3R5
cGUgY2FuIGhhdmUKKyAgICAvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdl
dHRlcnMuICAKKyAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7Cisg
ICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgeworICAgICAgICAgICAgaWYgKCFh
bGxvd3NBY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVycm9yTWVz
c2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZJWE1FOiBTZWFyY2ggdGhlIHdob2xlIGZyYW1lIGhpZXJhcmNoeSBzb21l
d2hlcmUgYXJvdW5kIGhlcmUuCisgICAgLy8gV2UgbmVlZCB0byB0ZXN0IHRoZSBjb3JyZWN0IHBy
aW9yaXR5IG9yZGVyLgorCisgICAgLy8gYWxsb3cgd2luZG93WzFdIG9yIHBhcmVudFsxXSBldGMu
ICgjNTY5ODMpCisgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50
cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgeworICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlz
T2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoIWFsbG93c0FjY2VzcykgeworICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVy
cm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlr
ZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCk7Cisg
ICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CisgICAgICAgIEF0b21pY1N0cmlu
Z0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlOYW1l
KTsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3RhdGljX2Nhc3Q8SFRNTERv
Y3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8fCBk
b2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5hbWUpKSkgeworICAgICAg
ICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0dGVyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3Qp
OworfQorCiBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOwpAQCAtMzcxLDYgKzQ0MCwxNSBA
QCBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqCiAgICAgcmV0dXJuIEJh
c2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAK
K2Jvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpTRE9NV2luZG93
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CisgICAgLy8gT25seSBh
bGxvdyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCisg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhl
YywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk3LDYgKzk3LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJv
cGVydHlTbG8KICAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsKKyAgICByZXR1cm4gdGhp
c09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
IGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTRE9NV2luZG93U2hlbGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkBAIC0xMDksNiAr
MTE1LDEyIEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0KEpTQ2VsbCogY2VsbCwKICAgICB0
aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QtPndpbmRv
dygpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBKU0RPTVdp
bmRvd1NoZWxsOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNET01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxs
Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPnB1dEJ5
SW5kZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNo
b3VsZFRocm93KTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBKU0RPTVdp
bmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihvYmplY3Qp
OwpAQCAtMTI3LDYgKzEzOSwxMiBAQCBib29sIEpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3Bl
cnR5KEpTCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPndpbmRvdygpLT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lKTsK
IH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBK
U0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihj
ZWxsKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlO
YW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93U2hlbGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNDOjpKU09iamVjdCopOwog
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpOwogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE1IEBAIGJvb2wgSlNIaXN0b3J5OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0hpc3Rvcnk6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lKQoreworICAgIEpTSGlzdG9yeSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0hpc3Rv
cnkqPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUg
c2FtZSBvcmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgdGhp
c09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKK30KKwogdm9pZCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTSGlzdG9yeSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5
LDggQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cG9ydChFeAogc3RhdGljIHZv
aWQgcG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJy
YXksIENvbnRleHRNZW51JiBtZW51KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJy
YXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgSlNPYmplY3QqIGl0ZW0gPSBhc09iamVjdChh
cnJheS0+Z2V0SW5kZXgoaSkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkg
aXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTYxMAorICAgICAgICBKU09iamVjdCogaXRlbSA9IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRl
eFF1aWNrbHkoaSkpOwogICAgICAgICBKU1ZhbHVlIGxhYmVsID0gaXRlbS0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgImxhYmVsIikpOwogICAgICAgICBKU1ZhbHVlIHR5cGUgPSBpdGVtLT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidHlwZSIpKTsKICAgICAgICAgSlNWYWx1ZSBpZCA9
IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJpZCIpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwxNSBAQCBib29sIEpTTG9jYXRpb246OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wgSlNMb2NhdGlvbjo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNMb2NhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0xvY2F0aW9uKj4oY2VsbCk7CisgICAgLy8gT25seSBhbGxvdyBkZWxldGluZyBieSBmcmFtZXMg
aW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4
ZWMsIHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Cit9CisKIHZvaWQgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAxMjcz
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNTdG9yYWdlOjpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKK30KKwogdm9pZCBKU1N0
b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RvcmFnZSo+KG9i
amVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAgICAg
VmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9jb2xz
QXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQg
aWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBw
cm90b2NvbHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
ICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0LDcgKzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW4K
ICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0
YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFs
dWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDkgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5ndGhT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkK
LSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBt
b2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAg
ICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAg
ICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0U3BhcnNlSW5kZXgoYXJy
YXksIGluZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTI3MzUwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTc5MCwxMCArNzkwLDExIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIGlmICgk
aGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTtcbiIpIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVy
In0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0
ZXIifSkgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0
dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9KSAmJiAhJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5U2xvdERlbGVn
YXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93
blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKSBp
ZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5
U2xvdEFuZERlc2NyaXB0b3IifTsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCJ9ID0gMTsKKyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJK
U0M6OkludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8ifSA9IDE7CiAgICAgfQogCiAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJs
ZSBwcm9wZXJ0aWVzCkBAIC04NDgsNiArODQ5LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAg
ICAjIEN1c3RvbSBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbgogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CiAKICAgICAjIEN1c3RvbSBnZXRQ
cm9wZXJ0eU5hbWVzIGZ1bmN0aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKICAgICBpZiAoJGludGVy
ZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1
bnRpbWVBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
UnVudGltZUFycmF5KSB9OwogCiBSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxE
YXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUsIDApCiAgICAgLCBtX2FycmF5KDApCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDEzICs3MywxMyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5KTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpBcnJheSopOwog
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0
cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgSlNBcnJheTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgUnVudGltZUFy
cmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMJKHJldmlzaW9uIDEyNzM1MCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgZnVuY3Rpb24gY3JlYXRlVGVzdHMoKSB7CiAgICAgICAg
IGpzb25PYmplY3Quc3RyaW5naWZ5KHthOiJhIiwgYjoiYiIsIGM6ImMiLCAzOiAiZCIsIDI6ICJl
IiwgMTogImYifSwgcmVwbGFjZUZ1bmMpOwogICAgICAgICByZXR1cm4gcmVwbGFjZVRyYWNrZXI7
CiAgICAgfSk7Ci0gICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9ICcoc3Ry
aW5nKXsiYSI6ImEiLCJiIjoiYiIsImMiOiJjIiwiMyI6ImQiLCIyIjoiZSIsIjEiOiJmIn07YShz
dHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7MyhzdHJpbmcpImQiOzIoc3RyaW5n
KSJlIjsxKHN0cmluZykiZiI7JzsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVj
dGVkID0gJyhzdHJpbmcpeyIxIjoiZiIsIjIiOiJlIiwiMyI6ImQiLCJhIjoiYSIsImIiOiJiIiwi
YyI6ImMifTsxKHN0cmluZykiZiI7MihzdHJpbmcpImUiOzMoc3RyaW5nKSJkIjthKHN0cmluZyki
YSI7YihzdHJpbmcpImIiO2Moc3RyaW5nKSJjIjsnOwogICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpewogICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgICB2YXIgYXJyYXkg
PSBbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7Y291bnQrKzsgYXJyYXlbMF09J2EnOyBhcnJheVsxXT0n
Yyc7IGFycmF5WzJdPSdiJzsgcmV0dXJuICdhJ319XTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162906</attachid>
            <date>2012-09-07 16:49:56 -0700</date>
            <delta_ts>2012-09-07 19:21:13 -0700</delta_ts>
            <desc>almost passing all tests</desc>
            <filename>butterflies_patch_34.diff</filename>
            <type>text/plain</type>
            <size>459853</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
ICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgcHVibGljOgogICAgIHVz
aW5nIFBhcmVudDo6bWV0aG9kVGFibGU7CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJp
ZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTE3OCw2ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogCiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgCiAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODcsNyArMTg4LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgSlNWYWx1ZSBwcm90byk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsNiArMTgzLDEyIEBAIGJvb2wgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRP
d25Qcm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KK2Jvb2wgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNlbGws
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50
Pjo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogewogICAgIGNvbnN0IEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgSlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7
CkBAIC00NDksNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQ2Fs
bGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVj
dCk7CiAgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0b1JlZihleGVjKTsKQEAgLTQ4NCw3ICs0
OTAsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgUGFyZW50OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5
IEBACiAjaW5jbHVkZSAiSlNPYmplY3RSZWZQcml2YXRlLmgiCiAKICNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkRhdGVDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYg
KzczLDggQEAKIAkJMEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgz
QjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I3MTRCQ0Y4RTEwMDg4
NUI0RiAvKiBHbG9iYWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29s
dmVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZz
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwICovOyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0lu
Zm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZD
NDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVE
RTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0
aHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2
MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAgKi87IH07CkBAIC0xODgsNiArMTkwLDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4
OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAgKi87IH07CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBB
cnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk2
MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJh
eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3
QjIgLyogQnV0dGVyZmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1l
dGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTkxNUVE
OEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhp
bmdIZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRo
b2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM4RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUIx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4
aW5nVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkwMTVFRDhFMzgw
MEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5
MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0Yz
OUYxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MzE1
RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJDMEFFNzE0
OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0NDc5
OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTY2
LDcgKzU3OSw2IEBACiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4Mjc0
OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJm
YWNlSklULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovOyB9OwotCQlBNzgxRTM1OTE0MTk3MEM3MDAw
OTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmll
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdC
NDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAw
RENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwpAQCAtODI3LDYgKzgzOSw4
IEBACiAJCTBGMEI4M0IzMTRCQ0Y4NUUwMDg4NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBH
bG9iYWxSZXNvbHZlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9i
YWxSZXNvbHZlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNCODE0
QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVP
ZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQ0Q0QzAxNUYxQTYwNDAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXREaXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1
NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMTEludENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1
RjE1RDE0QjdBNzNBMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTk0Myw2ICs5NTcsMTcgQEAKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QzE0RjVD
RkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVEOEUzODAwRjE2
N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQXJyYXlDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVFRDhFMzgwMEYx
NjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmRleGluZ0hlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4
RTE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4
aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MDE1RUQ4RTM4
MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFByb3BlcnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZH
RXhpdFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3
OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzNyw3
ICsxMzYyLDYgQEAKIAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlT
dHVicy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1
YnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1
QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEy
MTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RS
ZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVm
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhE
MDA2NUExNEYgLyogQVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBU1RCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFC
OThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMTEsNiArMjAzNSwyMCBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGlt
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYwQ0Q0
QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovLAorCQkJCTBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLywKKwkJCQkw
RkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovLAorCQkJCTBG
QjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM4
QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJMEZCN0YzOEMxNUVEOEUz
ODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RDE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJCQkwRkI3RjM4RTE1RUQ4
RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMEZC
N0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBGQjdGMzkw
MTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM5MTE1
RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0YzOTIxNUVEOEUzODAwRjE2
N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3RjM5MzE1RUQ4RTM4MDBG
MTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMkQ1
OEMzMzE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlC
Q0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIw
RTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RFNTBFMUY1MUM1MDAx
NkI2QzkgLyogQXJndW1lbnRzLmNwcCAqLywKQEAgLTIxOTYsNyArMjIzNCw2IEBACiAJCQkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAogCQkJCTkzMzAz
RkU4MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVB
MEU2QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3
MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0Mw
MEUxNkVFMzMwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzQ1LDcg
KzI3ODIsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRl
ckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyog
U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4
Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmlu
Z0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0
NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI4OTQsNiArMjkzMCwxOCBA
QAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVu
dGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBB
cnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdC
MiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYx
NjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3
RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ1R5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAv
KiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlEMTVFRDhFNDYw
MEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlFMTVFRDhFNDYw
MEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3
RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJl
Y3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQ5NSw2ICszNTQzLDcgQEAKIAkJCQkx
NDg3NEFFMzE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAorLy8gVGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMg
YW4gSW5kZXhpbmdUeXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJlIDE3IGluZGV4
aW5nIHR5cGVzICgwIHRvIDE2LCBpbmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1vcmUgdGhhbiBl
bm91Z2guCiB0eXBlZGVmIHVuc2lnbmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBJc05vdEFycmF5ID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pTQXJyYXkgID0g
MjsKKyNkZWZpbmUgYXNBcnJheU1vZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odHlwZSkpCiAKIGlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZyb21TdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCkgPT0gJkpTQXJyYXk6OnNfaW5mbykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJheTsKLSAgICBy
ZXR1cm4gSXNOb3RBcnJheTsKKyAgICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQcm9maWxlIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3MCw3ICsxNjcwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXREaXJlYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVu
ZGVyc2NvcmVQcm90byk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKAorICAgICAgICBwcm9w
ZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bworICAg
ICAgICAmJiBQcm9wZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTcsOCArODU3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX01PREVTOgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIG1vcmUg
Y29uc2VydmF0aXZlIGhhbmRsaW5nIG9mIHRoZSBvdXQtb2YtYm91bmRzCiAgICAgICAgICAgICAv
LyBjYXNlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0lu
dDMyKTsKQEAgLTkxOSwxMCArOTE4LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBJTl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpK
U0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM0NCw3ICsxMzQzLDcgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R2V0UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTM2Miw4ICsxMzYxLDcgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihT
cGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3Qg
ZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQK
ICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywg
YnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9IDMgfTsKICAgICAKKyAg
ICBBZGphY2VuY3lMaXN0KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQp
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw4ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlN
b2RlcyBtb2RlCiAgICAgc3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0
dXJuIEFycmF5OjpVbmRlY2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsK
KyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJh
eTo6QXJyYXlTdG9yYWdlOworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7CisgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBXZSBrbm93
IHRoYXQgdGhpcyBpcyBwb3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2gg
dGhlcmUgaXMgbm8KICAgICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUs
IHdlIG1heSBiZSBhYmxlIHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtMTIwLDEwICsx
MjQsMTQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNh
c2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFs
dWUubV90eXBlKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNl
IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsKKyAgICAg
ICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5k
ZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpOworCisgICAgY2FzZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFn
ZSkKKyAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1
ZS5tX3R5cGUpOwpAQCAtMTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5n
KEFycmF5OjpNb2RlIG1vZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6
SlNBcnJheToKLSAgICAgICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdl
IjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0
dXJuICJBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7Cisg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKICAgICAgICAgcmV0dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4
aXQsIC8vIEltcGxpZXMgdGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBv
cGVyYXRpb24sIHNvIHdlIHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBT
dHJpbmcsCi0gICAgSlNBcnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlT
dG9yYWdlLAorICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5
U3RvcmFnZSwKKyAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzLAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50
MTZBcnJheSwKQEAgLTYxLDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9OwogfSAvLyBuYW1lc3Bh
Y2UgQXJyYXkKIAorLy8gSGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVudHMuIEZvciBleGFtcGxl
LCBzYXlpbmcgImNhc2UgQWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8gaXMgdGhlIHNhbWUgYXMg
aGF2aW5nIG11bHRpcGxlIGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9mZiBhbGwgb2YgdGhlIG1v
ZGVzIHRoYXQKKy8vIGhhdmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4KKyNkZWZp
bmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVMKKyNkZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVMgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRz
OiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6Ok1vZGUgZnJvbU9ic2Vy
dmVkKEFycmF5TW9kZXMgbW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBBcnJheTo6TW9kZSBmcm9t
U3RydWN0dXJlKFN0cnVjdHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAtNzEsMTEgKzk4LDMwIEBA
IGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCAKIAogY29uc3QgY2hhciog
bW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlKTsKIAoraW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJm
bHkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJv
b2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9k
ZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsMjUgKzE2MCw2IEBAIGlubGluZSBB
cnJheTo6TW9kZSBtb2RlRm9yUHV0KEFycmF5OjpNb2QKICAgICB9CiB9CiAKLWlubGluZSBib29s
IG1vZGVzQ29tcGF0aWJsZUZvclN0b3JhZ2VMb2FkKEFycmF5OjpNb2RlIGxlZnQsIEFycmF5OjpN
b2RlIHJpZ2h0KQotewotICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKLSAgICBib29sIGxlZnRJc0pTQXJyYXkgPQotICAgICAgICBsZWZ0ID09IEFycmF5
OjpKU0FycmF5Ci0gICAgICAgIHx8IGxlZnQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsK
LSAgICAKLSAgICBib29sIHJpZ2h0SXNKU0FycmF5ID0KLSAgICAgICAgcmlnaHQgPT0gQXJyYXk6
OkpTQXJyYXkKLSAgICAgICAgfHwgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsK
LSAgICAKLSAgICBpZiAobGVmdElzSlNBcnJheSAmJiByaWdodElzSlNBcnJheSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgYm9vbCBt
b2RlSXNTcGVjaWZpYyhBcnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewpA
QCAtMTQ3LDcgKzE3NCwxNSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9k
ZSBtCiAKIGlubGluZSBib29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW9kZSBtb2RlKQog
ewotICAgIHJldHVybiBtb2RlSXNTcGVjaWZpYyhtb2RlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogor
ICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDcgKzE2NzQsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCi0gICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsK
KyAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2Up
OwogICAgIHNldChkZXN0aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAg
ICAgICAgICBHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5z
aXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksCkBAIC0yMzA5LDcgKzIzMDksNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRC
eU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBwcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKQEAgLTIzNjAsMTMgKzIz
NjAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNl
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0
ZXJmbHksIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3Rh
dHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IGJhc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAg
c3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTYwLDcgKzExNjAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZToKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5p
bmRleCgpKSk7CiAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODEsOCArMzgxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkR2Vu
ZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7Ci0gICAgICAgIE5vZGUgZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIE5v
ZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgaWYgKG1vZGVVc2VzQnV0dGVy
Zmx5KGFycmF5TW9kZSkpCisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0g
Tm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAgICAg
ICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJ
bmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJl
dHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5mbyB7
CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAKKyAg
ICBOb2RlKCkgeyB9CisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMg
Y2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0g
ICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1h
Y3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0Fy
cmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJl
c3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpA
QCAtMjI2LDE0ICsyMjcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0
ZSogZQogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAg
ICAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5kZXgo
aW5kZXgpKSB7Ci0gICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5kZXgs
IHZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhR
dWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRl
eCwgdmFsdWUsIHN0cmljdCk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzQxLDExICszNDIsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBnZXRCeVZhbChFeAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRh
LCBleGVjKTsKICAgICAKLSAgICAvLyBGSVhNRTogdGhlIEpJVCB1c2VkIHRvIGhhbmRsZSB0aGVz
ZSBpbiBjb21waWxlZCBjb2RlIQotICAgIGlmIChpc0pTQXJyYXkoYmFzZSkgJiYgYXNBcnJheShi
YXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFzQXJyYXkoYmFzZSktPmdldEluZGV4KGluZGV4KSk7CisgICAgaWYgKGJhc2UtPmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgICAg
ICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAg
IH0KIAotICAgIC8vIEZJWE1FOiB0aGUgSklUc3R1YiB1c2VkIHRvIHJlbGluayB0aGlzIHRvIGFu
IG9wdGltaXplZCBmb3JtIQogICAgIGlmIChpc0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJh
c2UpLT5jYW5HZXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNTdHJpbmcoYmFzZSktPmdldEluZGV4KGV4ZWMsIGluZGV4KSk7CiAKQEAgLTUzNCwxNSArNTM2
LDE1IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUg
ZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRl
eCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NTEsMTUg
KzU1MywxNSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAg
ICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQXJyYXkqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRl
eCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewog
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRo
ZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGlu
ZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoIWFy
cmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI2
OCwyMCArMTI3MCwyOSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHks
IGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCog
cmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdT
aXplLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIDEpICsgbmV3
U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRl
cmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIG5ld1NpemUs
IGZhbHNlLCAwKSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBv
YmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlh
bE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVj
dC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCiBkb3VibGUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NCw3ICs5NCw3IEBAIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXIK
IHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNf
REZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9KKShF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSWNmKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTEwNSw4ICsxMDUsMTAgQEAgdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9XKShXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6
ZV90KTsKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBD
KysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CkBAIC0xMzgsOCArMTQwLDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsU3RyaQogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNB
cnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVz
aChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwpAQCAtMTg1LDYgKzE4Nyw4IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbklzRnVuY3Rpb24KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkg
V1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUq
LCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiAKIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRp
b24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxs
cyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiAKKyAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTIgKzE5
OSwxMiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dEdQUik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJv
dG9PYmplY3QtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3Vs
dEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
QnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwogI2VuZGlmCiAgICAgfQogCkBAIC0yNTMsMTAgKzI1MywxMCBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgICAgICAKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwor
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5
V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwog
I2Vsc2UKQEAgLTQ3Myw3ICs0NzMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRH
UFIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwogI2Vsc2UKQEAgLTY4MSwxNyArNjgxLDE3IEBA
IHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAg
ICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVU
YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlm
CiAgICAgCkBAIC04MzAsNyArODMwLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25T
dHViKAogICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIzKTsKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVk
QWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2ln
bmVkLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkp
OwogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKQEAgLTg0NCw3ICs4NDQsNyBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkp
OworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAg
c2NyYXRjaEdQUjFIYXNTdG9yYWdlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NTQsOCBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBp
ZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0
dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC04NjMsOSArODYzLDkgQEAgc3RhdGlj
IHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2Ny
YXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9y
YWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVU
YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRp
ZgogICAgICAgICAgICAgCkBAIC0xMDIwLDYgKzEwMjAsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3
ZSBuZWVkIHJlYWxsb2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5k
ZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJh
c2VDZWxsKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3Rv
dHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxl
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChK
SVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIAogICAgIEpJ
VENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAg
ICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIEpJVENv
bXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0
aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVs
ID0gbV9qaXQubGFiZWwoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjYWNoZWRQdXRCeUlkKENvZGVPCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BS
LCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwog
CiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9y
ZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBt
X2ppdC5sYWJlbCgpOwpAQCAtMjU0NywyMyArMjU0NywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZl
IGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwK
LSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CkBAIC0yNjUzLDYgKzI2NDcsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChhbHJlYWR5SGFu
ZGxlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRo
ZSBiYXNlIG1heSBub3QgYmUgbmVjZXNzYXJ5IGZvciBzb21lIGFycmF5IGFjY2VzcyBtb2Rlcy4g
QnV0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8ga2VlcCBpdCBhbGl2ZSB0byB0aGlzIHBvaW50LCBz
byBpdCdzIGxpa2VseSB0byBiZSBpbiBhIHJlZ2lzdGVyIGFueXdheS4gTGlrZWx5CisgICAgICAg
IC8vIG5vIGhhcm0gaW4gbG9ja2luZyBpdCBoZXJlLgogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwogICAgICAgICAKQEAgLTI2NjAsOCArMjY1Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBBcnJh
eTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7
CiAKICAgICAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVlIGludG8gcmVnaXN0
ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCkBAIC0yNjg4LDggKzI2ODQsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CisgICAgICAg
ICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQogICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25k
QXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMjcwMiw5ICsyNjk4
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBt
aWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwot
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgp
KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsK
ICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwog
CiAgICAgICAgICAgICBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CkBAIC0y
NzEzLDcgKzI3MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKLSAgICAgICAgICAgIGlmIChh
cnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYg
KCFpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAg
ICAgICAgICAgICAgICAgICAgYmV5b25kQXJyYXlCb3VuZHMsIHRoaXMsCkBAIC0yODgyLDE3ICsy
ODc4LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6
b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAg
Ly8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3
ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3Jh
Z2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CiAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3Rv
cmFnZUxlbmd0aEdQUik7CiAgICAgICAgIApAQCAtMjkxOCwxOCArMjkxNCwxOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3Jh
Z2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVu
Z3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxl
bmd0aEdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAKICAg
ICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAgIApAQCAtMzUxNSwxNCArMzUxMSwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNv
bXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICBjYXNlIEdldEJ1dHRl
cmZseTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAg
ICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4NjUsNyArMzg2MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNlbmRpZgogICAgICAgICBtX2ppdC5u
ZWczMihyZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJl
c29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFz
ZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2FsZVB0ciwg
KGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsMTkgKzMx
NSwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUmIG5vCiAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6
c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewotICAgICAgICAvLyBUaGlzIGNvZGUgZHVw
bGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lwYXRpb24gb2YgdGhpcyBjb2RlIGJlaW5n
Ci0gICAgICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLgorICAgIGNh
c2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVt
cC5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisg
ICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzAwNiwxMSArMzAxNyw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpk
YXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotICAgICAgICBicmVhazsK
LSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2Ny
aXB0b3ItPm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwpAQCAtMzEyNSwxMyArMzEzMSwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihu
b2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRz
OiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0Lmdw
cigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVn
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdFJlZyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3Vs
dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBA
IC0zMjI3LDYgKzMyMzIsMjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4
ZWMoTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSYgbm9kZSkKIHsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBi
YXNlR1BSKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0zMjQ4LDEzICszMjY3LDMxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAg
ICAgICAgCi0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAg
bV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VSZXN1
bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIHNp
emVfdCBvbGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVf
dCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKKyAgICBBU1NFUlQo
bmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgIGlmIChoYXNJbmRl
eGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIo
KSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAg
ICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkBAIC0zMjY3LDkg
KzMzMDQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAg
ICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogICAgICAgICAKLSAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICBzaXplX3Qg
bmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5l
d1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgQ29waWVkQWxsb2NhdG9y
KiBjb3BpZWRBbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxv
Y2F0b3IoKTsKICAgICAgICAgCiAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIyKTsKQEAgLTMyODAsMTMgKzMzMTQsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LmFkZFB0
cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIy
KTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNj
cmF0Y2hHUFIyLCBuZXdTaXplKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXpl
IC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBz
dG9yYWdlLCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgewogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNW
YWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9m
T3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwogICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Niw2ICsxMTU2LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVj
dCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUob2JqZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9u
X0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7
CkBAIC0xMzY4LDcgKzEzNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMTY2Niw3ICsxNjc2
LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVN
TVlfQVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTIxMzksNyArMjE0OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
JkNsYXNzVHlwZTo6c19pbmZvKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBK
U0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFs
aXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgIG1faml0
LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSk7CiAgICAgfQogCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZl
IHN0cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKICAgICBzdGF0aWMgQ29w
aWVkQmxvY2sqIG92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAotICAgIENoZWNrZWRCb29s
ZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiop
OwogICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlT3ZlcnNpemUoc2l6ZV90LCB2b2lkKiop
OwogICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVPdmVyc2l6ZSh2b2lkKiosIHNpemVf
dCwgc2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDM1LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBz
Y3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUg
U3RydWN0dXJlVHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5
cGUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2
b2lkIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsK
KyAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBwdHJkaWZmX3Qg
b2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdp
c3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0
QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgs
IFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VQdHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2
LDcgKzQyNiw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHIKICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIEFkZHJlc3MocmVz
dWx0LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRo
ZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVy
ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTQzNCw3ICs0MzQs
NyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFs
bG9jYXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCBy
ZXN1bHQsIHNjcmF0Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2lj
U3RvcmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCitpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgcHRyZGlmZl90IG9mZnNldEZy
b21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9j
YXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCkBAIC00NDMs
MzcgKzQ0MywzMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAg
ICAgc3RvcmVQdHIocmVzdWx0LCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAg
IG5lZ1B0cihyZXN1bHQpOwogICAgIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+
bV9jdXJyZW50UGF5bG9hZEVuZCksIHJlc3VsdCk7Ci0gICAgc3ViUHRyKFRydXN0ZWRJbW0zMihz
aXplKSwgcmVzdWx0KTsKKyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUgLSBvZmZzZXRGcm9t
QmFzZSksIHJlc3VsdCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJh
eSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNl
bGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRy
KQogewogICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsK
LSAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBKU0FycmF5OjpzdG9yYWdlU2l6ZShpbml0aWFs
TGVuZ3RoKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6
ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOwogCiAg
ICAgLy8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQg
Z2FyYmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5
IGluaXRpYWxpemF0aW9uLgotICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3Rv
cmFnZSwgc3RvcmFnZVJlc3VsdCk7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRp
YWxTdG9yYWdlLCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAg
IC8vIEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCiAgICAgZW1pdEFsbG9jYXRlQmFz
aWNKU09iamVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsK
IAogICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFn
ZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFy
cmF5U3RvcmFnZTo6YWxsb2NCYXNlT2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0
aCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
OwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKEltbTMy
KGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7CisgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0
b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxs
b2NhdGVkIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNz
KGNlbGxSZXN1bHQsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHN0
b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgdmVjdG9yIGxlbmd0aCBhbmQgaW5kZXggYmlhcy4K
LSAgICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpT
QXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
MCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLQot
ICAgIC8vIEluaXRpYWxpemUgdGhlIHNwYXJzZSB2YWx1ZSBtYXAuCi0gICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzcGFyc2VWYWx1ZU1h
cE9mZnNldCgpKSk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgorICAg
IC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHN0b3JhZ2VQdHIpOwpAQCAtNDg1LDE2ICs0ODAsNiBAQCBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwg
QWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2Vu
ZGlmCiAgICAgfQotCi0gICAgLy8gWmVybyBvdXQgdGhlIHJlbWFpbmluZyBzbG90cy4KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkgPCBpbml0aWFsTGVuZ3RoOyBpKyspIHsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKLSNlbHNlCi0gICAgICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpLCBBZGRyZXNz
KHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSkpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSk7Ci0jZW5kaWYKLSAgICB9CiB9CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NjcsNyArMTY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19m
dW5jX2V4cChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0Fy
cmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkgeworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVy
c2l6ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IobGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9uZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpA
QCAtMTY4Niw3ICsxNjg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0
cnVjdAogICAgIC8vIElmIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxs
IGFscmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0
X29wX25ld19hcnJheS4KICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNBcnJheTo6c3RvcmFn
ZVNpemUobGVuZ3RoKSkpCisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2gg
c3BhY2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3RpCiAgICAgZW1pdExvYWRQ
YXlsb2FkKGl0ZXIsIHJlZ1QxKTsKICAgICAKICAgICAvLyBUZXN0IGJhc2UncyBzdHJ1Y3R1cmUK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGhBbmRUeXBlKCkpKSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDApOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVD
VF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZSkpKSk7
CiAgICAgbG9hZDMyKGFkZHJlc3NGb3IoaSksIHJlZ1QzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0
cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKIAotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
LCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwpA
QCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lz
dGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAg
ICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0z
MihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGJyZWFrcG9pbnQo
KTsKICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwg
c2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwpAQCAtMjM5LDEwICsyMzksMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVt
cCBlbXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAg
ICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0
aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNo
MzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX2xlbmd0aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMy
KEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7CiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7CiAKQEAgLTQwMyw3ICs0MDMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRo
KGludCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNs
b3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3Bl
cnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxl
TG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIERhdGFM
YWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNz
T2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJl
Z1QwKTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgRGF0YUxhYmVsUHRy
IHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2go
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0
Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKSk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJl
bCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QyKTsKKyAgICBDb252
ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAg
ICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkp
OwogCiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKQEAg
LTUwOSw4ICs1MDksOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3Rl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwotICAgIHN0b3Jl
UHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBB
ZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9m
ZnNldCkpKTsKIH0KIAogLy8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0
eSBzdG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgpAQCAtNTIxLDggKzUyMSw4IEBAIHZvaWQg
SklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBz
aXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSks
IHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAK
IHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3Rl
cklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQpAQCAtNTMyLDggKzUzMiw4
IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKGJhc2UtPmFkZHJlc3NPZk91dE9mTGluZVN0
b3JhZ2UoKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVz
dWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbkJ1dHRlcmZseShjYWNo
ZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOwogfQog
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02NjAs
MTEgKzY2MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QzLCBtX2NvZGVCbG9j
ay0+Z2V0T3JBZGRBcnJheVByb2ZpbGUoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFp
bHVyZUNhc2VzMSA9IGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUg
c3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlZ1QyKTsKICAg
ICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIFRydXN0ZWRJ
bW0zMigwKSk7CiAKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdU
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24g
MTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MTcsOCArMTUxNyw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2Jq
ZWN0Kiwgb3BfcHV0X2IKICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpT
T2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSAqc3RhY2tGcmFtZS5nbG9iYWxEYXRhOwotICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6
ZSwgbmV3U2l6ZSk7Ci0gICAgYmFzZS0+c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBu
ZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFz
ZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7Cisg
ICAgYmFzZS0+c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgbmV3U3RydWN0dXJl
KTsKIAogICAgIHJldHVybiBiYXNlOwogfQpAQCAtMjQzNSw3ICsyNDM1LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
c3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLQorICAgIAogICAgIGlmIChMSUtFTFkoYmFz
ZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewogICAgICAgICBpZiAo
SlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShj
YWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7CiAgICAg
ICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CkBAIC0yNTI4LDEyICsyNTI4LDEyIEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKIAogICAgIGlmIChMSUtFTFko
c3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQu
YXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAg
ICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAg
aWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpzQXJyYXktPnNl
dEluZGV4KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisg
ICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZh
bHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUlu
ZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFz
ZVZhbHVlLnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIH0gZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkp
IHsKQEAgLTM0MDIsNyArMzQwMiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1
dF9nZXR0ZXIKICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgYXNPYmplY3QoZ2V0dGVyKSk7CiAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkK
ICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNP
YmplY3Qoc2V0dGVyKSk7Ci0gICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIGFjY2Vzc29y
LCBBY2Nlc3Nvcik7CisgICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwogfQog
CiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw3ICs4NTgsNyBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNl
VmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKICAgICBMTElOVF9PUCgxKSA9IHJlc3VsdDsKLQorICAgIAogICAgIGlmICghTExJTlRfQUxX
QVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGJhc2VWYWx1ZS5pc0NlbGwoKQogICAgICAgICAm
JiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTg3Nyw3ICs4NzcsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5k
ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNv
ZGUobGxpbnRfb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICBwY1s1
XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0g
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05MzksNyArOTM5LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBwY1s2XS51LnN0cnVjdHVy
ZS5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtOTY3
LDcgKzk2Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAg
ICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRf
YnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQg
PSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldElu
QnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA0NiwxMiArMTA0Niwx
MiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhCiAgICAgCiAgICAg
aWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9
IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkp
IHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAg
anNBcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlj
a2x5KGkpKQorICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KGdsb2JhbERh
dGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBKU0FycmF5
OjpwdXRCeUluZGV4KGpzQXJyYXksIGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgTExJTlRfRU5EKCk7CiAgICAgICAgIH0KICAgICAg
ICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKSk7CkBAIC0xMTI4LDcgKzExMjgsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X2dldHRlCiAgICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkK
ICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihnbG9iYWxEYXRhLCBhc09iamVjdChzZXR0ZXIp
KTsKICAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcigKLSAgICAgICAgZ2xvYmFsRGF0YSwK
KyAgICAgICAgZXhlYywKICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNb
Ml0udS5vcGVyYW5kKSwKICAgICAgICAgYWNjZXNzb3IsIEFjY2Vzc29yKTsKICAgICBMTElOVF9F
TkQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTQzLDIxICs5NDMsMjEgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3Jv
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0
LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykg
YmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAg
ICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3Rv
cmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5k
U3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5l
U3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFu
ZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNl
dCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFk
ZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAog
bWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0
QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZM
aW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRw
IEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFn
ZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0g
ICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0
OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6
ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkg
VGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5
T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmpl
Y3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyBy
ZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTgwMiwyMCArODAyLDIwIEBAIF9sbGludF9vcF9pc19zdHJp
bmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9w
ZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0
KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdl
Q2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAg
bG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXpl
b2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50
ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQo
cHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBw
cm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAg
IGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9i
amVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5k
U3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQK
ICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAg
am1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVT
dG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFn
ZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3Rv
cmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9h
ZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAog
CiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBAIC0xMTMyLDggKzExMzIsOCBAQCBf
bGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0
Ml0sIHQyCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QyXSwgdDIK
ICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5VmFsU2xv
dwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEgdDEsIEpT
QXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwog
ICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3Zl
Y3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIx
Nyw4ICsxMjE3LDggQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2dsb2JhbERhdGFbdDBdLCB0MAogICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNs
YXNzSW5mb1t0MF0sIHQwCiAgICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQw
LCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhb
dDFdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0
MAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9sZW5ndGhbdDBdLCAu
b3BQdXRCeVZhbFNsb3cKICAgICBidHB6IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4
XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMg
MjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEyMjksOSArMTIyOSw5IEBAIF9sbGludF9vcF9wdXRfYnlf
dmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251
bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9hdXhXb3JkW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJl
c3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1f
bGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4
aW5nSGVhZGVyOjptX2F1eFdvcmRbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI3MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBlbHNlCiAgICAgY29uc3QgUGF5bG9hZE9mZnNldCA9
IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCitj
b25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9yYWdlID0gOAorY29uc3QgQWxsQXJy
YXlUeXBlcyA9IDE1CisKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNQog
Y29uc3QgT2JqZWN0VHlwZSA9IDEzCkBAIC0zMjMsNyArMzI4LDcgQEAgbWFjcm8gYWxsb2NhdGVC
YXNpY0pTT2JqZWN0KHNpemVDbGFzc0luZAogICAgICAgICBsb2FkcCBjbGFzc0luZm9PZmZzZXRb
c2NyYXRjaDFdLCBzY3JhdGNoMgogICAgICAgICBzdG9yZXAgc2NyYXRjaDIsIFtyZXN1bHRdCiAg
ICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbcmVzdWx0XQotICAg
ICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtyZXN1bHRdCisgICAg
ICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9idXR0ZXJmbHlbcmVzdWx0XQogICAgIGVuZAogZW5k
CiAKQEAgLTQ5OCw3ICs1MDMsNyBAQCBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHBy
b3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0aE91dE9mTGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0
eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVT
dG9yYWdlW29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKICAgICAjIEluZGljYXRlIHRoYXQgdGhl
IHByb3BlcnR5U3RvcmFnZSByZWdpc3RlciBub3cgcG9pbnRzIHRvIHRoZQogICAgICMgcHJvcGVy
dHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhlIG9iamVjdCByZWdpc3RlciBtYXkgYmUgcmV1c2VkCiAg
ICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKUwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmlu
Zzo6bnVtYmVyKGkpKSk7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiB9CiAKIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgCkBAIC0zMDgsNyArMzA4LDcgQEAgYm9vbCBBcmd1bWVudHM6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZQogICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHlldCBwcmVzZW50
IG9uIHRoZSBvYmplY3QsIGFuZCBpcyBub3QgeWV0IG1hcmtlZCBhcyBkZWxldGVkLCB0aGVuIGFk
ZCBpdCBub3cuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICBpZiAoKCF0aGlz
T2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzIHx8ICF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJn
dW1lbnRzW2ldKSAmJiAhSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3VtZW50KGkp
LmdldCgpLCAwKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0TWF5QmVJbmRleChleGVj
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3VtZW50KGkpLmdldCgpKTsKICAgICAgICAg
aWYgKCFCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAK
ICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlw
ZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBBcnJheUNvbnZl
bnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19oCisKKyNpbmNsdWRlICJJbmRleGlu
Z0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAwCisKKy8vIE92ZXJ2aWV3IG9mIEpT
QXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVk
IGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3Qg
cHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCisvLyAgICogQSBzcGFyc2Ug
bWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmlj
IGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxl
CisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRl
ciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBv
bmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0
CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBi
ZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vCisvLyBBbGwgcHJvcGVy
dGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWdu
ZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFy
cmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCisvLyBzdG9yYWdlIHZl
Y3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVk
IGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9y
YWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4g
d2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUg
KE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2
ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9m
CisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3Rv
ciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlw
bGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAo
TUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1
ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisv
LyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBz
aXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyByaXNrIG9m
IG92ZXJmbG93LgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSW5kZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpKQorCisvLyBUaGVzZSB2
YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0
aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2Vl
IDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90
IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFY
X0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4g
aXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQor
Ly8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGgg
KGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAg
ICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5n
dGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJ
UlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVj
dG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGlj
ZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4K
Ky8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUg
aW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4g
SWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5v
dWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAg
IHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5E
ZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRl
ciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0QXV4
V29yZChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRl
ckZvckFycmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI3
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgi
CkBAIC0xMTQsOSArMTE2LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlwZTo6c19p
bmZvID0KIEBlbmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6Y3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1
dHRlcmZseShleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBlKiBwcm90
b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMt
PmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBidXR0ZXJm
bHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKKyAgICBy
ZXR1cm4gcHJvdG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5cGU6OkFy
cmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAg
ICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KQogewogfQogCkBAIC0yOTIsOCArMzAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsg
aysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNPYmotPmNh
bkdldEluZGV4KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4KGsp
OworICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAgICAgICAg
ICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgCkBA
IC00MTMsMTAgKzQyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAogICAgICAg
ICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5H
ZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShr
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJy
YXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVu
dC50b1dURlN0cmluZ0lubGluZShleGVjKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC02MjgsNyAr
NjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVu
Y3Rpb24sIGNhbGxEYXRhKTsKIAotICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNwYXJzZU1vZGUoKSkgeworICAg
IGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5
KHRoaXNPYmopLT5pblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChpc051bWVy
aWNDb21wYXJlRnVuY3Rpb24oZXhlYywgY2FsbFR5cGUsIGNhbGxEYXRhKSkKICAgICAgICAgICAg
IGFzQXJyYXkodGhpc09iaiktPnNvcnROdW1lcmljKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEpOwogICAgICAgICBlbHNlIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCkBA
IC03ODgsOSArNzk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENh
Y2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5n
dGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmICghYXJy
YXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2
ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdl
dEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRo
aXMpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCB2KTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwpAQCAtODQ2LDExICs4
NTYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJy
YXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtOTA5LDExICs5MTksMTEg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVk
Q2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNh
bkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldElu
ZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC05NjUsMTEgKzk3NSwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxs
KGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhj
ZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC0xMDE3LDExICsxMDI3LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhl
YywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRp
b24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRl
eChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNr
bHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtMTA3NSw4ICsxMDg1LDggQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2Ug
aWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleCgwKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXkt
PmdldEluZGV4KDApOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1
aWNrbHkoMCkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoMCk7CiAgICAg
ICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpAQCAtMTA5Nyw4ICsxMTA3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBydik7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHY7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRl
eChpKSkpCi0gICAgICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAg
ICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpKSkpCisgICAgICAgICAg
ICAgICAgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGls
ZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDEsIHYpOwpAQCAtMTE1Miw4ICsxMTYyLDggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNl
IGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgobGVuZ3RoIC0gMSkpewotICAgICAgICBy
diA9IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAxKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEpKXsKKyAgICAgICAgcnYgPSBhcnJh
eS0+Z2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEpOwogICAgICAgICBpID0gMTsKICAgICB9IGVs
c2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTExNzQsOSAr
MTE4NCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkeCA9IGxlbmd0aCAtIGkgLSAxOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBydik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJ
bmRleChpZHgpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShpZHgpKSkKICAgICAgICAgICAgICAgICBicmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVu
IG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBmYWxsYmFjayB0byBzbG93IHBhdGgKLSAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4KGlkeCkp
OworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXhR
dWlja2x5KGlkeCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCBqc051
bWJlcihpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMywgYXJyYXkp
OwogICAgICAgICAgICAgcnYgPSBjYWNoZWRDYWxsLmNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkocmV2aXNpb24gMTI3MzUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsK
IAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAKLSAgICAgICAg
c3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcHJvdG90eXBlLT5maW5pc2hDcmVh
dGlvbihnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIHByb3RvdHlwZTsKLSAgICAg
ICAgfQorICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsK
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtNDcsNyArNDIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdlX2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gK
KworI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIK
KyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVN
YXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBB
IEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8v
IHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gIFRvIGFjY2VzcyB0aGUgY29udGFpbmVk
IEFycmF5U3RvcmFnZSBzdHJ1Y3QsIHVzZSB0aGUgZ2V0U3RvcmFnZSgpIGFuZCAKKy8vIHNldFN0
b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkg
YmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVp
Y2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50
ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhC
aWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2Uo
KSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBh
cyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0
b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2Uq
IGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRl
eGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJv
bSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5k
ZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5hdXhXb3JkKCk7IH0KKyAgICB2b2lkIHNl
dExlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0QXV4V29yZChs
ZW5ndGgpOyB9CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+bGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBs
ZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0TGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gQnV0dGVyZmx5Ojpv
ZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb21EdXJpbmdHQyhjb25zdCBBcnJheVN0
b3JhZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAuY29weUZyb20ob3RoZXIu
bV9zcGFyc2VNYXApOworICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOwor
ICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsK
KyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5k
ZXggPSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3NwYXJzZU1hcCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAgICAK
KyAgICBXcml0ZUJhcnJpZXI8U3BhcnNlQXJyYXlWYWx1ZU1hcD4gbV9zcGFyc2VNYXA7CisgICAg
dW5zaWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsK
KyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0
cl90IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRp
b25JbmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZklu
ZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEluZGV4aW5n
SGVhZGVyOjpvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0
T2ZMZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2luZGV4Qmlhcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZU1hcE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fc3BhcnNlTWFw
KTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5n
dGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSAr
IHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisj
aW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgor
I2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNHbG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOwor
CitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7
Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVi
bGljOgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA/IGhhc0luZGV4aW5nSGVhZGVyIDogdHJ1ZSk7CisgICAg
ICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRl
cikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICsgKGhhc0luZGV4aW5nSGVhZGVyID8gc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSA6IDApICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisg
ICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFz
ZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5k
ZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigp
ICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mQXV4V29yZCgpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSAr
IEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9CisgICAgCisgICAgc3RhdGljIEJ1
dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZs
eSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVy
Jiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RW
aXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRl
eGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRl
eGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9
CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5n
SGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
cHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5n
UGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlT
dG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGlu
Z0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFz
ZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBw
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAg
IHZvaWQqIGJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0
ZXJmbHkgcmVhbGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2Vs
ZiBidXQgZG8gbm90IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxl
Y3QgdGhhdCB0aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YK
KyAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8g
ZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0
ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMg
YnkgY2FsbGluZworICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdl
LgorICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4
aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQ
cm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNh
cGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93
UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdo
dChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8g
QXNzdW1lcyB0aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisg
ICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0
ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkq
IHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8v
IEFzc3VtZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmpl
Y3QgaGFzIGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNo
aWZ0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVy
Zmx5SW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisj
aW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgi
CisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0
aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIHNpemVfdCBz
aXplID0gdG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7
CisgICAgcmV0dXJuIGZyb21CYXNlKHRlbXAsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKKyAgICAgICAg
KnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0lu
ZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigp
LCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxp
emVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykpLAorICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6
YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFzZShpbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQorewor
ICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9i
YWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHkoCisgICAgICAgIHJl
c3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBi
YXNlKHByZUNhcGFjaXR5LCBvbGRQcm9wZXJ0eUNhcGFjaXR5KSwKKyAgICAgICAgdG90YWxTaXpl
KDAsIG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6
ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoCisgICAgICAgIGdsb2JhbERhdGEsIGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0
cnVjdHVyZSksIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVy
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5p
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5
KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVf
dCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93UHJvcGVydHlTdG9yYWdl
KAorICAgICAgICBnbG9iYWxEYXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFk
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVF9VTlVTRUQo
b2xkU3RydWN0dXJlLCAhaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkob2xkU3RydWN0dXJl
KSk7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIGhhZEluZGV4aW5nSGVhZGVyID09
IGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB2
b2lkKiB0aGVCYXNlID0gYmFzZSgwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBzaXplX3Qgb2xk
U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBoYWRJbmRleGluZ0hlYWRlciwg
b2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHNpemVfdCBuZXdTaXplID0gdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgm
dGhlQmFzZSwgb2xkU2l6ZSwgbmV3U2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBmcm9tQmFzZSh0aGVCYXNlLCAwLCBwcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpCit7CisgICAgcmV0dXJuIGdyb3dBcnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxE
YXRhLCBvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwKKyAg
ICAgICAgaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisg
ICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKG9sZFN0
cnVjdHVyZSksIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwg
Ym9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgK
KyAgICAgICAgZ2xvYmFsRGF0YSwgbmV3UHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIG5l
d0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgbWFkZSBtdWNoIG1vcmUgZWZmaWNpZW50IGlmIHdlIHVz
ZWQgdGhlIHByb3BlcnR5IHNpemUsCisgICAgLy8gbm90IHRoZSBjYXBhY2l0eS4KKyAgICB2b2lk
KiB0byA9IHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5OworICAg
IHZvaWQqIGZyb20gPSBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAg
c2l6ZV90IHNpemUgPSBzdGQ6Om1pbigKKyAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2Fw
YWNpdHksIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGlu
Z0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICBtZW1jcHkodG8s
IGZyb20sIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkq
IEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6
aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgcmV0dXJu
IHJlc2l6ZUFycmF5KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5p
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpLCBuZXdQcmVDYXBhY2l0eSwKKyAg
ICAgICAgaGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
K30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojp1bnNoaWZ0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhpbmdI
ZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIEFTU0VSVChudW1iZXJPZlNs
b3RzIDw9IGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSkpOworICAgIHVu
c2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7
CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIHByb2JhYmx5IGJlIHdpc2UgdG8gcmV3cml0ZSB0aGlz
IGFzIGEgbG9vcCBzaW5jZSAoMSkgd2Uga25vdyBpbiB3aGljaAorICAgIC8vIGRpcmVjdGlvbiB3
ZSdyZSBtb3ZpbmcgbWVtb3J5IHNvIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIGNoZWNrIG9mIG1l
bW1vdmUgYW5kICgyKSB3ZSdyZQorICAgIC8vIG1vdmluZyBhIHNtYWxsIGFtb3VudCBvZiBtZW1v
cnkgaW4gdGhlIGNvbW1vbiBjYXNlIHNvIHRoZSB0aHJvdWdocHV0IG9mIG1lbW1vdmUgd29uJ3QK
KyAgICAvLyBhbW9ydGl6ZSB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBpdC4gQW5kIG5vLCB3ZSBj
YW5ub3QgcmVseSBvbiB0aGUgQysrIGNvbXBpbGVyIHRvCisgICAgLy8gaW5saW5lIG1lbW1vdmUg
KHBhcnRpY3VsYXJseSBzaW5jZSB0aGUgc2l6ZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8gYmUgdmFy
aWFibGUpLCBub3IgY2FuCisgICAgLy8gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gcmVjb2du
aXplIHRoZSBvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhcmd1bWVudHMgKHNpbmNlCisgICAgLy8g
cHJvcGVydHlDYXBhY2l0eSBpcyB2YXJpYWJsZSBhbmQgY291bGQgY2F1c2Ugd3JhcC1hcm91bmQg
YXMgZmFyIGFzIHRoZSBjb21waWxlciBrbm93cykuCisgICAgbWVtbW92ZSgKKyAgICAgICAgcHJv
cGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAgICAg
ICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGluZ0hlYWRl
cikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGluZ0hlYWRl
cjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyktPmJ1dHRlcmZs
eSgpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnNoaWZ0KFN0cnVjdHVyZSog
c3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cykKK3sKKyAgICBBU1NFUlQoaGFzSW5kZXhp
bmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHVuc2lnbmVkIHByb3Bl
cnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgLy8gRklY
TUU6IFNlZSBjb21tZW50IGluIHVuc2hpZnQoKSwgYWJvdmUuCisgICAgbWVtbW92ZSgKKyAgICAg
ICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5ICsgbnVtYmVyT2ZTbG90cywK
KyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpICogcHJvcGVydHlDYXBhY2l0eSArIHNpemVvZihJbmRleGlu
Z0hlYWRlcikgKyBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIHJldHVybiBJbmRleGlu
Z0hlYWRlcjo6ZnJvbUVuZE9mKHByb3BlcnR5U3RvcmFnZSgpICsgbnVtYmVyT2ZTbG90cyktPmJ1
dHRlcmZseSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZs
eUlubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93blByb3BlcnR5TmFtZXNGdW5j
dGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRP
d25Qcm9wZXJ0eU5hbWVzOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgR2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOworCiAgICAg
ICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCkBAIC0x
MjQsNiArMTI3LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAgICAgICAgICZD
bGFzc05hbWU6OnRvVGhpc09iamVjdCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZhdWx0VmFs
dWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNs
YXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjbGFzc05h
bWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6aGFzSW5zdGFuY2UsIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdIZWFkZXJfaAorI2RlZmluZSBJbmRleGlu
Z0hlYWRlcl9oCisKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEJ1dHRlcmZseTsKK2NsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFN0cnVjdHVyZTsKK3N0cnVjdCBBcnJheVN0
b3JhZ2U7CisKK2NsYXNzIEluZGV4aW5nSGVhZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBEZWZpbmUg
dGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNW
YWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0CisgICAgLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVy
Zmxvdy4KKyAgICBlbnVtIHsgbWF4aW11bUxlbmd0aCA9IDB4MTAwMDAwMDAgfTsKKyAgICAKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiAtc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKTsgfQorICAgIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBdXhXb3JkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEluZGV4aW5nSGVhZGVyLCBtX2F1eFdvcmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwg
bV9sZW5ndGgpOyB9CisgICAgCisgICAgLy8gVGhlIGZhY3QgdGhhdCB0aGUgZGVmYXVsdCBJbmRl
eGluZ0hlYWRlciBpcyBhbGwgemVybydzIGlzIHBhcnQgb2YgdGhlCisgICAgLy8gY29udHJhY3Qg
b2YgdGhpcyBjbGFzcyBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBUaGUgSklUIGFuZCBHQyBk
ZXBlbmQKKyAgICAvLyBvbiBpdC4KKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9h
dXhXb3JkKDApCisgICAgICAgICwgbV9sZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAg
dm9pZCBzZXRMZW5ndGgodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxl
bmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CisgICAg
fQorICAgIAorICAgIHVpbnQzMl90IGF1eFdvcmQoKSB7IHJldHVybiBtX2F1eFdvcmQ7IH0KKyAg
ICB2b2lkIHNldEF1eFdvcmQodWludDMyX3QgYXV4V29yZCkgeyBtX2F1eFdvcmQgPSBhdXhXb3Jk
OyB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0
dGVyZmx5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IElu
ZGV4aW5nSGVhZGVyKiBmcm9tKGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5kZXhpbmdIZWFkZXIqPihidXR0
ZXJmbHkpIC0gMTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9t
KEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tRW5kT2YoUHJvcGVydHlTdG9yYWdl
IHByb3BlcnR5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEluZGV4aW5nSGVhZGVyKj4ocHJvcGVydHlTdG9yYWdlKTsKKyAgICB9CisgICAgCisgICAgUHJv
cGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RQcm9wZXJ0eVN0b3JhZ2U+KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPih0aGlzICsgMSk7Cisg
ICAgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRo
YXQgdGhleSBjYW5ub3QgYmUKKyAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdI
ZWFkZXIuCisgICAgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOworICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAgICAKKyAgICB1aW50MzJf
dCBtX2F1eFdvcmQ7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUg
YXJyYXkgdHlwZS4KKyAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUg
aW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlIGFuZCBpdHMgdHlwZS4KK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitpbmxpbmUgc2l6ZV90IEluZGV4aW5nSGVhZGVyOjpwcmVDYXBhY2l0eShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSAmIEhhc0FycmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1
cm4gYXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzOworfQorCitpbmxpbmUgc2l6ZV90IEluZGV4
aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBpZiAoTElLRUxZKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEhhc0Fy
cmF5U3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gQXJyYXlT
dG9yYWdlOjpzaXplRm9yKGFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nVHlwZV9oCisjZGVm
aW5lIEluZGV4aW5nVHlwZV9oCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3Qg
SW5kZXhpbmdUeXBlOworCisvLyBGbGFncyBmb3IgdGVzdGluZyB0aGUgcHJlc2VuY2Ugb2YgY2Fw
YWJpbGl0aWVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAg
ICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBIYXNBcnJheVN0b3JhZ2UgICAg
ICAgICAgPSA4OworCisvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9y
eSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKKy8vIG1hc2tlZCBvZmYgdW5sZXNzIHlv
dSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhZEFy
cmF5U3RvcmFnZSAgICAgICAgICA9IDE2OyAvLyBNZWFucyB0aGF0IHRoaXMgb2JqZWN0IGRpZCBo
YXZlIGFycmF5IHN0b3JhZ2UgaW4gdGhlIHBhc3QuCisKKy8vIExpc3Qgb2YgYWNjZXB0YWJsZSBh
cnJheSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAg
ICAgICAgID0gMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlID0gSGFzQXJyYXlTdG9yYWdlOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJh
eSAgICAgICAgICAgICAgICAgICAgPSBJc0FycmF5Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2UgICAgPSBJc0FycmF5IHwgSGFzQXJyYXlTdG9yYWdlOwor
CisvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQWxsQXJyYXlUeXBlcyAgICAgICAgICAgID0gMTU7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3Np
YmxlIHR5cGVzIGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkgID0gMzE7CisKK2lubGluZSBib29sIGhhc0luZGV4
aW5nSGVhZGVyKEluZGV4aW5nVHlwZSB0eXBlKQoreworICAgIHJldHVybiAhISh0eXBlICYgSGFz
QXJyYXlTdG9yYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRl
eGluZ1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAgSlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24oQ2FsbEZyYW1lKiBjYQogICAgICAgICBjYWxs
RnJhbWUtPmdsb2JhbFRoaXNWYWx1ZSgpLAogICAgICAgICBjYWxsRnJhbWUtPnNjb3BlKCkKICAg
ICApCi0gICAgLCBtX3JlZ2lzdGVyQXJyYXkoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMs
IDApCisgICAgLCBtX3JlZ2lzdGVyQXJyYXkoMCkKICAgICAsIG1fbnVtQ2FwdHVyZWRBcmdzKG1h
eChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgZnVuY3Rpb25FeGVjdXRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpKSkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCkpCiAgICAgLCBtX2lzVG9ybk9mZihmYWxzZSkKQEAgLTc0
LDEyICs3NCwxMiBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqCiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIC8vIE5v
IG5lZWQgdG8gbWFyayBvdXIgcmVnaXN0ZXJzIGlmIHRoZXkncmUgc3RpbGwgaW4gdGhlIFJlZ2lz
dGVyRmlsZS4KLSAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJheSA9IHRoaXNPYmplY3Qt
Pm1fcmVnaXN0ZXJBcnJheS5nZXQoKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcmVnaXN0ZXJBcnJh
eSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheTsKICAgICBpZiAoIXJlZ2lzdGVyQXJyYXkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChiaXR3aXNlX2Nh
c3Q8dm9pZCoqPigmcmVnaXN0ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXpl
SW5CeXRlcygpLCByZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZWdpc3RlckFycmF5KSwgdGhp
c09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemUoKSk7Ci0gICAgdGhpc09iamVjdC0+bV9yZWdpc3Rl
ckFycmF5LnNldChyZWdpc3RlckFycmF5LCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKKyAg
ICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgIHRoaXNP
YmplY3QtPm1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHRoaXNPYmplY3QtPnJlZ2lzdGVy
T2Zmc2V0KCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIGFyZ3VtZW50cyBvYmplY3QsIHNpbmNlIGl0
IHBvaW50cyBhdCBvdXIgYnVmZmVyLgpAQCAtMTM4LDcgKzEzOCw3IEBAIGlubGluZSBib29sIEpT
QWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBK
U0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQWN0aXZhdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogCkBAIC0xNTMsOCAr
MTUzLDggQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQotICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVP
YmplY3QgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duUHJvcGVydHlOYW1lcwotICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworICAgIC8vIFNraXAgdGhlIEpTVmFyaWFibGVPYmplY3QgaW1wbGVtZW50YXRpb24gb2Yg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVz
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc0R5bmFtaWNT
Y29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogCiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC05NSw3ICs5
NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemUo
KTsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplSW5CeXRlcygpOwogCi0gICAgICAg
IFN0b3JhZ2VCYXJyaWVyIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiBy
ZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVy
cyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBtX3Jl
Z2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4g
YSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3Rl
ciBmaWxlLgogICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkQXJnczsKICAgICAgICAgdW5z
aWduZWQgbV9udW1DYXB0dXJlZFZhcnMgOiAyODsKICAgICAgICAgdW5zaWduZWQgbV9pc1Rvcm5P
ZmYgOiAxOwpAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmb3Ig
KGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAgICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKIAotICAgICAgICBtX3Jl
Z2lzdGVyQXJyYXkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ2lzdGVyQXJyYXkpOworICAgICAg
ICBtX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBtX3JlZ2lzdGVycyA9
IHJlZ2lzdGVyczsKICAgICAgICAgbV9pc1Rvcm5PZmYgPSB0cnVlOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9w
LmNvbSkKICAqCkBAIC0yNCwxMyArMjQsMTcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAKICNp
bmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNp
bmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJQcm9wZXJ0
eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ1LDQ4
MCArNDksMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpT
QXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92
ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBt
YXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3Vs
YXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAg
ICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRo
IG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCBy
ZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFs
dWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRo
aXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5z
aWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNl
cyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0v
LyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUg
YXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVY
KSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0v
LyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2ls
bCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdo
ZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVk
IGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNw
YXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0v
LyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9W
RUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0
aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRo
ZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVj
dG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5E
ZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8v
ICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5E
RVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNl
IGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24g
YmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1
Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cu
ICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkg
KwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0
IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0j
ZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgw
eEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2Ug
dmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdp
dGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5v
dCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1B
WF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVO
IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUK
LS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3Ro
IChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0g
ICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVu
Z3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBG
SVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZl
Y3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRp
Y2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3Iu
Ci0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJl
IGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwu
IElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJy
YXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUg
c2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwot
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxh
c3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZl
Y3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4g
bGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11
bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCi1zdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAg
IGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgbWVzc2Fn
ZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgIUNIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
Ci0KLWlubGluZSB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVj
a1R5cGUpCitCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkK
IHsKLX0KLQotI2VuZGlmCi0KLXZvaWQgSlNBcnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gQkFTRV9WRUNUT1JfTEVOOwot
ICAgIHVuc2lnbmVkIGluaXRpYWxTdG9yYWdlU2l6ZSA9IHN0b3JhZ2VTaXplKGluaXRpYWxWZWN0
b3JMZW5ndGgpOwotCi0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxTdG9yYWdlU2l6ZSwgJm5ld1N0b3Jh
Z2UpKQotICAgICAgICBDUkFTSCgpOwogICAgIAotICAgIG1fc3RvcmFnZSA9IHN0YXRpY19jYXN0
PEFycmF5U3RvcmFnZSo+KG5ld1N0b3JhZ2UpOwotICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluaXRpYWxMZW5ndGg7Ci0g
ICAgbV92ZWN0b3JMZW5ndGggPSBpbml0aWFsVmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgMCwgMCwgdHJ1ZSwgSW5kZXhpbmdI
ZWFkZXIoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpbml0aWFsTGVuZ3RoKTsKKyAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoMCk7CisgICAg
c3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yID0gMDsKICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+
bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOworICAgIHN0b3JhZ2UtPm1faW5pdGlh
bGl6YXRpb25JbmRleCA9IDA7CisgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlv
biA9IDA7CiAjZW5kaWYKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSog
SlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAg
Ly8gQ2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVj
dG9yLgotICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0g
bWF4KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlh
bFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2
b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0
ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3
U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBt
X3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9
IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
ID0gaW5pdGlhbExlbmd0aDsKLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9z
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNv
bXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhl
IHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0g
ICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhp
c09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0g
ICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5
KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAg
IGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkg
PSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNp
dHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgo
Y2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkg
PSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXks
IHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRk
UmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50
cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0
ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAg
IC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5k
IHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmln
aHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQu
aXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShy
ZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAm
IEFjY2Vzc29yKSkgewotICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBK
U1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFjY2Vzc29y
LmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRl
cihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0gICAgICAg
IGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRl
ci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgY2Fs
bChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwotfQotCi1p
bmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgUHV0RGlyZWN0SW5k
ZXhNb2RlIG1vZGUpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0g
ICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQot
ICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRk
IHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhp
cyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNp
YmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3Zl
IGFnYWluLgotICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiBy
ZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJl
bW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUg
PT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVu
dHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFy
cmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFy
cmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZ
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dl
dHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90
LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRy
eTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxp
bmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5
KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAg
IEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVy
KCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFz
R2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0
ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUg
U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lk
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBp
dCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBl
bmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNw
YXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlz
LCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17
Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7
Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAo
IW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAg
bWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0
b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBt
YXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0
cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3Rv
cmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0
b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0g
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4o
bmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFn
ZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAg
ICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3Zl
Y3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAg
IGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3Jp
cHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAg
SlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNl
bnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAg
ICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAg
IEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwot
ICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0g
ICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAg
ICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsK
LSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAg
ICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3Ip
OwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9y
KCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUu
MSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7
Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2Un
cmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJp
YnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAg
Ly8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBh
dHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAg
ICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBh
IHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRp
b24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RU
aHJvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmds
b2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQobWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAg
IC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5l
ZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3Vy
cmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAg
ICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2Ny
aXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAg
ICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVd
XSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwot
ICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5
Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVl
LgotICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0
eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAg
b2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJh
YmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVk
IGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJv
cGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAv
LyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0
czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250
RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0g
ICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVs
dHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAg
ICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNj
IGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVz
YyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4g
RGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJy
ZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgot
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJy
ZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRv
KGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlm
ICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYg
dGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAo
ZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFi
bGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOwotICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVy
YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZp
ZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNo
IG90aGVyLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1
cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwot
ICAgIH0KLQotICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwg
dGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlw
dG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0Rh
dGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlm
ZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRv
cigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5
LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHku
Iik7Ci0gICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMg
dHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20g
YQotICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4g
UHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCY
cwotICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0
bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5
LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBh
biBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQ
cmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhz
IFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRh
RGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAg
ICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5h
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVu
Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3Jp
dGFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndy
aXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAg
ICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2Yg
RGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tW
YWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
ICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRh
YmxlLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNl
dHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRy
dWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Us
IHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAg
ICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBp
cyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlz
IGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAm
JiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAg
ICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1d
KSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9u
ZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CiAKIHZvaWQgSlNBcnJh
eTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQpAQCAt
NTI3LDkgKzc0LDkgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdAog
ICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBB
U1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMCwz
OCArMTc3LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QKICAg
ICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgogICAg
ICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBh
bmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUu
CiAgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgotICAgICAgICByZXR1cm4gYXJyYXktPmRlZmlu
ZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRp
b24pOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKLX0K
LQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAg
SlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYgKGkgPj0g
c3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3Qp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0
LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFy
c2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9
IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAg
ICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0
eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBhcnJheS0+SlNPYmpl
Y3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIsMTAgKzE5MSw2IEBAIGJvb2wgSlNBcnJh
eTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCBzbG90KTsKLQogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4NywyNiArMjAyLDYgQEAgYm9vbCBKU0FycmF5
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0g
ICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHRo
aXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAodmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0
KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1f
c3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91
bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAgLTcxNCwxMSArMjA5
LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogdm9pZCBKU0Fy
cmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBK
U0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25l
ZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2
YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAg
ICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CkBAIC03MzMs
MTk2ICsyMjMsOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAg
ICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQot
ewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAg
IHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHN0b3Jl
IHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsK
LQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5l
Y2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBsZW5ndGgg
PSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYg
KCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3Qs
IHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDJeMzItMSAtIHRoaXMgaXMgbm90IGFu
IGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFuZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxh
ciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwotICAgICAgICB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
LgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7
Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0g
ICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2Yg
dGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAg
ICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNl
VmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1
cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50
ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAg
IEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0
aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAg
ICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0
aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0
cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNz
ISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVk
LCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0
ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1h
cChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
ICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVu
Z3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgp
IHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAg
IH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVy
IHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0gICAgLy8gV2Ugd2lsbCBjb250aW51ZSAg
dG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQg
YmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KLSAgICB1bnNpZ25lZCBudW1W
YWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgp
OwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3Rvcihs
ZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5n
bG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwg
dmFsdWUsIHNob3VsZFRocm93KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJl
cmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZh
bHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwot
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFs
bG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8g
dGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3Rv
cltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwot
fQotCi1ib29sIEpTQXJyYXk6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2Rl
IG1vZGUpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91
dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVu
Z3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdl
IGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXAp
KSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxk
IGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAu
Ci0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0
ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVu
Z3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAv
LyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBh
bmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBp
bmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAv
LyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJl
YWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9w
ZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAgIGFs
bG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBp
LCB2YWx1ZSwgbW9kZSk7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vz
c2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAo
aSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYg
bGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5k
ZXhMaWtlUHV0RGlyZWN0KSB7Ci0gICAgICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVj
dEluZGV4U2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
Ci0gICAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gaSArIDE7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIH0KLQotICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNp
bmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCi0g
ICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2Rl
IGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBm
YWlscy4KLSAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAh
aXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNy
ZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgbW9kZSk7Ci0KLSAgICAv
LyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251
bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFs
bCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFw
LgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAg
ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBp
bnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2
ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAg
ICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTkzMCwzNSArMjMzLDYgQEAgYm9vbCBKU0FycmF5OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotYm9vbCBKU0FycmF5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2Vs
bCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBN
QVhfQVJSQVlfSU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFn
ZTsKLSAgICAKLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVh
cigpOwotICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0
LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShp
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29y
dChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIHVuc2lnbmVkIGRhID0gKnN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkKj4oYSk7CkBAIC05NjYsMTI3ICsyNDAsMjYgQEAgc3Rh
dGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEgPiBk
YikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBcnJheTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7Ci0gICAg
Ly8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZv
ciBldmVyeSBpbnRlZ2VyCi0gICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFy
Z2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAotICAgIC8vIHdoaWNoIGFs
bW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5h
bWVBcnJheS4KLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3Rv
cmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pm1fbGVuZ3RoLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RvcmFn
ZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGkpKTsKLSAgICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IGtleXM7Ci0gICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsK
LSAgICAgICAgCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQu
YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBxc29y
dChrZXlzLmJlZ2luKCksIGtleXMuc2l6ZSgpLCBzaXplb2YodW5zaWduZWQpLCBjb21wYXJlS2V5
c0ZvclFTb3J0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGtleXNbaV0pKTsKLSAgICB9CiAKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi1BTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTQXJyYXk6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQot
ewotICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
OwotCi0gICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heEluaXRM
ZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwgMTAwMDAwVSk7Ci0KLSAgICBpZiAoZGVz
aXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1h
eEluaXRMZW5ndGg7Ci0gICAgZWxzZSBpZiAoIW1fdmVjdG9yTGVuZ3RoKQotICAgICAgICBpbmNy
ZWFzZWRMZW5ndGggPSBtYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86Ci0gICAgICAgIC8v
ICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7Ci0gICAgICAgIC8v
IG9yOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25lZCljZWlsKG5ld0xl
bmd0aCAqIDEuNSkpOwotICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHByb25lIHRvIGludGVy
bmFsIG92ZXJmbG93LgotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNpcmVkTGVuZ3RoICsg
KGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOwotICAgIH0KLQotICAg
IEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7Ci0KLSAgICBsYXN0QXJy
YXlTaXplID0gbWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOwotCi0gICAg
cmV0dXJuIG1pbihpbmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwot
fQotCi1ib29sIEpTQXJyYXk6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgbmV3TGVuZ3RoKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVh
dmVzIHRoZSBhcnJheSBpbiBhbiBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVz
ZSBpdCBkb2VzIG5vdCBtb3ZlIGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCi0gICAg
Ly8gdG8gdGhlIHZlY3Rvci4gQ2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1
c2UgdGhleSBjYW4gZG8gaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICBpZiAobmV3TGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV92ZWN0b3JMZW5ndGg7Ci0gICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxl
bmd0aCk7Ci0gICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3Ro
KG5ld0xlbmd0aCk7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0
eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgotICAgIGlmIChMSUtFTFko
IW1faW5kZXhCaWFzKSkgewotICAgICAgICB2b2lkKiBuZXdTdG9yYWdlID0gc3RvcmFnZS0+bV9h
bGxvY0Jhc2U7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9y
YWdlKCZuZXdTdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpLCBzdG9yYWdlU2l6ZShu
ZXdWZWN0b3JMZW5ndGgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBz
dG9yYWdlID0gbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1N0b3JhZ2UpKTsKLSAgICAgICAgbV9zdG9yYWdlLT5tX2Fs
bG9jQmFzZSA9IG5ld1N0b3JhZ2U7Ci0gICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlKTsKLQotICAgICAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBzb21lLCBi
dXQgbm90IGFsbCBvZiB0aGUgcHJlY2FwYWNpdHkuIEF0b21pYyBkZWNheSwgJiBjYXBwZWQgdG8g
bm90IG92ZXJmbG93IGFycmF5IGxlbmd0aC4KLSAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBt
aW4obV9pbmRleEJpYXMgPj4gMSwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG5ld1ZlY3Rv
ckxlbmd0aCk7Ci0gICAgLy8gQ2FsY3VsYXRlIG5ldyBzdG9hcmdlIGNhcGNpdHksIGFsbG93aW5n
IHJvb20gZm9yIHRoZSBwcmUtY2FwYWNpdHkuCi0gICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFj
aXR5ID0gbmV3VmVjdG9yTGVuZ3RoICsgbmV3SW5kZXhCaWFzOwotICAgIHZvaWQqIG5ld0FsbG9j
QmFzZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0
b3JhZ2VTaXplKG5ld1N0b3JhZ2VDYXBhY2l0eSksICZuZXdBbGxvY0Jhc2UpKSAgICAKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1f
aW5kZXhCaWFzIHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0g
ICAgQVNTRVJUKG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYg
KE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJp
YXMpOwotCi0gICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgbV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8QXJyYXlTdG9yYWdlKj4ocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4q
PihuZXdBbGxvY0Jhc2UpICsgbV9pbmRleEJpYXMpOwotCi0gICAgLy8gQ29weSB0aGUgQXJyYXlT
dG9yYWdlIGhlYWRlciAmIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHZlY3Rvci4KLSAgICBtZW1t
b3ZlKG1fc3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSk7Ci0KLSAg
ICAvLyBGcmVlIHRoZSBvbGQgYWxsb2NhdGlvbiwgdXBkYXRlIG1fYWxsb2NCYXNlLgotICAgIG1f
c3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29t
IGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2ZXMgdGhlIG5ldyBzcGFjZSB1bmNsZWFyZWQuCiBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVk
IHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KLSAgICBBU1NFUlQoY291bnQgPiBtX2luZGV4Qmlhcyk7
CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCk7Cisg
ICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVTaXplKCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAg
Ly8gSWYgbm90LCB3ZSBzaG91bGQgaGF2ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4K
KyAgICBBU1NFUlQoY291bnQgPiBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CiAKICAgICAvLyBTdGVw
IDE6CiAgICAgLy8gR2F0aGVyIDQga2V5IG1ldHJpY3M6CkBAIC0xMDk1LDggKzI2OCw4IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyAgKiBjdXJyZW50
Q2FwYWNpdHkgLSB3aGF0IGlzIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHZlY3RvciwgaW5jbHVk
aW5nIGFueSBwcmUtY2FwYWNpdHkuCiAgICAgLy8gICogZGVzaXJlZENhcGFjaXR5IC0gaG93IGxh
cmdlIHNob3VsZCB3ZSBsaWtlIHRvIGdyb3cgdGhlIHZlY3RvciB0byAtIGJhc2VkIG9uIDJ4IHJl
cXVpcmVkVmVjdG9yTGVuZ3RoLgogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9s
ZW5ndGg7Ci0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihtX3ZlY3Rvckxlbmd0
aCwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
LCBsZW5ndGgpOwogICAgIEFTU0VSVCh1c2VkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpOwogICAgIC8vIENoZWNrIHRoYXQgcmVxdWlyZWQgdmVjdG9yIGxlbmd0aCBp
cyBwb3NzaWJsZSwgaW4gYW4gb3ZlcmZsb3ctc2FmZSBmYXNoaW9uLgogICAgIGlmIChjb3VudCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSB1c2VkVmVjdG9yTGVuZ3RoKQpAQCAtMTEwNCw4
ICsyNzcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAg
dW5zaWduZWQgcmVxdWlyZWRWZWN0b3JMZW5ndGggPSB1c2VkVmVjdG9yTGVuZ3RoICsgY291bnQ7
CiAgICAgQVNTRVJUKHJlcXVpcmVkVmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpOwogICAgIC8vIFRoZSBzdW0gb2YgbV92ZWN0b3JMZW5ndGggYW5kIG1faW5kZXhCaWFz
IHdpbGwgbmV2ZXIgZXhjZWVkIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCi0gICAgQVNTRVJU
KG1fdmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggJiYgKE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggLSBtX3ZlY3Rvckxlbmd0aCkgPj0gbV9pbmRleEJpYXMpOwotICAg
IHVuc2lnbmVkIGN1cnJlbnRDYXBhY2l0eSA9IG1fdmVjdG9yTGVuZ3RoICsgbV9pbmRleEJpYXM7
CisgICAgQVNTRVJUKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggJiYgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSkgPj0gc3RvcmFnZS0+bV9pbmRleEJpYXMpOworICAgIHVuc2lnbmVkIGN1cnJlbnRD
YXBhY2l0eSA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgc3RvcmFnZS0+bV9pbmRleEJpYXM7
CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9uIG9mIGRlc2lyZWRDYXBhY2l0eSB3b24ndCBvdmVyZmxv
dywgZHVlIHRvIHRoZSByYW5nZSBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgogICAgIHVu
c2lnbmVkIGRlc2lyZWRDYXBhY2l0eSA9IG1pbihNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILCBt
YXgoQkFTRV9WRUNUT1JfTEVOLCByZXF1aXJlZFZlY3Rvckxlbmd0aCkgPDwgMSk7CiAKQEAgLTEx
MTYsMTAgKzI4OSwxMSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xv
CiAgICAgdW5zaWduZWQgbmV3U3RvcmFnZUNhcGFjaXR5OwogICAgIC8vIElmIHRoZSBjdXJyZW50
IHN0b3JhZ2UgYXJyYXkgaXMgc3VmZmljaWVudGx5IGxhcmdlIChidXQgbm90IHRvbyBsYXJnZSEp
IHRoZW4ganVzdCBrZWVwIHVzaW5nIGl0LgogICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgPiBkZXNp
cmVkQ2FwYWNpdHkgJiYgaXNEZW5zZUVub3VnaEZvclZlY3RvcihjdXJyZW50Q2FwYWNpdHksIHJl
cXVpcmVkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICBuZXdBbGxvY0Jhc2UgPSBzdG9yYWdlLT5t
X2FsbG9jQmFzZTsKKyAgICAgICAgbmV3QWxsb2NCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHN0cnVj
dHVyZSgpKTsKICAgICAgICAgbmV3U3RvcmFnZUNhcGFjaXR5ID0gY3VycmVudENhcGFjaXR5Owog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShzdG9yYWdlU2l6ZShkZXNpcmVkQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkKKyAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFj
aXR5LCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7CisgICAg
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdTaXplLCAmbmV3
QWxsb2NCYXNlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbmV3U3RvcmFn
ZUNhcGFjaXR5ID0gZGVzaXJlZENhcGFjaXR5OwogICAgIH0KQEAgLTExMzIsNDUgKzMwNiw0MCBA
QCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gSWYgaXQg
ZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3VudCB0aGF0IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFu
IGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQogICAgIC8vIHZlY3RvciB3aXRoIGhhbGYgdGhlIHBv
c3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3VzbHkuCiAgICAgdW5zaWduZWQgcG9zdENhcGFjaXR5
ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgbV92ZWN0b3JMZW5ndGgpIHsKKyAgICBpZiAobGVuZ3Ro
IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKICAgICAgICAgLy8gQXRvbWljIGRlY2F5LCAr
IHRoZSBwb3N0LWNhcGFjaXR5IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gd2hhdCBpcyBhdmFpbGFi
bGUuCi0gICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigobV92ZWN0b3JMZW5ndGggLSBsZW5ndGgp
ID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkg
Pj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWlyZWRWZWN0b3JMZW5ndGgpOwogICAgICAg
ICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24s
IHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVjZWQuCi0gICAgICAgIEFTU0VSVChuZXdB
bGxvY0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jhc2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0
b3JMZW5ndGggLSBsZW5ndGgpOwotICAgIH0KLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWly
ZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9y
YWdlQ2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6
Ci0gICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9u
cywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgotCi0gICAg
Ly8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBt
ZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQotICAgIC8vIHRvIHRoZSByaWdodCAo
c2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0
cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291
bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVz
ZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdl
U2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/
Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAg
ICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAg
ICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7CisgICAgICAgIEFTU0VS
VChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVjdHVyZSgpKSB8fCBwb3N0Q2Fw
YWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCk7CiAgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9z
dENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0
eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0
dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIG5ld0luZGV4QmlhcywgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgCisgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNl
ZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdI
ZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICAKKyAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAg
ICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4Qmlh
czsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKIAogICAgIHJldHVybiB0
cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdl
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVy
IHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFT
U0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJU
KGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewog
ICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBp
ZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OwpAQCAtMTE5Nyw3ICszNjYsNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9y
IGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9
IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0
dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUo
aXQpOwpAQCAtMTIwNiwxNCArMzc1LDE0IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoa2V5c1tpXSk7
CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAvLyBEZWxldGUgcHJvcGVydGllcyBm
cm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
bGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewogICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2YWx1ZVNsb3Q7CkBAIC0xMjIy
LDUzICszOTEsNjUgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+bV9sZW5ndGggPSBuZXdMZW5ndGg7Cisg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7CiAKLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAg
IGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgIGlmICghaXNM
ZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNMZW5ndGhX
cml0YWJsZSgpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOwot
ICAgIGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOwotICAgICAgICBp
ZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7Ci0gICAg
ICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBsZW5n
dGggLSAxOworICAgICAgICBpZiAoaW5kZXggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpbmRleF07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAg
ICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVNs
b3QuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3Jp
dGFibGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4OwotICAgICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7CisgICAgICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsKKyAgICAgICAgICAgICAgICBjaGVja0luZGV4
aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFy
Z3VtZW50IGluZHguCi0gICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuIik7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBMZXQgZWxlbWVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBpbmR4LgorICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8g
Q2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBp
bmR4IGFuZCB0cnVlLgorICAgICAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBl
eGVjLCBpbmRleCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJVbmFibGUg
dG8gZGVsZXRlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2FsbCB0aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwgaW5keCwgYW5kIHRydWUuCisgICAgICAgIHNl
dExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7CisgICAgICAgIC8vIFJldHVybiBlbGVtZW50Lgor
ICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgLy8gQ2FsbCB0
aGUgW1tQdXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyAibGVuZ3RoIiwg
aW5keCwgYW5kIHRydWUuCi0gICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKLSAgICAv
LyBSZXR1cm4gZWxlbWVudC4KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CiAKIC8vIFB1c2ggJiBwdXRJbmRleCBhcmUgYWxtb3N0IGlkZW50aWNhbCwgd2l0
aCB0d28gc21hbGwgZGlmZmVyZW5jZXMuCkBAIC0xMjc2LDYzICs0NTcsNzcgQEAgSlNWYWx1ZSBK
U0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBv
ZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBl
cnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3
YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGxlbmd0aCA8IG1fdmVjdG9yTGVu
Z3RoKSB7Ci0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0
aCArIDE7Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47CisgICAgY2hlY2tJbmRleGluZ0Nv
bnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIDAsIHZhbHVlLCB0cnVlLCBjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSkpOworICAgICAgICBicmVhazsKICAgICB9
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIAotICAg
IC8vIFB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3Bl
cnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCi0gICAgaWYgKFVOTElLRUxZKHN0b3JhZ2Ut
Pm1fbGVuZ3RoID09IDB4RkZGRkZGRkZ1KSkgewotICAgICAgICBtZXRob2RUYWJsZSgpLT5wdXRC
eUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPm1fbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAg
ICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAg
ICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGlu
IHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAo
bGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tJbmRleGlu
Z0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9w
ZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoVU5MSUtFTFkoc3Rv
cmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAgICAgICBtZXRob2RUYWJs
ZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1
ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEg
c3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxp
ZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
IC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRl
eC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKKyAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQog
fQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQp
Citib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb3Vu
dCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgCi0gICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFn
ZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9y
IGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVy
aWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChvbGRMZW5ndGggIT0gc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAob2xk
TGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VJbmRleGlu
Z01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFvbGRMZW5ndGgpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3RvcmFn
ZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25lZClj
b3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0b3JM
ZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxlbmd0
aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBzdG9y
YWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBzdG9y
YWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KLSAgICAgICAgICAg
IG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoKSB7CisgICAg
ICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUoKSwgY291
bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTM0MSw1OSArNTM2LDMwIEBAIGJvb2wgSlNBcnJh
eTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5z
aGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAogYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMgb3Ig
aXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2VuZXJp
YyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQorICAgIGlmIChsZW5ndGgg
IT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW5kZXhCaWFzID49IGNvdW50
KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAgICAgICBjaGFyKiBuZXdCYXNl
U3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpIC0gY291bnQgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFn
ZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0gICAgICAgIG1f
dmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBj
b3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNo
aWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50Owor
ICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkg
KyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFn
KTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9zdG9yYWdl
KSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0aGlzT2JqZWN0LT5sZW5n
dGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9z
dG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNl
OwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgg
KyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVjdG9yLT5zbG90KCksIHRo
aXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAoYmFzZVN0b3JhZ2UgIT0g
dGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAgICAgICAgICAgdGhpc09i
amVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4oc3Rh
dGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNPYmpl
Y3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9h
bGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKQotICAg
ICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0YXRpYyBpbnQgY29tcGFy
ZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAgIGRv
dWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsKQEAg
LTE0MTAsMTEyICs1NzYsMTM3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFT
b3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNh
bGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01v
ZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21w
YWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQorICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMg
PSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIXN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGFsbFZhbHVlc0Fy
ZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTs7CisgICAg
ICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBib29sIGFsbFZhbHVl
c0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsK
KyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMs
IGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3Rl
ciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdl
c29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAgICAg
Ly8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZl
IHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICAgICAg
CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICghYWxsVmFsdWVzQXJlTnVt
YmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMg
ZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgIC8vIGFsc28gZG9u
J3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2
aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1
YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwot
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQg
SlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1v
ZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21w
YWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0
cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29y
dCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1l
bnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVz
IGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3Rz
IHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1l
dGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJl
c3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4K
LQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVz
aFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7
Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRp
dmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVl
cyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAv
LyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZh
bHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7
Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVhcCh0
aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZh
c3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUg
TyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0aW5n
IEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8g
aXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAvLyBUaGlz
IGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNv
bXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgICAgICAv
LyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21l
IG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgICAg
ICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1h
a2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
OworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVz
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1
ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAgaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlz
UHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGUg
Zm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2
YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4
Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25k
ID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkg
c3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNv
cnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4p
LgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwg
c2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCks
IHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwor
ICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQo
dmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBj
b21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhN
RTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJs
ZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUg
c29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0g
ICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmlu
Z1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTog
VGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBz
b3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxl
IHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0Lgor
ICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVl
U3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAg
IC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFy
cmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFu
ZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rv
ckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VW
ZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBm
dW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdl
LAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBu
dW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdElu
Y2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7
CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0
Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogc3Ry
dWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTcsMjUzICs3ODgsMjU3IEBA
IHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBKU0FycmF5
Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBl
IGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNw
YXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9y
IGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxl
ZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAgIC8vIGlm
IGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2xlbmd0
aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1f
dmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3Ro
ICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAwKTsKLQot
ICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVlPEFWTFRy
ZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5v
dWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsK
LSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlv
bjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwot
ICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVk
Q2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAg
IEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlm
aWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0g
ICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRy
ZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51
bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmlu
ZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcg
YWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0
b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYu
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVt
RGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmlu
ZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0
aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0g
YnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEg
bGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0aCgp
IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFn
ZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQg
bm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/IHN0
b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJl
ZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0
IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4
ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9
IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2Fs
bFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2Fs
bERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jv
dyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
SlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0
cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlv
biksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
cy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3Is
IG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1
bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVm
aW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBp
Z25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNl
cnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51bURl
ZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAgICAgICAg
ICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2
OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVk
KCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251
bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVt
RGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBu
ZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAg
IG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2Vk
VmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhv
bGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3Ro
ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmlu
ZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIG5l
d1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNl
ZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJn
ZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAgaWYgKChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52
YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAgdHJlZS5p
bnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVm
aW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rp
b24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBi
ZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAgICAgICAg
CisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9y
IGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0K
LSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAgLy8gUHV0
IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
RGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsK
KyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFT
U0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQot
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGgg
b2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRo
ZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRv
IG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwot
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQ
dXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQg
dmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAg
ICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lz
dGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdM
aXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+
bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5n
dGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsr
aSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5
Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
dWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkp
OwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9y
ICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZl
Y3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBt
aW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwg
dmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9
IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNh
bGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNB
cnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAg
IEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwor
ICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBudW1E
ZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAg
IGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4g
MDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsK
KyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVk
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0g
ICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0
aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVk
KytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
LQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
LSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmlu
ZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5n
dGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAg
IHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQot
dm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUp
Ci17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJU
KCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9y
YWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNT
RVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9y
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkg
ewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAg
ICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAg
ICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0
IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVj
aykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBu
dW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
ICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYg
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJy
YXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAg
ICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAg
ICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3Ro
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytd
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFs
dWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJU
KG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5m
aXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+
c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNo
ZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5k
ZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRl
ZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEs
MTQyICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNp
bmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZW51bSBQdXREaXJlY3RJbmRleE1v
ZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1dERpcmVjdEluZGV4U2hvdWxkTm90
VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsKLQotICAgIHN0cnVjdCBTcGFyc2VB
cnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVk
ZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRy
eSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSos
IEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7
Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAgICBK
U1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAg
ICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhh
c2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90
PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAs
Ci0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVhZE9u
bHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6
aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7
Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3Mo
Tm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0K
LSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFy
c2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZs
YWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGxl
bmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAm
IExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0aElz
UmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8
RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAg
ICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0Fy
cmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSk7Ci0gICAgICAgIEFk
ZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hv
dWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBm
aW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0
KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsg
fQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMg
b2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5l
bmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0Vt
cHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2Vu
ZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFw
OwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFj
aXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEg
dmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250
YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9y
LiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBn
ZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1w
b3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0
b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVy
YXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2lu
ZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1
ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7
IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQg
bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50
ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBv
aW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0
b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUg
YSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1f
aW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0g
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0
aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVl
c0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jh
c2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9j
QmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAg
ICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdh
bGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3Rv
cmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxp
Y2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAg
ICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9u
IG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5LDI2ICs1NywxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
LSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBt
ZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0
ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyAg
LSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJvcGVydGllcyBp
ZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBtb2RlICh0aGUg
ZGVmYXVsdCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRo
IGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0
IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBt
b2RlID0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldElu
ZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
bW9kZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRv
IHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hB
cnJheS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wg
dGhyb3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIwMiwxNDIgKzc1LDg0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3Vu
dCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwg
bV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1Zh
bHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChj
YW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQg
aSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2Ug
KnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3Ro
KQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAg
ICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4
IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFs
aXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0
IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAv
LyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVy
IG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNT
RVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5l
IHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55
IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJl
ciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0g
ICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3Jh
Z2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5t
X2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVy
biBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZv
aWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0
aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3Jh
Z2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlm
Zl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0ds
b2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFs
dWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VP
clplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxl
bmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3Jp
dGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0gICAgICAgIHZvaWQgcHV0RGVzY3Jp
cHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwg
UHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAgICBib29sIGRlZmluZU93bk51bWVyaWNQ
cm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0
aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxE
YXRhJik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCi0gICAgICAgIHZv
aWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlKTsKLQot
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0
aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0ds
b2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBj
b21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9OwogCi0gICAgICAgIGVudW0g
Q29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lD
aGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBs
ZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBu
dW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAg
ICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNw
YXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOworICAgIGlubGluZSBC
dXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0
cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5jbGVhcigpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gMDsKKyNlbmRpZgorICAgICAgICByZXR1cm4gYnV0dGVyZmx5OworICAgIH0KIAot
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0gICAgICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQotICAgIH07CisgICAgQnV0dGVyZmx5KiBjcmVhdGVB
cnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpT
QXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXAp
KSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5LT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3Ro
KTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
YnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwog
ICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICBy
ZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBp
bml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgo
QkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFw
LnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJh
c2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBp
bmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAg
ICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworI2VuZGlmCisg
ICAgICAgIAorICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7CisgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBKU0FycmF5KiBhc0FycmF5
KEpTVmFsdWUpOwpAQCAtMzU2LDMwICsxNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxp
bmUgYm9vbCBpc0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFzc0luZm8o
KSA9PSAmSlNBcnJheTo6c19pbmZvOyB9CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTVmFs
dWUgdikgeyByZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pTQXJyYXkodi5hc0NlbGwoKSk7IH0KIAot
Ly8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBkZXBlbmRh
bnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93IC0gdGhl
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRoYXQgdGhl
IHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNpemVvZihB
cnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8vICh2ZWN0
b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8PSAweEZG
RkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmluZSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZGRkZGRlUg
LSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
IC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVlcyBoYXZl
IHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJv
ZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQot
I2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEggLSAxKQotICAgIGlubGluZSBzaXplX3QgSlNBcnJheTo6c3RvcmFnZVNpemUodW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLSAgICAKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVuZ3RoIDw9
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIC8vIC0gYXMgYXNzZXJ0ZWQgYWJv
dmUgLSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4KLSAgICAgICAg
c2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkgKyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpOwotICAgICAgICAvLyBBc3NlcnRpb24gdG8gZGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgaW4g
cHJldmlvdXMgY2FsY3VsYXRpb24gKHNob3VsZCBub3QgYmUgcG9zc2libGUsIHByb3ZpZGVkIHRo
YXQKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0bHkgZGVm
aW5lZCkuCi0gICAgICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgPT0gdmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkg
LSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpKTsKLSAgICAKLSAgICAgICAgcmV0dXJu
IHNpemU7Ci0gICAgfQotCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlzdCYgdmFs
dWVzKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGkKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdz
LT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXhR
dWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRD
b3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KGkpKTsKIApA
QCAtNjUsNyArNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3Rp
CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGJv
dW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdl
dEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChp
KSk7CiAKQEAgLTExMiw4ICsxMTIsOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6ZmluaXNoQ3Jl
YXRpb24oRXhlCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJsZSwgbGVu
Z3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCi0gICAgcHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyks
IERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKLSAgICBwdXREaXJlY3RBY2Nlc3Nv
cihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIsIGdsb2Jh
bE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwor
ICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIs
IGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCiB2b2lkIEpTQm91bmRGdW5jdGlvbjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBKU0NlbGw6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCiBTdHJpbmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7CiAgICAg
ICAgIH0KLQorICAgICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAgICAgU3Ry
dWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFs
aWRhdGVkR2V0KCk7IH0KICNlbmRpZgpAQCAtMTYwLDYgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBzdGF0
aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJsZQogICAg
ICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09i
amVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZQogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlz
U3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJl
Y3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBE
b250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI1NSw3ICsy
NTUsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dU
eXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vz
c29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVj
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMjg0LDcgKzI4NCw3IEBAIGJvb2wgSlNGdW5jdGlv
bjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhl
Y3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBC
YXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdl
dHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAg
ICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0
dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBKU0Z1bmN0
aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAgICBpZiAodGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9
IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Cisg
ICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVy
dHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJT
ZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTMxNiw3ICszMTYsNyBAQCBib29sIEpTRnVu
Y3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAg
IGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTM5NiwxNCArMzk2LDE0IEBAIGJvb2wgSlNGdW5jdGlv
bjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpz
RXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFCYXNlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0
QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8
IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwog
ICAgICAgICB9CiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNh
bWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJl
dHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CiAgICAgfSBlbHNl
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikgewogICAg
ICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAg
ICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHRoaXNP
YmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIo
ZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0dXJuIEJh
c2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9ICFk
ZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwg
ZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMsIHRoaXNP
YmplY3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiUGFyc2Vy
QXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMjA0LDYgKzIwNSw3IEBAIEpTR2xvYmFs
RGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICByZWdFeHBTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJvbFRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0dXJlQ2hh
aW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAKICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJs
ZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDQsNiArMjQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc2hhcmVk
U3ltYm9sVGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZUNoYWluU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VBcnJheVZh
bHVlTWFwU3RydWN0dXJlOwogCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRh
YmxlOwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBHZXR0ZXJTZXR0ZXIqIHByb3RvQWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICBwcm90b0FjY2Vzc29yLT5z
ZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhp
cywgMCwgIiIsIGdsb2JhbEZ1bmNQcm90b0dldHRlcikpOwogICAgIHByb3RvQWNjZXNzb3ItPnNl
dFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlz
LCAwLCAiIiwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7Ci0gICAgbV9vYmplY3RQcm90b3R5cGUt
PnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7
CisgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwg
RG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKTsKIAogICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsOCAr
NTE4LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIGlm
IChtX2lzQXJyYXkpIHsKICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZS4KICAgICAgICAgSlNWYWx1
ZSB2YWx1ZTsKLSAgICAgICAgaWYgKG1faXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3QuZ2V0
KCkpLT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9v
YmplY3QuZ2V0KCkpLT5nZXRJbmRleChpbmRleCk7CisgICAgICAgIGlmIChtX2lzSlNBcnJheSAm
JiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAg
ICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldEluZGV4UXVpY2ts
eShpbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
bV9vYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVjdC5nZXQoKSwgZXhlYywgaW5kZXgs
IHNsb3QpKQpAQCAtNjg0LDggKzY4NCw4IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6
d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5yZW1vdmVMYXN0KCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgp
KQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5n
ZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFy
cmF5LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGFycmF5LCBtX2V4
ZWMsIGluZGV4LCBzbG90KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTI0LDEwICsyNCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0ZVBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJKU0dsb2JhbFRoaXMuaCIKQEAgLTM4LDEyICs0MCwxOSBAQAogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRo
ZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCisvLyBhcyBhIHNp
bXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZy
b20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNU
X1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6
ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSgpOwpAQCAtODYsMjkg
Kzk1LDgwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRPdXRPZkxpbmVTdG9yYWdl
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgc2l6ZV90IHN0
b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdl
U2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgQVNTRVJUKHN0b3JhZ2VTaXplKTsK
KyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIHNpemVfdCBjYXBhY2l0eSA9IHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBhY2l0eSk7Ci0gICAgc2l6
ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9yYWdlID0gc3RvcmFnZSAt
IGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90
aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdl
Pih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKSk7Ci0gICAgICAgIFBy
b3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3RvcmFnZSArIGNhcGFjaXR5
OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1cnJlbnRUYXJnZXQgKyAx
OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IHN0b3JhZ2UgLSAxOwor
ICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhp
bmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhh
c0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7Cisg
ICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgK
KyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNo
b3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVk
RHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXpl
OyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3Vy
Y2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJl
bnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQotICAg
ICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpV
bmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhzdG9y
YWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgICAgICAqbmV3QnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgYXJyYXkgaWYgYXBw
cm9wcmlhdGUuCisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmluZ0dDKCpidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsK
KyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKGN1
cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFn
ZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTEyMiw5ICsxODIsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVT
dG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0
T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQor
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVj
dCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKQEAgLTE0Miw5ICsyMDIsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxp
bmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQor
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgp
KTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5p
bmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsy
MjEsNTAgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogICAgIHJl
dHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
UHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRp
cmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMg
bm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNs
b3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0g
c3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkg
eworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA4
LjYuMi4yCkBAIC0xNzQsNiArMjc0LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAor
ICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsK
KyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0
aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzQyLDE0NiBAQCB2b2lkIEpTT2JqZWN0
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xv
dCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisg
ICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFtZV07CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBk
YXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBp
ZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgeworICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVy
dHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2Ug
aWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNP
YmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKKworICAgIGlmICghbWFwKQorICAg
ICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gc3RvcmFnZTsKKworICAgIG1hcC0+
c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6
bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBj
aGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0
IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
IG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAg
Q1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtYXAp
OworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworfQorCit2
b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJh
eVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgb2xkVHlwZSA9PSBO
b25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAg
ICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3
QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBBU1NFUlQoIXJlc3VsdC0+bGVuZ3Ro
KCkpOworICAgIEFTU0VSVCghcmVzdWx0LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgcmVzdWx0LT5z
ZXRMZW5ndGgobGVuZ3RoKTsKKyAgICByZXN1bHQtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOworICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICByZXN1bHQtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgcmVz
dWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJlc3VsdC0+bV9pbkNvbXBhY3RJ
bml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
LCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5l
d0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERh
dGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVu
c3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXk6CisgICAg
Y2FzZSBOb25BcnJheTogeworICAgICAgICBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
MCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworICAg
ICAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCk7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTI2OSwxMCArNTEzLDE4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXQKICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5hbGxvd3NBY2Nlc3NGcm9tKGdsb2JhbE9iamVjdCwg
ZXhlYyk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSAmJiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCkgeworICAgICAgICBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgdmFsdWUsIGF0
dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CiAKQEAgLTMwNCw2
ICs1NTYsMTAgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlKiBleAogYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBpZiAoIXRoaXNPYmplY3QtPnN0
YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNG
dW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU4OCw0NSBAQCBib29sIEpTT2Jq
ZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7
CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAK
KyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+c3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
KyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzT2JqZWN0
LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
U09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtNDY1LDYgKzc1
Niw1MSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAKIHZvaWQg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CisgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBmaXJzdC4gVGhhdCBhcHBl
YXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgorICAgIC8vIEZJWE1FOiBGaWxsaW5n
IFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgor
ICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVl
ZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKKyAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1l
YW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCisgICAgc3dp
dGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9u
QXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGtleXM7CisgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
IHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQorICAgICAgICAgICAgICAg
ICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmZpcnN0KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6c29ydChrZXlzLmJlZ2lu
KCksIGtleXMuZW5kKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtl
eXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwor
dm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQorewogICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhleGVjLCBv
YmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBvYmplY3QtPnN0YXRpY0Z1
bmN0aW9uc1JlaWZpZWQoKSk7CiAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KQEAgLTUxNSw4ICs4NTEsNyBAQCB2b2lkIEpTT2JqZWN0OjpmcmVlemUoSlNHbG9iYWxE
YXRhJiBnbG9iCiAKIHZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRlbnNpb25zKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoaXNKU0FycmF5KHRoaXMpKQotICAgICAgICBhc0Fy
cmF5KHRoaXMpLT5lbnRlckRpY3Rpb25hcnlNb2RlKGdsb2JhbERhdGEpOworICAgIGVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICBpZiAoaXNFeHRlbnNpYmxlKCkp
CiAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRl
bnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSkpOwogfQpAQCAtNTczLDEx
ICs5MDgsMTEgQEAgYm9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0KEpTR2xvYmFsRGF0YQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIGxvY2F0aW9uKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7Ci0g
ICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGxvY2F0aW9u
LT5nZXQoKSktPmdldHRlcigpKSB7CisgICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9
IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdE9mZnNldChvZmZzZXQpKS0+Z2V0dGVyKCkpIHsKICAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzbG90
LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldEZvckxv
Y2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNs
b3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7CiAgICAgfSBlbHNlCkBAIC02
MDMsMjYgKzkzOCw1MjcgQEAgU3RydWN0dXJlKiBKU09iamVjdDo6Y3JlYXRlSW5oZXJpdG9ySUQo
SgogICAgIHJldHVybiBpbmhlcml0b3JJRDsKIH0KIAotUHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0
Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3ZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0
b3IpCiB7Ci0gICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKyAgICBpZiAoZGVzY3JpcHRv
ci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkK
KyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGRl
c2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRy
aWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3Jp
cHRvcikgJiB+QWNjZXNzb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCogc2V0
dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAg
ICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgc2V0
dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0
ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChn
ZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlmICgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1
dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAvLyBG
SVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVz
IGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhv
d2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVz
IHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0
ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdp
dGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAoIWRl
c2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQ
dXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7
CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJl
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisg
ICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZp
bmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBj
dXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAg
ICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJv
cGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVz
Y3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQor
ICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJs
ZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVz
CisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0
dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3
bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFs
dWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3Bl
cnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQg
UCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1l
cmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmli
ZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVs
ZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBw
cm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAg
IC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1
bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisK
KyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRv
ciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4K
KyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3Vy
cyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29t
cGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5
RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJl
bnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJy
ZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAg
ICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVy
YWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAg
IC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0
aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJp
Y0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3Vs
dHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNj
ZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBj
b252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAg
ICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhl
IGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAg
IC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNl
dCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAv
LyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVy
dCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3Bl
cnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlz
dGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0g
YW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVl
cy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWku
MS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
U2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMs
IGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYg
Y3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAg
ICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBS
ZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZh
bHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIo
KSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBv
ZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5p
aS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNh
bWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAg
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0
dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0
ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERl
c2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1
dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRo
ZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNj
cmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGUoZ2xvYmFsRGF0YSk7Cisg
ICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0
IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIHNpbmNlCi0gICAgLy8gd2Ug
bWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24uCit2b2lkIEpTT2JqZWN0Ojpk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKQoreworICAgIGlmIChBcnJheVN0b3JhZ2UqIGFycmF5
U3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpKQorICAgICAgICBhcnJheVN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQor
eworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKwor
ICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9m
IHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwor
ICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAK
LSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9vdXRPZkxpbmVTdG9y
YWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSAwOwor
ICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUg
YSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhl
IGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25h
cnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0
ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vu
c2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRo
ZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGds
b2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1f
c3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0
byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBj
YW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFy
c2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRl
eE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRo
aXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJzdCBm
b3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2ludGVy
cy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVy
dHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUg
KyAxOworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAg
ICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFi
bGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxl
KCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOwor
ICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBh
cmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRv
IGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBt
YXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9y
IGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5z
cGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJ
bkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5n
dGgpKSB7CisgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3Jh
Z2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9y
LgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBm
cm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0
aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9y
W2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAg
IC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRo
ZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAg
IAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBO
b25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9y
YWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZv
clZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAs
IDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSAr
IDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9k
ZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJy
YXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NF
UlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8fCBhdHRyaWJ1dGVzKTsKKyAgICBBU1NF
UlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIGNh
c2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KKyAgICBpZiAo
TElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJs
ZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRo
ZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7CiAgICAgCi0gICAg
bWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQcm9wZXJ0eVN0b3Jh
Z2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pICogb2xk
U2l6ZSk7CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVu
Z3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0
aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgor
ICAgICAgICBpZiAoTElLRUxZKAorICAgICAgICAgICAgICAgICFhdHRyaWJ1dGVzCisgICAgICAg
ICAgICAgICAgJiYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcikpCisgICAgICAgICAgICAgICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xv
YmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9z
dG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRv
IHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywg
b3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEg
c3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGly
ZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAgICB9CisKKyAg
ICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICBpZiAo
bW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpIHsKKyAgICAgICAgICAgIC8vIFBy
b2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAg
ICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBpZiAoIWlzRXh0
ZW5zaWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQ
dXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkg
b24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKyAgICAgICAg
bGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAg
IH0KIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwotICAgIHJldHVybiBuZXdQcm9w
ZXJ0eVN0b3JhZ2U7CisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQorICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUp
OworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwg
dXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5Owor
CisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFu
ZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0
b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0
b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3Rv
cmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJ
bmRleE1vZGUgbW9kZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBp
ZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAo
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgCisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJl
bnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRM
ZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWduZWQg
bWF4SW5pdExlbmd0aCA9IHN0ZDo6bWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAg
aWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5n
dGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQor
ICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJy
YXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVu
dCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEp
IC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVu
c2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBu
b3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYg
MSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3Ro
KTsKKworICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpT
T2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoOworICAgIAorICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJh
eToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOworICAgICAgICBs
ZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgdmVjdG9yTGVu
Z3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAg
ICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoLCBsZW5ndGgs
IGRlc2lyZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAv
LyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNp
c3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3Bh
cnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2Nv
dW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisg
ICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNT
RVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVu
Z3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2Ug
LSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2Vz
IHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJm
bHk7CisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWlj
IGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2ln
bmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFs
RGF0YSwKKyAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMs
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAo
IW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fYnV0dGVy
Zmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOwor
fQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBpZiAodHlwZSA9PSBT
b3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFzdG9yYWdlLT5tX3NwYXJzZU1h
cCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAodHlw
ZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICB2YWx1ZS5p
c1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxv
Y2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hlY2spCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yID09IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA8PSBzdG9y
YWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NwYXJzZVZhbHVlTWFw
LT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPj0g
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtl
bHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKworQnV0dGVyZmx5KiBK
U09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKG5ld1NpemUgPiBv
bGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3Qg
cmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQorICAgIC8vIGNhcGFjaXR5LCBz
aW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNl
LgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1Byb3BlcnR5U3RvcmFnZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKQEAgLTYzMCwxMCArMTQ2Niw0NiBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IDA7CiAgICAgSlNDZWxs
KiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGNl
bGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkKKyAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3Qt
PmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9m
ZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBz
d2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBO
b25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGkgPCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2Ut
Pm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBtYXAtPm5v
dEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaXQt
PnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQpAQCAtNjU4LDcgKzE1MzAsNyBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVj
LT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgICAgICAg
ICAgaWYgKG9sZERlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQogICAgICAgICAgICAgICAgIGFj
Y2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLnNldHRl
ck9iamVjdCgpKTsKLSAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNz
b3IpOworICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgSlNWYWx1ZSBuZXdWYWx1ZSA9IGpzVW5kZWZp
bmVkKCk7CkBAIC02ODMsMTAgKzE1NTUsMTkgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZQogICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgp
KQogICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVz
Y3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CiAKLSAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8
IEFjY2Vzc29yKTsKKyAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHVuc2ln
bmVkIGFzSW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChhc0luZGV4ID09
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICBwdXREaXJl
Y3RJbmRleChleGVjLCBhc0luZGV4LCB2YWx1ZSk7Cit9CisKIGNsYXNzIERlZmluZU93blByb3Bl
cnR5U2NvcGUgewogcHVibGljOgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUoRXhlY1N0YXRl
KiBleGVjKQpAQCAtNzA0LDI2ICsxNTg1LDI2IEBAIHByaXZhdGU6CiAgICAgSlNHbG9iYWxEYXRh
JiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikK
K2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJhY2sgb24gdGhlIGdsb2JhbGRh
dGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5IERlZmlu
ZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBh
cmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0
cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFibGUgKGku
ZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZvciBub3cs
IHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgogICAgIERlZmluZU93blBy
b3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmV3
IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxseQogICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7
CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAgICAvLyB1bmxlc3MgZXh0ZW5z
aW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAoIW9iamVjdC0+aXNFeHRlbnNpYmxlKCkp
IHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHRocm93
RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBp
cyBub3QgZXh0ZW5zaWJsZS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgICAgIG9s
ZERlc2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBwdXRE
ZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlw
dG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiBwdXREZXNj
cmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5h
dHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9y
LmlzRW1wdHkoKSkKQEAgLTc0OSw4ICsxNjMwLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBj
aGFuZ2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQu
YXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERlc2Ny
aXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0
dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2NDMsOCBAQCBib29sIEpT
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFj
Y2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBj
dXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhl
YywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhp
cywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlk
aW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcg
dGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQs
OCArMTY2NSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikg
JiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdD
dXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERl
c2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQog
CiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBh
Y2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2ODMsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vz
c29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0
ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2OTMsMzcgQEAgYm9v
bCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0
ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0
KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9i
amVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sK
KyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9w
ZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAg
IC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0
IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNz
aW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVj
dCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExl
bgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEu
CisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1d
IGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRl
c2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4g
dHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3Qt
PmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25J
bmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRp
b24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAjZGVmaW5l
IEpTT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJBcnJheUNvbnZl
bnRpb25zLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5
LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMu
aCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eVNsb3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRl
ICJQdXREaXJlY3RJbmRleE1vZGUuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKIAot
I2luY2x1ZGUgIlN0b3JhZ2VCYXJyaWVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJT
cGFyc2VBcnJheVZhbHVlTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTc5LDYgKzg0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBBY2Nlc3NvciAgICAgPSAxIDw8IDUsICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIK
ICAgICB9OwogCisgICAgQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9B
U1NFUlQoUmVhZE9ubHkgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBSZWFkT25seV9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RW51bSA8
IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKERvbnREZWxldGUgPCBGaXJzdEludGVybmFs
QXR0cmlidXRlLCBEb250RGVsZXRlX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwor
ICAgIENPTVBJTEVfQVNTRVJUKEZ1bmN0aW9uIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRnVu
Y3Rpb25faXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NF
UlQoQWNjZXNzb3IgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19G
aXJzdEludGVybmFsQXR0cmlidXRlKTsKKwogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CiAKICAg
ICBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewpAQCAtOTYsNyArMTA4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
Ci0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtMTIwLDE4
ICsxMzIsMTk2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNz
RnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBB
cnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxh
ciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBl
IGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3Qg
Y2FsbGVkLgorICAgICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCBy
ZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFz
c2VkIGFzIHRoZSBtb2RlICh0aGUgZGVmYXVsdCkuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNy
ZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5k
IGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5k
ZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgY2FuU2V0SW5kZXhRdWlja2x5KHByb3Bl
cnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
KTsKKyAgICAgICAgfQorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
MCwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEEgbm9uLXRocm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4K
KyAgICAgICAgdm9pZCBwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlj
a2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAg
ICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgZ2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhblNldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0
aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRl
eChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBh
Y3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUg
aW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAgICAg
IEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAgICAg
ICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0
byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3Qg
dHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCisg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1f
aW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJUKGkg
PCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVz
IGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3Jh
Z2UpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGgg
PT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlh
bGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5p
dGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYp
OwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVz
aW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUg
Y2hhaW4gaXMgbm90IGNvbnN1bHRlZAogICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBj
YWxsZWQuCiAgICAgICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQgKGFmdGVy
IHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0
ZXMpCisgICAgICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJl
IGFuIGluZGV4LgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CiAgICAg
ICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzID0gMCk7Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdm9p
ZCBwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgICAgIGJvb2wgcHJvcGVydHlJc0VudW1lcmFibGUo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKIApAQCAt
MTQ3LDYgKzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2
ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM5NCwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0
b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGlu
ZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBj
b25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3Bl
cnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAg
ICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQo
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDIxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdl
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiAr
IChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBv
dXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAx
KTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAg
LTI2NSwyMSArNDU5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU2VhbGVk
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzU2VhbGVk
KGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KICAg
ICAgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNp
YmxlKCk7IH0KKyAgICAgICAgYm9vbCBpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICFpc0V4dGVuc2libGUoKQorICAgICAgICAgICAgICAgIHx8
IHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKTsKKyAgICAgICAgfQogCiAgICAgICAgIGJvb2wg
c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKCk7IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRl
bGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3Bl
cnR5U3RvcmFnZSBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERh
dGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1
dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
dm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8v
IFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCiAgICAgICAg
IHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQg
c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0g
ICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ4
OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3Rh
dGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBw
dHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMxNiwxNCArNTIwLDc4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMg
eW91IGxpa2VseSB3YW50IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAgICAgICAvLyBUbyBjcmVh
dGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cu
Ci0gICAgICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBK
U09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
dm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2Us
IHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZp
c2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENh
bGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0
IGhhcyBhcnJheQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lz
ZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9y
YWdlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBw
cmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBv
YmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0
b3JhZ2UuIFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFj
dGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8g
YmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQK
KyAgICAgICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNp
Z25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisg
ICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9v
bCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisKKyAgICAgICAgZW51bSBD
b25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JD
b25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lmICFDSEVDS19BUlJB
WV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25z
aXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vsc2UKKyAg
ICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUg
PSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9p
ZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5
U3RvcmFnZSopOworCisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0
YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24p
OworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpT
R2xvYmFsRGF0YSYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTMzNiwxNyArNjA0LDMzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAg
ICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7
CisgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERp
cmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxp
bmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYsIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFBy
b3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFz
aEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBj
b25zdDsKICAgICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRl
KiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3Jp
cHRvciYgb2xkKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9y
YWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JM
ZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwor
ICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0
aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRp
ZgogICAgIH07CkBAIC0zNzIsOCArNjU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
IAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAg
OiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9u
RmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAg
LTQ1NiwxMSArNzQwLDYgQEAgaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9y
YWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGlu
ZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBj
b25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xv
YmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzcwLDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0
Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCku
dHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0
T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFn
ZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
aWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQor
ICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICYmICFoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAg
IHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3Rv
cmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJm
bHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MTgs
OSBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJu
IGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5l
IEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywg
MCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4Njgs
MTcgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RM
b2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYg
KHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlz
R2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3Qs
IGxvY2F0aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9m
ZnNldChvZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclBy
b3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24o
bG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNl
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxh
cmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NjQsNyBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVl
KTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYg
QWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJl
KCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OwpAQCAtNzEyLDExICs5OTMsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJs
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0
cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAg
ICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAK
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICsxMDExLDEzIEBAIGlubGlu
ZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUo
KSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgp
OyAKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAg
ICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
Ci0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
Y3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0
KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHBy
b3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRs
eSBjYWNoYWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJs
ZSBzdGF0ZS4KQEAgLTgwMyw5ICsxMDg0LDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0
cnVjdHVyZUFuZFJlYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5
U3RvcmFnZSBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0
YSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAg
c2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUp
OworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVy
ZSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUpCkBAIC04MzksMTEgKzExMjAsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6
OnB1dERpcmVjdChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
LSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2Ug
PSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBh
Y2l0eSgpKTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5z
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3Ry
dWN0dXJlKCkpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0
cnVjdHVyZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1
ZSk7CiB9CiAKQEAgLTkzNSw2ICsxMjE2LDExIEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVn
aXN0ZXI6OndpdGhDYWwKICAgICByZXR1cm4gcjsKIH0KIAoraW5saW5lIHNpemVfdCBvZmZzZXRJ
bkJ1dHRlcmZseShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9y
YWdlKCk7Cit9CisKIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHBhdGNoaW5nIGNvZGUgd2hlcmUg
eW91IHdhbnQgdG8gZW1pdCBhIGxvYWQgb3Igc3RvcmUgYW5kCiAvLyB0aGUgYmFzZSBpczoKIC8v
IEZvciBpbmxpbmUgb2Zmc2V0czogYSBwb2ludGVyIHRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdl
IHBvaW50ZXIuCkBAIC05NDIsMTQgKzEyMjgsMTQgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBS
ZWdpc3Rlcjo6d2l0aENhbAogaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0
b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNl
dChvZmZzZXQpKQotICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkg
KyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
IC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0
KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
KTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAt
OTU3LDcgKzEyNDMsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlP
CiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAog
ICAgIGlmIChvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzKCkpCiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgIAorICAg
IGlmIChoYXNJbmRleGluZ0hlYWRlcihvLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQor
ICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICAKICAgICBzaXplX3Qg
Y291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBvKTsKICAgICBTdHJ1Y3R1cmVD
aGFpbiogc3RydWN0dXJlQ2hhaW4gPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNo
YWluLT5oZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+
ZW5kKCk7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3du
UHJvcGVydHkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
aXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGly
ZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VS
VCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
SW5mby5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlID0gMSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50
UmVjb3JkID0gMSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgSW50ZXJzZWN0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3MgVHlwZUluZm8g
ewogICAgIHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgb3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3Mx
KE92ZXJyaWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QpOyB9CisgICAgICAgIGJvb2wgaW50ZXJzZWN0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEo
SW50ZXJzZWN0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVuKTsgfQotICAgICAgICBib29s
IG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3Mx
KE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmco
KSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyk7
IH0KIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zmc2V0KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJMZXhlci5o
IgpAQCAtNjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojpw
YXJzZShQCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIERvUGFyc2VPYmplY3RFbmRF
eHByZXNzaW9uOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzT2JqZWN0KG9iamVj
dFN0YWNrLmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmll
clN0YWNrLmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKGkgIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1
dERpcmVjdEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0
YSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigp
LnR5cGUgPT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9QYXJzZU9iamVj
dFN0YXJ0RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9i
amVjdENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBA
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0UHJvdG90eXAKIAogT2JqZWN0UHJvdG90
eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0dWN0dXJl
KQogICAgIDogSlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0dWN0dXJlKQot
ICAgICwgbV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXModHJ1ZSkKIHsKIH0KIApAQCAt
NzcsMzQgKzc2LDYgQEAgdm9pZCBPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEpTRwog
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKLXZvaWQgT2JqZWN0UHJvdG90eXBl
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBPYmpl
Y3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCk7
Ci0gICAgQmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwot
Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYm
IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAg
ICAgICB0aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNl
OwotfQotCi1ib29sIE9iamVjdFByb3RvdHlwZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgT2Jq
ZWN0UHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVj
dCk7Ci0gICAgYm9vbCByZXN1bHQgPSBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwotCi0gICAgaWYgKHRo
aXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNlOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIE9iamVjdFByb3RvdHlwZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxsKTsKLSAgICBpZiAodGhpc09iamVj
dC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCiBib29sIE9iamVjdFByb3RvdHlwZTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7CiAgICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uU2xvdDxKU05vbkZpbmFsT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9i
amVjdFByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDE0ICs1MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotICAgICAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwotCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KLSAgICAgICAgYm9vbCBtX2hh
c05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lczsKICAgICB9OwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw4IEBAIHZvaWQgT3B0
aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgOyAvLyBEZWNvbmZ1c2UgZWRpdG9ycyB0aGF0IGRvIGF1
dG8gaW5kZW50YXRpb24KICNlbmRpZgogICAgIAorICAgIHNob3dERkdEaXNhc3NlbWJseSgpID0g
dHJ1ZTsKKyAgICAKICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtl
IGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgogICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAo
KSk7CiAgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA+PSB0aHJl
c2hvbGRGb3JPcHRpbWl6ZVNvb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw3ICsxMTgsNyBAQCBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQ
CiB7CiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVP
ZmZzZXQob2Zmc2V0KSk7Ci0gICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNl
dCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGlu
ZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3Jh
Z2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQcm9wZXJ0eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2Vf
aAorCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBl
ZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYg
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhN
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRE
aXJlY3RJbmRleE1vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFB1dERp
cmVjdEluZGV4TW9kZV9oCisjZGVmaW5lIFB1dERpcmVjdEluZGV4TW9kZV9oCisKK25hbWVzcGFj
ZSBKU0MgeworCitlbnVtIFB1dERpcmVjdEluZGV4TW9kZSB7IFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCwgUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdywgUHV0RGlyZWN0SW5kZXhTaG91
bGRUaHJvdyB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dERpcmVjdElu
ZGV4TW9kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTUgKzI2LDM3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVn
RXhwTWF0Y2hlc0FycmF5LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKwogbmFtZXNw
YWNlIEpTQyB7CiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoUmVnRXhwTWF0Y2hlc0FycmF5
KTsKIAogY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJh
eSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0
Y2hlc0FycmF5KX07CiAKK1JlZ0V4cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNo
UmVzdWx0IHJlc3VsdCkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgYnV0dGVyZmx5KQorICAgICwgbV9yZXN1bHQo
cmVzdWx0KQorICAgICwgbV9zdGF0ZShSZWlmaWVkTm9uZSkKK3sKKyAgICBtX2lucHV0LnNldChn
bG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7CisgICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHJlZ0V4cCk7Cit9CisKK1JlZ0V4cE1hdGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5
OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhw
LCBNYXRjaFJlc3VsdCByZXN1bHQpCit7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1T
dWJwYXR0ZXJucygpICsgMSk7CisgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFw
KSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHZvaWQgUmVn
RXhwTWF0Y2hlc0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1
YnBhdHRlcm5zKCkgKyAxKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
IH0KIAogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMjggKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1h
dGNoUmVzdWx0IHJlc3VsdCkKLSAgICAgICAgICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgLCBt
X3Jlc3VsdChyZXN1bHQpCi0gICAgICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsK
LSAgICAgICAgICAgIG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOwotICAg
ICAgICB9CisgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJm
bHkqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwog
CiAgICAgICAgIGVudW0gUmVpZmllZFN0YXRlIHsgUmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwg
UmVpZmllZEFsbCB9OwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFz
ZTsKIAotICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1
bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAg
ICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5
KGdsb2JhbERhdGEsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwg
cmVzdWx0KTsKLSAgICAgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
LSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVn
RXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBN
YXRjaFJlc3VsdCk7CiAKICAgICAgICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSop
OwogICAgICAgICBKU1N0cmluZyogcmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopOwpAQCAtNTgsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8s
IEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5Lmgi
CkBAIC0xMTMsMTEgKzExNSwxMSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBC
YXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNzM1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRU
aHJvdyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBSZWplY3RfaAorI2RlZmluZSBSZWplY3RfaAorCisjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2lubGluZSBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRp
b24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgaWYgKHRocm93RXhjZXB0aW9uKQorICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVqZWN0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCisjaW5jbHVkZSAi
Q2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBTcGFyc2VBcnJheVZhbHVl
TWFwOjpzX2luZm8gPSB7ICJTcGFyc2VBcnJheVZhbHVlTWFwIiwgMCwgMCwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShTcGFyc2VBcnJheVZhbHVlTWFwKSB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9o
CisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVk
ZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgi
CisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFy
c2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRl
ZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6
IGF0dHJpYnV0ZXMoMCkge30KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBn
ZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VN
b2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYg
SlNDZWxsIEJhc2U7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdz
IHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAg
IExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7CisgICAgflNwYXJzZUFycmF5VmFsdWVNYXAoKTsK
KyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7
CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKKworcHVibGljOgorICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgdHlw
ZWRlZiBNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3Vs
dDsKKworICAgIHN0YXRpYyBTcGFyc2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNl
TW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAg
fQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBz
dGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJv
b2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExl
bmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkK
KyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExl
bmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0
ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0RW50cnkoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9v
bCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICBBZGRSZXN1bHQgYWRk
KEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyBy
ZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVt
b3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJl
bW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUo
dW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMg
ZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RG
b3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBi
ZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZs
YWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19o
CisKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGlu
ZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKKyAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zcGFyc2VBcnJh
eVZhbHVlTWFwU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9mbGFncyhOb3JtYWwpCisgICAgLCBt
X3JlcG9ydGVkQ2FwYWNpdHkoMCkKK3sKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6
On5TcGFyc2VBcnJheVZhbHVlTWFwKCkKK3sKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworfQorCitpbmxpbmUgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihnbG9iYWxEYXRhLmhlYXApKSBT
cGFyc2VBcnJheVZhbHVlTWFwKGdsb2JhbERhdGEpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nh
c3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpLT5TcGFyc2VBcnJheVZhbHVlTWFwOjp+U3Bh
cnNlQXJyYXlWYWx1ZU1hcCgpOworfQorCitpbmxpbmUgU3RydWN0dXJlKiBTcGFyc2VBcnJheVZh
bHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworaW5s
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjph
ZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5RW50cnkg
ZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsK
KworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAgIHNpemVf
dCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVw
b3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2ln
bmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0
ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFy
c2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8g
VG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhl
IHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEg
bmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRo
aXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4u
CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsK
KyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlmIChzaG91bGRUaHJv
dykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIShl
bnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1
dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZW50
cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5TcGFyc2VBcnJheUVudHJ5
OjpCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7Cisg
ICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7
CisgICAgCisgICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxE
YXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRD
YWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OworICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5
VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlIG1vZGUpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRk
IHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhp
cyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNp
YmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3Zl
IGFnYWluLgorICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiBy
ZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJl
bW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUg
PT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3Bl
cnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVu
dHJ5LmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxE
YXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lk
IFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBp
ZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZh
bHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7
CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNl
QXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sK
KyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwor
fQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpn
ZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dl
dHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRl
cikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGlu
ZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAorewor
ICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitp
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogdGhpc01hcCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4odGhpc09iamVjdCk7Cisg
ICAgaXRlcmF0b3IgZW5kID0gdGhpc01hcC0+bV9tYXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRv
ciBpdCA9IHRoaXNNYXAtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lv
biAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAi
SlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFn
ZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0
eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVu
Y2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0g
ICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAg
ICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2Vk
VGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tl
ZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAg
IAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRv
ci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAg
Y29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0g
ICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9
Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotCi0gICAg
Ym9vbCBvcGVyYXRvciEoKSB7IHJldHVybiAhbV9zdG9yYWdlOyB9Ci0gICAgCi1wcml2YXRlOgot
ICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNyBAQCB2b2lkIFN0cmluZ09iamVj
dDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgSlNPYmplY3Q6OnB1dChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBTdHJpbmdPYmplY3Q6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBTdHJpbmdPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNP
YmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgocHJvcGVydHlOYW1lKSkgeworICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZFRocm93KTsKK30KKwogYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQogewogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdP
YmplY3QqPihvYmplY3QpOwpAQCAtMTMzLDYgKzE0NCwxNCBAQCBib29sIFN0cmluZ09iamVjdDo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29sIFN0cmluZ09iamVj
dDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpKQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJp
bmdPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5j
YW5HZXRJbmRleChpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOworfQorCiB2b2lk
IFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3Ry
aW5nT2JqZWN0Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0
YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAg
ICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwogCkBAIC02Niw3ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYsIEpTU3RyaW5nKik7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTV3Jh
cHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0
cmluZ09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICB9OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw5ICsxNDksMTAg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1
cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8s
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICA6IEpTQ2VsbChnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdHlwZUlu
Zm8odHlwZUluZm8pCisgICAgLCBtX2luZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpCiAgICAgLCBt
X2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmll
cjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERh
dGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3
Niw2ICsxNzcsNyBAQCBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlOjpzX2luZm8gPSB7ICJTCiBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgOiBKU0Nl
bGwoQ3JlYXRpbmdFYXJseUNlbGwpCiAgICAgLCBtX3R5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbikKKyAgICAsIG1faW5kZXhpbmdUeXBlKDApCiAgICAgLCBtX3By
b3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBqc051bGwoKSkKICAgICAsIG1fY2xhc3NJbmZvKCZz
X2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hp
bmcpCkBAIC0xOTcsNiArMTk5LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyhwcmV2aW91
cy0+dHlwZUluZm8oKSkKKyAgICAsIG1faW5kZXhpbmdUeXBlKHByZXZpb3VzLT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlz
LCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91
cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxp
emVkV2F0Y2hpbmcpCkBAIC0yNTEsNiArMjU0LDggQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlNYXAoSgogCiAgICAgZm9yIChwdHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6
ZSgpIC0gMjsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tp
XTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCisgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0
aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZz
ZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKICAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQo
ZW50cnkpOwogICAgIH0KQEAgLTUwMiw2ICs1MDcsMzggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0
aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5z
aXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdU
eXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9u
S2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAg
QVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRy
aWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBleGlz
dGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1fcHJldmlv
dXMuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlv
bi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+
bV9pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+
bV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVy
dHlUYWJsZS5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
bV9wcmV2aW91cykKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlN
YXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNy
ZWF0ZVByb3BlcnR5TWFwKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHJldHVybiB0cmFuc2l0
aW9uOworfQorCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0
eS4KIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMTI3MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAog
I2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1
ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIK
QEAgLTY4LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJ
bmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQpAQCAtMTAwLDYgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBzZWFsVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0
YSYpOwogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8o
KSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJl
dHVybiBtX3R5cGVJbmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVy
biB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9
CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAg
ICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRh
LCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkBAIC0zMzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZSwgbV9jbGFzc0luZm8pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJik7CiAgICAgICAgIApAQCAtMzYzLDcgKzM3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xh
c3NJbmZvKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERh
dGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYs
IGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJik7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBT
dHJ1Y3R1cmUqKTsKIApAQCAtNDE2LDYgKzQyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0g
MzsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUg
bV9pbmRleGluZ1R5cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxP
YmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9w
cm90b3R5cGU7CkBAIC00NDcsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1Jl
YWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAg
ICBib29sIG1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25l
ZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1
dGVzSW5QcmV2aW91cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25U
aHJhc2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAx
OwogICAgICAgICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUs
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAg
ICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBj
b25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEu
c3RydWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0
dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0
YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0
eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVf
aAogI2RlZmluZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhp
bmdUeXBlLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5j
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3Ig
dHJhbnNpdGlvbnMgdGhhdCBkb24ndCBoYXZlIHRvIGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25z
LgorCisvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlv
bnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKy8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNl
ZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UKK307CisKK2lubGlu
ZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24p
Cit7CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQor
CitpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlw
ZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgc3dpdGNoICh0cmFu
c2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
IG9sZFR5cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBvbGRUeXBlOworICAgIH0KK30KKwogY2xh
c3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3Qg
VXNpbmdTaW5nbGVTbG90RmxhZyA9IDE7CiAKQEAgLTQ0LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxT
dHJpbmdJbXBsPiwgdW5zaWduZWQ+IEtleTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgS2V5JiBwKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhp
c3RpbmdIYXNoKCk7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBwLnNlY29uZDsKKyAg
ICAgICAgICAgIGlmIChwLmZpcnN0KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwLmZpcnN0
LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
IAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3Jl
Z3Jlc3MtMzA0ODI4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCShyZXZpc2lvbiAxMjczNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdy
ZXNzLTMwNDgyOC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCByZXBvcnRDb21w
YXJlKGV4cGVjdCwgYWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHJldmVyc2UKIHZhbHVlICA9ICcx
MjMnOwotZXhwZWN0ID0gJzEyMyc7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8g
YXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXku
cHJvdG90eXBlLnJldmVyc2UuY2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTczLDcgKzczLDcgQEAgcmVw
b3J0Q29tcGFyZShleHBlY3QsIGFjdHVhbCwgc3VtbWFyeSArIAogCiAvLyBzb3J0CiB2YWx1ZSAg
PSAnY2JhJzsKLWV4cGVjdCA9ICdjYmEnOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVk
IHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFy
cmF5LnByb3RvdHlwZS5zb3J0LmNhbGwodmFsdWUpICsgJyc7CkBAIC0xMTQsNyArMTE0LDcgQEAg
cmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2
YWx1ZSAgPSAnZGVmJzsKLWV4cGVjdCA9IDY7CitleHBlY3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0
ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7CiB0cnkKIHsKICAgYWN0dWFsID0g
QXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh2YWx1ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0x
MjgsNyArMTI4LDcgQEAgcmVwb3J0Q29tcGFyZSgnZGVmJywgdmFsdWUsIHN1bW1hcnkgKyAnOgog
CiAvLyBzaGlmdAogdmFsdWUgID0gJ2FiYyc7Ci1leHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUg
dG8gZGVsZXRlIHByb3BlcnR5Lic7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8g
YXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXku
cHJvdG90eXBlLnNoaWZ0LmNhbGwodmFsdWUpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHJlcG9ydENv
bXBhcmUoJ2FiYycsIHZhbHVlLCBzdW1tYXJ5ICsgJzoKIAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAn
YWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsK
K2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJv
cGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwo
dmFsdWUsIDEsIDEpICsgJyc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJh
eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJh
eVZhbHVlLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMSBAQCBib29s
IEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIERpY3RpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShtX3ZhbHVlKTsKLSAgICBpZiAoIWFy
cmF5LT5jYW5HZXRJbmRleChpbmRleCkpCisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5
IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU2MTAKKyAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1ZhbHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5n
ZXRJbmRleChpbmRleCk7CisgICAgSlNWYWx1ZSBpbmRleGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGluZGV4KTsKICAgICBpZiAoaW5kZXhlZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkgfHwgIWluZGV4ZWRWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNCbG9iQ29uc3QKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAvLyBGSVhN
RTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJh
eS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogI2lmIEVOQUJMRShCTE9CKQogICAgICAgICBpZiAoaXRl
bS5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGJsb2JCdWls
ZGVyLT5hcHBlbmQoY29udGV4dCwgdG9BcnJheUJ1ZmZlcihpdGVtKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw4ICsxMTAsOSBAQCB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRXZWJrCiAKICAgICBEYXNoQXJyYXkgZGFzaDsKICAgICBKU0FycmF5KiB2YWx1ZUFy
cmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlz
IGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTU2MTAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBmbG9hdCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXgoaSkudG9G
bG9hdChleGVjKTsKKyAgICAgICAgZmxvYXQgZWxlbSA9IHZhbHVlQXJyYXktPmdldEluZGV4UXVp
Y2tseShpKS50b0Zsb2F0KGV4ZWMpOwogICAgICAgICBpZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0
ZShlbGVtKSkKICAgICAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAx
MjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw5IEBAIFBhc3NSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gdG9ET01TdHJpbmdMaXMKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2
YWx1ZSk7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHN0cmluZ0xpc3QgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3Bh
cnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkKLSAgICAg
ICAgc3RyaW5nTGlzdC0+YXBwZW5kKGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOworICAgICAgICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4
UXVpY2tseShpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgcmV0dXJuIHN0
cmluZ0xpc3QucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3MzUwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMSBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQ
cm9wZXJ0eShKU0NlCiAgICAgcmV0dXJuICFlYzsKIH0KIAorYm9vbCBKU0RPTVN0cmluZ01hcDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkpOworfQorCiBib29sIEpTRE9NU3RyaW5nTWFwOjpw
dXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpCiB7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3
MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTIgKzE2MCwxMiBAQCBib29sIEpTRE9NV2luZG93Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgLy8gaXMgYWxsb3dlZC4KICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwogICAgIGJvb2wgYWxsb3dzQWNjZXNzID0gc2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCksIGVycm9yTWVzc2FnZSk7Ci0KKyAgICAK
ICAgICAvLyBMb29rIGZvciBvdmVycmlkZXMgYmVmb3JlIGxvb2tpbmcgYXQgYW55IG9mIG91ciBv
d24gcHJvcGVydGllcywgYnV0IGlnbm9yZSBvdmVycmlkZXMgY29tcGxldGVseQogICAgIC8vIGlm
IHRoaXMgaXMgY3Jvc3MtZG9tYWluIGFjY2Vzcy4KICAgICBpZiAoYWxsb3dzQWNjZXNzICYmIEpT
R2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyAgICAKICAgICAvLyBXZSBu
ZWVkIHRoaXMgY29kZSBoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlIEpTRE9NV2luZG93QmFzZSB3aWxs
IHN0b3AgdGhlIHNlYXJjaCBiZWZvcmUgd2UgZXZlbiBnZXQgdG8gdGhlCiAgICAgLy8gcHJvdG90
eXBlIGR1ZSB0byB0aGUgYmxhbmtldCBzYW1lIG9yaWdpbiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdykgY2hlY2sgYXQgdGhlIGVuZCBvZiBnZXRPd25Qcm9wZXJ0eVNsb3QuCiAgICAgLy8g
QWxzbywgaXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhaWdodCBv
dXQgb2YgdGhlIERPTVdpbmRvdyBwcm90b3R5cGUgcmVnYXJkbGVzcyBvZgpAQCAtMjY5LDYgKzI2
OSw4MiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCitib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RE9NV2luZG93Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5pbXBsKCktPmZy
YW1lKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgbWVzc2FnZSBoZXJl
IHRoYXQgZXhwbGFpbnMgd2h5IHRoZSBwcm9wZXJ0eSBhY2Nlc3MvZnVuY3Rpb24gY2FsbCB3YXMK
KyAgICAgICAgLy8gbm90IGFsbG93ZWQuIAorICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZv
ciBjcm9zcy1kb21haW4gYWNjZXNzIGhlcmUgd2l0aG91dCBwcmludGluZyB0aGUgZ2VuZXJpYyB3
YXJuaW5nIG1lc3NhZ2UKKyAgICAvLyBiZWNhdXNlIHdlIGFsd2F5cyBhbGxvdyBhY2Nlc3MgdG8g
c29tZSBmdW5jdGlvbiwganVzdCBkaWZmZXJlbnQgb25lcyBkZXBlbmRpbmcgd2hldGhlciBhY2Nl
c3MKKyAgICAvLyBpcyBhbGxvd2VkLgorICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9v
bCBhbGxvd3NBY2Nlc3MgPSBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNP
YmplY3QtPmltcGwoKSwgZXJyb3JNZXNzYWdlKTsKKworICAgIC8vIExvb2sgZm9yIG92ZXJyaWRl
cyBiZWZvcmUgbG9va2luZyBhdCBhbnkgb2Ygb3VyIG93biBwcm9wZXJ0aWVzLCBidXQgaWdub3Jl
IG92ZXJyaWRlcyBjb21wbGV0ZWx5CisgICAgLy8gaWYgdGhpcyBpcyBjcm9zcy1kb21haW4gYWNj
ZXNzLgorICAgIGlmIChhbGxvd3NBY2Nlc3MgJiYgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpbmRleCk7CisgICAgCisgICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZy
YW1lcyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCisgICAgLy8gbWF0Y2gg
TW96aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCisg
ICAgLy8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9w
ZXJ0aWVzIHRoYXQKKyAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUg
c29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbworICAgIC8vIGl0IHRoZSBNb3ogd2F5LgorICAg
IGlmICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJv
cGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpIHsKKyAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpc09iamVjdCwgY2hpbGRGcmFtZUdldHRlcik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEbyBwcm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRo
YXQgZnVuY3Rpb25zIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKKyAg
ICAvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKKyAgICBK
U1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJvdG90eXBlKCk7CisgICAgaWYgKHByb3RvLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIGluZGV4LCBzbG90KSkgeworICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsK
KyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJ
WE1FOiBTZWFyY2ggdGhlIHdob2xlIGZyYW1lIGhpZXJhcmNoeSBzb21ld2hlcmUgYXJvdW5kIGhl
cmUuCisgICAgLy8gV2UgbmVlZCB0byB0ZXN0IHRoZSBjb3JyZWN0IHByaW9yaXR5IG9yZGVyLgor
CisgICAgLy8gYWxsb3cgd2luZG93WzFdIG9yIHBhcmVudFsxXSBldGMuICgjNTY5ODMpCisgICAg
aWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENo
aWxkQ291bnQoKSkgeworICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwg
aW5kZXhHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWFs
bG93c0FjY2VzcykgeworICAgICAgICB0aGlzT2JqZWN0LT5wcmludEVycm9yTWVzc2FnZShlcnJv
ck1lc3NhZ2UpOworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0
ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0
aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50
LT5pc0hUTUxEb2N1bWVudCgpKSB7CisgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1By
b3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYg
KGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1l
bnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxl
bWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0dGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworfQorCiBib29sIEpT
RE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNET01XaW5kb3cqPihvYmplY3QpOwpAQCAtMzYyLDYgKzQzOCwyNSBAQCB2b2lkIEpTRE9NV2lu
ZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjCiAgICAgICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBKU0RPTVdpbmRv
dzo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNET01XaW5kb3cq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICBpZiAoIXRoaXNP
YmplY3QtPmltcGwoKS0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKwor
ICAgIC8vIE9wdGltaXphdGlvbjogYWNjZXNzIEphdmFTY3JpcHQgZ2xvYmFsIHZhcmlhYmxlcyBk
aXJlY3RseSBiZWZvcmUgaW52b2x2aW5nIHRoZSBET00uCisgICAgaWYgKHRoaXNPYmplY3QtPkpT
R2xvYmFsT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKGV4ZWMsIHByb3BlcnR5TmFtZSkp
IHsKKyAgICAgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICAgICAgSlNHbG9iYWxPYmpl
Y3Q6OnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJv
dyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKEJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkp
KQorICAgICAgICBCYXNlOjpwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOworfQorCiBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNl
bGwpOwpAQCAtMzcxLDYgKzQ2NiwxNSBAQCBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lKQoreworICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93
Kj4oY2VsbCk7CisgICAgLy8gT25seSBhbGxvdyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1l
cyBpbiB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNw
cAkocmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDEyIEBAIGJvb2wgSlNE
T01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlTbG8KICAgICByZXR1cm4gdGhpc09iamVjdC0+
d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LT53
aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRv
d1NoZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwq
PihjZWxsKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewog
ICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVs
bCo+KG9iamVjdCk7CkBAIC0xMDksNiArMTE1LDEyIEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6
cHV0KEpTQ2VsbCogY2VsbCwKICAgICB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUo
KS0+cHV0KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKIH0KIAordm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNET01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+d2luZG93
KCktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwogdm9pZCBKU0RPTVdpbmRv
d1NoZWxsOjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RE9NV2luZG93U2hlbGwqPihvYmplY3QpOwpAQCAtMTI3LDYgKzEzOSwxMiBAQCBib29sIEpTRE9N
V2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5KEpTCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPndp
bmRvdygpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LT53aW5kb3co
KSwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+d2lu
ZG93KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LT53
aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxs
OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewog
ICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVs
bCo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d1NoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNDOjpKU09iamVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE1IEBA
IGJvb2wgSlNIaXN0b3J5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAor
Ym9vbCBKU0hpc3Rvcnk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpTSGlzdG9yeSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0hpc3RvcnkqPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRl
bGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0hpc3Rvcnk6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSGlzdG9yeSo+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDggQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5k
SG9zdDo6cG9ydChFeAogc3RhdGljIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIENvbnRleHRNZW51JiBtZW51KQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgSlNP
YmplY3QqIGl0ZW0gPSBhc09iamVjdChhcnJheS0+Z2V0SW5kZXgoaSkpOworICAgICAgICAvLyBG
SVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICBKU09iamVjdCogaXRlbSA9
IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgICAgICBKU1ZhbHVlIGxh
YmVsID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxhYmVsIikpOwogICAgICAg
ICBKU1ZhbHVlIHR5cGUgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidHlwZSIp
KTsKICAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJpZCIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwx
NSBAQCBib29sIEpTTG9jYXRpb246OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogCiAgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9
CiAKK2Jvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNMb2NhdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CisgICAgLy8gT25seSBh
bGxvdyBkZWxldGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghc2hv
dWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKIHZvaWQgSlNMb2Nh
dGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihv
YmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBi
b29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpKTsKK30KKwogdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3RvcmFnZSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjczNTApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U1dlYlNvY2tldAogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAg
ICAgICAgSlNBcnJheSogcHJvdG9jb2xzQXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29s
c0FycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAg
ICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwcm90b2NvbHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29s
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDEyNzM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBqc1RvSW4KICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh2YWx1ZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3Ro
KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBt
b2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwog
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQs
OCArODk0LDkgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAg
ICAgICAgICAgICAgICAgICBsZW5ndGhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJy
YXktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFy
cmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYg
dGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0
SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpblZh
bHVlID0gZ2V0U3BhcnNlSW5kZXgoYXJyYXksIGluZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gMTI3MzUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTc3NywyMyArNzc3LDI1IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogCiAgICAgJGltcGxJbmNsdWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgi
fSA9IDEgaWYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tSGVhZGVy
In0gJiYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9u
In0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIi
fSk7CiAKLSAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwCi0gICAgICAgICAg
ICAgICAgIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0
b3IifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbmRleGVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQotICAgICAgICAgICAgICAgICB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3QifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifQotICAgICAgICAgICAg
ICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9Ci0g
ICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU5hbWVkR2V0dGVyIn07CisgICAgbXkgJGhhc0NvbXBsZXhHZXR0ZXIgPQorICAgICAgICAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KKyAgICAgICAgfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQor
ICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3QifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifQorICAgICAgICB8fCAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9CisgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07Cisg
ICAgCisgICAgbXkgJGhhc0dldHRlciA9ICRudW1BdHRyaWJ1dGVzID4gMCB8fCAhJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0gfHwgJGhhc0NvbXBsZXhH
ZXR0ZXI7CiAKICAgICAjIEdldHRlcnMKICAgICBpZiAoJGhhc0dldHRlcikgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4i
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pICYmICEkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9OworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICgkaGFzQ29tcGxleEdldHRlcik7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xu
IikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIn07CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJ
bnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
In0gPSAxOwogICAgIH0KIAogICAgICMgQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgd3JpdGFibGUgcHJv
cGVydGllcwpAQCAtODA0LDE1ICs4MDYsMTcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBteSAkaGFzU2V0dGVyID0gJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMK
LSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tUHV0RnVuY3Rpb24ifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifTsKKyAg
ICBteSAkaGFzQ29tcGxleFNldHRlciA9CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn07CisgICAgICAg
IAorICAgIG15ICRoYXNTZXR0ZXIgPSAkaGFzUmVhZFdyaXRlUHJvcGVydGllcyB8fCAkaGFzQ29t
cGxleFNldHRlcjsKIAogICAgICMgR2V0dGVycwogICAgIGlmICgkaGFzU2V0dGVyKSB7CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xu
IikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRl
ciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dEJ5
SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTtcbiIpIGlmICgkaGFzQ29tcGxleFNl
dHRlcik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBwdXREZWxlZ2F0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21OYW1lZFNldHRlciJ9OwogICAgIH0KIApAQCAtODQ4LDYgKzg1Miw3IEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogCiAgICAgIyBDdXN0b20gZGVsZXRlUHJvcGVydHkgZnVuY3Rpb24KICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKSBpZiAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9Owor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCk7XG4iKSBpZiAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9Owog
CiAgICAgIyBDdXN0b20gZ2V0UHJvcGVydHlOYW1lcyBmdW5jdGlvbiBleGlzdHMgb24gRE9NV2lu
ZG93CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xNzQxLDIx
ICsxNzQ2LDc5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KQotICAgICAgICAg
ICAgICAgICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdl
dHRlciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05h
bWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAg
ICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9
IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVy
In0KKyAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJO
YW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5h
bWVkR2V0dGVyIn0KKyAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifSkgeworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xh
c3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKHByb3BlcnR5TmFtZSA8IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1l
Kj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3RoKCkpIHtcbiIpOwotICAgICAgICAgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0p
IHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRW
YWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpO1xuIik7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhp
c09iamVjdC0+aW5kZXhHZXR0ZXIpO1xuIik7CisKKyAgICAgICAgICAgICMgVGhpcyBhdHRlbXB0
cyB0byBzaW5rIHRoZSBzb21ld2hhdCBleHBlbnNpdmUgaW50LXRvLXN0cmluZyBjb252ZXJzaW9u
IHRoYXQgaGFwcGVucyB3aGVuIHdlIGNyZWF0ZSBQcm9wZXJ0eU5hbWUKKyAgICAgICAgICAgICMg
dG8gdGhlIHBvaW50IHdoZXJlIHdlIGFjdHVhbGx5IG5lZWQgaXQuIEluIHBhcnRpY3VsYXIsIHdo
ZW4gd2UgZ2VuZXJhdGUgdGhpcyBtZXRob2QgZm9yIGNsYXNzZXMgdGhhdCBjYW4KKyAgICAgICAg
ICAgICMgYXR0ZW1wdCB0aGVpciBpbmRleGVkIGdldHRlciBmaXJzdCwgd2UgdHJ5IHRvIGVuc3Vy
ZSB0aGF0IGlmIHRoYXQgZ2V0dGVyIHN1Y2NlZWRzIHRoZW4gd2UgZG9uJ3QgcGF5IGZvciB0aGUK
KyAgICAgICAgICAgICMgY3JlYXRpb24gb2YgdGhlIFByb3BlcnR5TmFtZS4KKyAgICAgICAgICAg
IG15ICRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUgPSAwOworICAgICAgICAgICAgbXkgJHByb3BlcnR5
TmFtZUdlbmVyYXRpb24gPSBzdWIgeworICAgICAgICAgICAgICAgIGlmICgkZ2VuZXJhdGVkUHJv
cGVydHlOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAg
ICAgICAgICAgICAgJGdlbmVyYXRlZFByb3BlcnR5TmFtZSA9IDE7CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBteSAkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlv
biA9IHN1YiB7CisgICAgICAgICAgICAgICAgbXkgJHJlcXVpcmVzTWFudWFsTG9va3VwID0gJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn07CisgICAgICAgICAgICAgICAg
aWYgKCRyZXF1aXJlc01hbnVhbExvb2t1cCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gJHtjbGFzc05hbWV9VGFi
bGUuZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZW50cnkpIHtcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVj
dCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSAmJiAhJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAg
ICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOworICAgICAgICAgICAgICAgICYkbWFudWFsTG9v
a3VwR2V0dGVyR2VuZXJhdGlvbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
LCBzbG90KTtcbiIpOworCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5kZXhH
ZXR0ZXJSZXR1cm5zU3RyaW5ncygkaW1wbENsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkg
e1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4IDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05h
bWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgo
ZXhlYywgaW5kZXgpKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgfVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKKyAgICAgICAg
ICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19j
YXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkg
e1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAg
ICAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL3RleHQvQXRvbWljU3RyaW5nLmgifSA9IDE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAg
ICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOworICAgICAgICAgICAgICAgICYkbWFu
dWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0
b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAgICAm
JHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQogCkBAIC0xOTQ2
LDE2ICsyMDA5LDMwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21JbmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InZvaWQgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5m
byk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2Jq
ZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybjtcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
SW5kZXhlZFNldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU5hbWVkU2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpXG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlz
T2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4IDw9
IE1BWF9BUlJBWV9JTkRFWCkge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFRocm93KTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRoaXNPYmpl
Y3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIi
fSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KSlcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYg
KCRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjb25zdCBDbGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJS
dW50aW1lQXJyYXkiLCAmSlNBcnJheTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFJ1bnRpbWVBcnJheSkgfTsKIAogUnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlLCAwKQogICAgICwgbV9hcnJheSgwKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAxMjczNTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMyArNzMsMTMgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsK
IAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0FycmF5OjpT
dHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIFJ1bnRpbWVB
cnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCShyZXZpc2lvbiAxMjczNTApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXN0cmluZ2lmeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzM0LDcgKzMzNCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgewogICAgICAg
ICBqc29uT2JqZWN0LnN0cmluZ2lmeSh7YToiYSIsIGI6ImIiLCBjOiJjIiwgMzogImQiLCAyOiAi
ZSIsIDE6ICJmIn0sIHJlcGxhY2VGdW5jKTsKICAgICAgICAgcmV0dXJuIHJlcGxhY2VUcmFja2Vy
OwogICAgIH0pOwotICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSAnKHN0
cmluZyl7ImEiOiJhIiwiYiI6ImIiLCJjIjoiYyIsIjMiOiJkIiwiMiI6ImUiLCIxIjoiZiJ9O2Eo
c3RyaW5nKSJhIjtiKHN0cmluZykiYiI7YyhzdHJpbmcpImMiOzMoc3RyaW5nKSJkIjsyKHN0cmlu
ZykiZSI7MShzdHJpbmcpImYiOyc7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBl
Y3RlZCA9ICcoc3RyaW5nKXsiMSI6ImYiLCIyIjoiZSIsIjMiOiJkIiwiYSI6ImEiLCJiIjoiYiIs
ImMiOiJjIn07MShzdHJpbmcpImYiOzIoc3RyaW5nKSJlIjszKHN0cmluZykiZCI7YShzdHJpbmcp
ImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7JzsKICAgICByZXN1bHQucHVzaChmdW5jdGlv
bihqc29uT2JqZWN0KXsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgdmFyIGFycmF5
ID0gW3t0b1N0cmluZzpmdW5jdGlvbigpe2NvdW50Kys7IGFycmF5WzBdPSdhJzsgYXJyYXlbMV09
J2MnOyBhcnJheVsyXT0nYic7IHJldHVybiAnYSd9fV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162933</attachid>
            <date>2012-09-07 19:21:13 -0700</date>
            <delta_ts>2012-09-09 15:29:24 -0700</delta_ts>
            <desc>almost ready for review</desc>
            <filename>butterflies_patch_35.diff</filename>
            <type>text/plain</type>
            <size>462055</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFpbC5jb20pCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
UGFyZW50OjptZXRob2RUYWJsZTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hh
c0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNI
YXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
U3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtMTc4LDYgKzE3OCw3IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICAKICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTE4Nyw3ICsxODgsNyBAQCBwcml2YXRlOgogCiAgICAg
c3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBK
U1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAg
c3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4Myw2ICsxODMsMTIgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBy
bwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgorYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY2VsbCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKK30KKwordGVt
cGxhdGUgPGNsYXNzIFBhcmVudD4KIEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpk
ZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7CiAgICAgY29uc3QgSlNDYWxsYmFja09iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxjb25zdCBKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKQEAg
LTQ0OSw3ICs0NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNDYWxsYmFj
a09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsK
ICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0LDcgKzQ5MCw3
IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAK
ICNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQSUNhc3QuaCIK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0
ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMs
OCBAQAogCQkwRjBCODNCNTE0QkNGODYyMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZvLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCMzE0
QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQjcxNEJDRjhFMTAwODg1QjRG
IC8qIEdsb2JhbFJlc29sdmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBCODNCNjE0QkNGOERGMDA4ODVCNEYgLyogR2xvYmFsUmVzb2x2ZUlu
Zm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZz
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4
M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMENE
NEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFD
MCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAg
Ki87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgx
NEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTYw
MTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVB
MTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAq
LzsgfTsKQEAgLTE4OCw2ICsxOTAsMTcgQEAKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5
Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTYxNUVE
OEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3Rv
cmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0Yz
OEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5OTE1RUQ4RTQ2
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhF
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5QjE1RUQ4
RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdU
eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2
N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVF
RDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RjE1
RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkzMTVFRDhF
MzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3
QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhp
dFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhp
dFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYw
MDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NjYsNyAr
NTc5LDYgQEAKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4
REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAw
NzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VK
SVQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
NzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJC
Q0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07Ci0JCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5
MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEy
NjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RC
dWlsZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVj
a2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3
RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyB9OwogCQlBN0I0OEY0
OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07CkBAIC04MjksNiArODQxLDggQEAK
IAkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RDYWxsTGlua0luZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2Jh
bFJlc29sdmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbFJl
c29sdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4M0I4MTRCQ0Y5
NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8q
IExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExM
SW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVE
MTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ1
LDYgKzk1OSwxNyBAQAogCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdDMTRGNUNGRDMw
MDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIg
LyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
cnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhB
MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1dHRlcmZseUlubGluZU1ldGhvZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
ZGV4aW5nSGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhFMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJ
bmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkwMTVFRDhFMzgwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdG
MzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzky
MTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXBJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNw
YXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0
UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThG
MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM5LDcgKzEz
NjQsNiBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUg
LyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJ
bnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0Iy
OEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RSZWZQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1
QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFT
VEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4
RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAx
Nyw2ICsyMDQxLDIwIEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjBDRDRDMzE1
RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8sCisJCQkJMEYwQ0Q0
QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oICovLAorCQkJCTBGQjdG
Mzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi8sCisJCQkJMEZCN0Yz
OEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzhCMTVF
RDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKKwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBG
MTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovLAorCQkJCTBGQjdGMzhEMTVFRDhF
MzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4
RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEZCN0YzOTAxNUVE
OEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovLAorCQkJCTBGQjdGMzkxMTVFRDhF
MzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKKwkJCQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovLAorCQkJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdC
MiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oICovLAorCQkJCUMyRDU4QzMz
MTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCUJDRjYw
NTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAz
RUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZD
OSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjIwMiw3ICsyMjQwLDYgQEAKIAkJCQkwRjc3MDA4
RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJOTMzMDNGRTgw
RTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZB
NzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAotCQkJCUE3ODFFMzU4MTQxOTcwQzcw
MDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovLAogCQkJCUE3MzBCNjExMTI1MDA2OEYwMDlE
MjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8sCiAJCQkJQTczMEI2MTAxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2
RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTI3NTIsNyArMjc4
OSw2IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdC
NDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3
ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjkwMSw2ICsyOTM3LDE4IEBACiAJ
CQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9u
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8q
IEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0Iy
IC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk5
MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5n
VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFBy
b3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2
N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2
N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlG
MTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdElu
ZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTAyLDYgKzM1NTAsNyBAQAogCQkJCTE0ODc0
QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExM
SW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2
ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJ
bmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcg
dHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3Vn
aC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOwor
I2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9
PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVy
biBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzE1LDcgKzE3MTUsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERp
cmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJz
Y29yZVByb3RvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoCisgICAgICAgIHByb3BlcnR5
ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvCisgICAgICAg
ICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1MiwxMSArODUyLDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNh
c2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
U3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpA
QCAtOTE2LDEwICs5MTYsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgogICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlP
dXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0
KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBt
X2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xMzU5LDggKzEzNTksNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJp
bmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIg
YW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1heSB3YW50IHRvIGFkZAogICAgICAg
ICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2Ug
ZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
amFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDgg
QEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBTaXplID0gMyB9OwogICAgIAorICAgIEFkamFj
ZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1v
ZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXR1cm4gQXJy
YXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VT
YWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFycmF5OjpKU0FycmF5OworICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJh
eVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0
aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBp
cyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5
IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBA
QCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5
cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01P
REVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOworICAgICAgICAgICAg
JiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5
cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKQorICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6
Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOworICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIkFy
cmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJu
ICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAg
ICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUgewogICAgIEZvcmNlRXhpdCwgLy8g
SW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlv
biwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBHZW5lcmljLAogICAgIFN0cmluZywK
LSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5kcywKKyAgICBBcnJheVN0b3JhZ2Us
CisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
LAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKICAgICBJbnQxNkFycmF5
LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07CiB9IC8vIG5hbWVzcGFjZSBBcnJh
eQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWlu
ZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcg
bXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhh
dAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0aGVtLgorI2RlZmluZSBOT05f
QVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJy
YXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAg
XAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9N
T0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJy
YXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFycmF5OjpNb2RlIGZyb21TdHJ1Y3R1
cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03MSwxMSArOTgsMzAgQEAgYm9vbCBt
b2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIAogCiBjb25zdCBjaGFyKiBtb2RlVG9T
dHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUgYm9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBtb2Rl
SXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTYwLDYgQEAgaW5saW5lIEFycmF5OjpN
b2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgbW9kZXND
b21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUgbGVmdCwgQXJyYXk6Ok1vZGUgcmln
aHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAgIGxlZnQgPT0gQXJyYXk6OkpTQXJy
YXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwotICAgIAot
ICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICByaWdodCA9PSBBcnJheTo6SlNBcnJh
eQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOwotICAgIAot
ICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0FycmF5KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGlubGluZSBib29sIG1vZGVJc1Nw
ZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xNDcs
NyArMTc0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG0KIAog
aW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCiB7Ci0gICAg
cmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVT
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyArMTY4NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQog
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKLSAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAg
c2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAg
IEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMTcsNyArMjMxNyw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFz
ZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0
LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIHByb3BlcnR5U3Rv
cmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpAQCAtMjM2OCwxMyArMjM2OCwxMyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwg
YmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zm
c2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
YmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw4ICsz
ODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKLSAgICAgICAgTm9kZSBnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwg
Y29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKKyAgICAgICAgTm9kZSBnZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOworICAgICAgICBpZiAobW9kZVVzZXNCdXR0ZXJmbHkoYXJy
YXlNb2RlKSkKKyAgICAgICAgICAgIGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgPSBOb2RlKEdl
dEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgYXJyYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0gTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOwogICAgICAgICBpZiAo
c2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLnJl
ZigpOwogICAgICAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4ID0g
bV9ncmFwaC5zaXplKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNl
IE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIG5v
ZGUub3AoKSA9PSBHZXRCeVZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBzdHJ1Y3QgT3BJbmZvIHsKIHN0cnVj
dCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogICAgIAorICAgIE5vZGUo
KSB7IH0KKyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJl
biwgbm8gaW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0
b3JhZ2UpIFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKLSAgICBtYWNy
byhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCisgICAgbWFjcm8oR2V0
QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKENoZWNrQXJyYXksIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBO
b2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMp
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCkBAIC0yMjYs
MTQgKzIyNywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFz
QXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgaWYgKGFycmF5LT5jYW5TZXRJbmRleChpbmRleCkp
IHsKLSAgICAgICAgICAgIGFycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUp
OworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
Z2xvYmFsRGF0YSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCB2YWx1
ZSwgc3RyaWN0KTsKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9i
amVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zNDEsMTEgKzM0MiwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGdl
dEJ5VmFsKEV4CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMp
OwogICAgIAotICAgIC8vIEZJWE1FOiB0aGUgSklUIHVzZWQgdG8gaGFuZGxlIHRoZXNlIGluIGNv
bXBpbGVkIGNvZGUhCi0gICAgaWYgKGlzSlNBcnJheShiYXNlKSAmJiBhc0FycmF5KGJhc2UpLT5j
YW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJh
eShiYXNlKS0+Z2V0SW5kZXgoaW5kZXgpKTsKKyAgICBpZiAoYmFzZS0+aXNPYmplY3QoKSkgewor
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAgICAgIGlmIChv
YmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgfQogCi0g
ICAgLy8gRklYTUU6IHRoZSBKSVRzdHViIHVzZWQgdG8gcmVsaW5rIHRoaXMgdG8gYW4gb3B0aW1p
emVkIGZvcm0hCiAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZSkgJiYgYXNTdHJpbmcoYmFzZSktPmNh
bkdldEluZGV4KGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1N0cmlu
ZyhiYXNlKS0+Z2V0SW5kZXgoZXhlYywgaW5kZXgpKTsKIApAQCAtNTQ4LDE1ICs1NTAsMTUgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogICAgIG9wZXJhdGlvblB1
dEJ5VmFsSW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2Rl
ZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJy
YXkqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihn
bG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGlu
ZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0g
ICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNl
dEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTU2NSwxNSArNTY3LDE1
IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJy
YXksIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJh
eSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAg
IC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0
aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsK
LSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNh
blNldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+
cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMjc1LDIwICsx
Mjc3LDI5IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3QKIAogY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0
eSAqIHNpemVvZihKU1ZhbHVlKSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJl
c3VsdCkgKyBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKyAxKTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2Us
IDApKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQogewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1bHQ7
Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZy
ZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNo
YXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsgMSkgKyBuZXdTaXplOwor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgbmV3U2l6ZSwgZmFsc2Us
IDApKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVy
Zmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+
Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZM
aW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3Vs
dCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IHNpemVfdCBuZXdTaXplKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93
T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcg
Kzk1LDcgQEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcgogdHlwZWRl
ZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVy
YXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwog
dHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0opKEVuY29kZWRK
U1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUFa
SikoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVk
ZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVk
ZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTA2LDggKzEwNiwxMCBAQCB0eXBlZGVmIHZvaWQgREZH
X09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX1cpKFdh
dGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0
aW9uX0UpKEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK3R5cGVk
ZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdP
cGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciog
REZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwog
CiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBs
ZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBKU0NlbGwqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsK
QEAgLTE0MCw4ICsxNDIsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0
cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5Kiwg
aW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0
cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0
YXRlKiwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CkBAIC0xODcsNiArMTg5LDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0
aW9uSXNGdW5jdGlvbgogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9y
YWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlU
b0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
c2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0
byBsb29rdXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hp
Y2ggaXMKIC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0
byBvbmUgb2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDgs
NyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IAorICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseTogCiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMiArMTk5LDEyIEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsK
ICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVj
dC0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHRHUFIpOworICAgICAgICBzdHVi
Sml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0
R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7
CiAjZW5kaWYKICAgICB9CiAKQEAgLTI1NCwxMyArMjU0LDEwIEBAIHN0YXRpYyBib29sIHRyeUNh
Y2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGZhaWx1cmVDYXNlczsKICAgICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsgCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZz
ZXQoKSksIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJy
YXk6OnNfaW5mbykpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6
c3RvcmFnZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQyNyw3ICs0MjQsNyBAQCBz
dGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5k
aWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
LCBzY3JhdGNoR1BSKTsKICNlbHNlCkBAIC00NzcsNyArNDc0LDcgQEAgc3RhdGljIGJvb2wgdHJ5
QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02
ODUsMTcgKzY4MiwxNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQu
c3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0
b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkp
OwogICAgIH0KICNlbmRpZgogICAgIApAQCAtODM0LDcgKzgzMSw3IEBAIHN0YXRpYyB2b2lkIGVt
aXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAg
ICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BS
MSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFj
cm9Bc3NlbWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXpl
KSwgc2NyYXRjaEdQUjEpKTsKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04NDgsNyArODQ1
LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CiAgICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBA
IC04NTgsOCArODU1LDggQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAg
ICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBl
bHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpOworICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODY3LDkg
Kzg2NCw5IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3Rv
cmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIApAQCAtMTAyNCw2ICsxMDIxLDExIEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcg
dGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAg
ICAgICAgICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhp
bmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5
cGVDaGFpbihleGVjLCBiYXNlQ2VsbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhl
Yyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29t
cGlsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJl
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkp
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlT
dG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0g
bV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
LCBzY3JhdGNoR1BSKTsKIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBw
cm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBh
dGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTI1ODQsOCArMjU4NCwyNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjU5NywyNyArMjYxNSwyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhl
IGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5LAotICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2lu
dC4KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgIGlmIChub2RlLmFycmF5TW9kZSgpID09IEFycmF5OjpKU0FycmF5KQotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
b3V0T2ZCb3VuZHMpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpID09IEFycmF5OjpKU0FycmF5KQotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgaG9sZSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQob3V0T2ZCb3VuZHMpOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9s
ZSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1
bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI3MDMsNiArMjcxNSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGFscmVhZHlIYW5kbGVkKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhlIGJhc2UgbWF5IG5vdCBi
ZSBuZWNlc3NhcnkgZm9yIHNvbWUgYXJyYXkgYWNjZXNzIG1vZGVzLiBCdXQgd2UgaGF2ZSB0bwor
ICAgICAgICAvLyBrZWVwIGl0IGFsaXZlIHRvIHRoaXMgcG9pbnQsIHNvIGl0J3MgbGlrZWx5IHRv
IGJlIGluIGEgcmVnaXN0ZXIgYW55d2F5LiBMaWtlbHkKKyAgICAgICAgLy8gbm8gaGFybSBpbiBs
b2NraW5nIGl0IGhlcmUuCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
Y2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIGNoaWxkMik7CiAgICAgICAgIApAQCAtMjcxMCw4ICsyNzI1LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAg
Ly8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEg
c2NyYXRjaCByZWdpc3Rlci4KQEAgLTI3MzgsOCArMjc1Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5
b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0g
QXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRB
cnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGlmIChpc0luQm91
bmRzQWNjZXNzKGFycmF5TW9kZSkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CiAK
ICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNzUyLDkgKzI3NjYsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAKICAgICAg
ICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0IGJlIGdyb3dpbmcg
dGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxlbmd0aERvZXNO
b3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9q
aXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CiAKICAgICAgICAgICAgIGxl
bmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0KTsKQEAgLTI3NjMsNyArMjc3Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8v
IFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKIAotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJh
eTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nl
c3MoYXJyYXlNb2RlKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKQEAgLTI5MzIsMTcgKzI5NDYsMTcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgp
KSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8gaGFu
ZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAg
ICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZWZWN0
b3JMZW5ndGgoKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgbV9qaXQu
b3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgCkBAIC0yOTY4LDE4ICsyOTgyLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVu
ZGVmaW5lZENhc2VzOwogICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6b2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgdmFsdWVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3Rv
cmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6Om9mZnNldE9mTGVuZ3RoKCkpKTsKIAogICAgICAgICBzZXRVbmRlZmlu
ZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dmFsdWVHUFIpKTsKICAgICAgICAgCkBAIC0zNTY1LDE0ICszNTc5LDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNl
IEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7CiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
CiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzkxNSw3ICszOTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogI2VuZGlmCiAgICAgICAgIG1faml0Lm5lZzMyKHJlc29sdmVJbmZv
R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzb2x2ZUluZm9HUFIsIHJl
c29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
Z2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BS
LCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoaW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOSArMzE1LDMwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2luZm87CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOiB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNhdGVzIHRoZSBjb2Rl
IGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKLSAgICAgICAgLy8gc3Vi
c3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisgICAgY2FzZSBOT05fQVJSQVlfQVJS
QVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAgICAgCisgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0
ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2g4
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmNsYXNz
SW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwogICAgICAgICByZXR1cm47CkBAIC0zMDA2LDExICszMDE3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0
b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNB
cnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0gICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7CkBAIC0zMTI1LDEzICszMTMxLDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkp
OwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6SlNB
cnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRSZWcpOworICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdl
OjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMyMjcsNiArMzIzMiwy
MCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQog
eworICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkucHJldmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIpOworICAgICAg
ICAKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwogICAgICAgICAKQEAgLTMyNDgsMTMgKzMyNjcsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBz
bG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwogICAgICAgICAKLSAgICBtX2pp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBt
X2NvbXBpbGVJbmRleCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgc2l6ZV90IG9sZFNpemUgPSBu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRT
aXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUu
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBuZXdT
aXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICBTdG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKQEAgLTMyNjcsOSArMzMwNCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGg7CiAgICAgICAgIAotICAgIHNpemVfdCBvbGRTaXplID0gbm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6
ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpKTsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRv
ciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAgICAg
ICAKICAgICBtX2ppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmlu
Zywgc2NyYXRjaEdQUjIpOwpAQCAtMzI4MCwxMyArMzMxNCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1Np
emUpKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1
ZSkpKTsKICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hH
UFIxID0gc2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQ
UiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2
b2lkKikpKSk7CiAgICAgfQotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdl
KCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgCiAgICAgc3Rv
cmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI3
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTU2LDYgKzExNTYsMTYgQEAgcHVibGljOgogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCk7CisgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
T1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3Qs
IFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTEzNzMsNyArMTM4
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0xNjc2LDcgKzE2ODYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJ
XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24s
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5
bG9hZCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VPWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxv
YWQsIGFyZzNUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhvcGVyYXRpb24pOwpAQCAtMjE2NCw3ICsyMTc0LDcgQEAgcHVibGljOgogICAgICAgICBtX2pp
dC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2lu
Zm8pLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZv
T2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdz
IHByb3BlcnR5IHN0b3JhZ2UgcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBt
X2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsK
ICAgICB9CiAKICAgICAvLyBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVx
dWFsIHRvIHNjcmF0Y2gsIHNvIGxvbmcgYXMgeW91J3JlIGZpbmUKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
LSAgICAgICAgICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAg
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IGJvb2wgaXNPdmVyc2l6ZShzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNp
emVCbG9ja0Zvcih2b2lkKiBwdHIpOwogCi0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVT
bG93Q2FzZShzaXplX3QsIHZvaWQqKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJv
b2xlYW4gdHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFy
cmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2
b2lkIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCBy
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRl
QmFzaWNTdG9yYWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQpOworICAgICAgICB2b2lkIGVt
aXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwg
UmVnaXN0ZXJJRCByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVt
aXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBS
ZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXko
dW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxs
UmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cgogICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoJkNsYXNzVHlwZTo6c19pbmZvKSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6Y2xh
c3NJbmZvT2Zmc2V0KCkpKTsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3Bl
cnR5IHN0b3JhZ2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJl
c3MocmVzdWx0LCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
SklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJl
c3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2Jq
ZWN0PEpTRmluYWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBz
aXplLCBSZWdpc3RlcklEIHJlc3VsdCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFz
aWNTdG9yYWdlKHNpemVfdCBzaXplLCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVy
SUQgcmVzdWx0KQogewogICAgIENvcGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFs
RGF0YS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAKQEAgLTQ0MywzNyArNDQzLDMyIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKICAgICBzdG9yZVB0cihyZXN1
bHQsICZhbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbmVnUHRyKHJlc3VsdCk7
CiAgICAgYWRkUHRyKEFic29sdXRlQWRkcmVzcygmYWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2Fk
RW5kKSwgcmVzdWx0KTsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOwor
ICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoc2l6ZSAtIG9mZnNldEZyb21CYXNlKSwgcmVzdWx0KTsK
IH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVl
c1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0
ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7CiAgICAgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0
aWFsU3RvcmFnZSA9IEpTQXJyYXk6OnN0b3JhZ2VTaXplKGluaXRpYWxMZW5ndGgpOworICAgIHNp
emVfdCBpbml0aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihpbml0aWFsTGVuZ3RoKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0
ZSB0aGUgYmFja2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rp
b24gCiAgICAgLy8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24u
Ci0gICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVz
dWx0KTsKKyAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVv
ZihJbmRleGluZ0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhl
IGNlbGwgZm9yIHRoZSBhcnJheS4KICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJy
YXksIGZhbHNlPihUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJy
YXlTdHJ1Y3R1cmUoKSksIGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAgLy8gU3RvcmUg
YWxsIHRoZSBuZWNlc3NhcnkgaW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRy
KHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjphbGxv
Y0Jhc2VPZmZzZXQoKSkpOwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9y
YWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJ
bW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFs
dWVzSW5WZWN0b3JPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCks
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQs
IEFycmF5U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFw
T2Zmc2V0KCkpKTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9y
YWdlLgotICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRk
cmVzcyhjZWxsUmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIAotICAgIC8v
IFN0b3JlIHRoZSB2ZWN0b3IgbGVuZ3RoIGFuZCBpbmRleCBiaWFzLgotICAgIHN0b3JlMzIoSW1t
MzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjZWxs
UmVzdWx0LCBKU0FycmF5OjppbmRleEJpYXNPZmZzZXQoKSkpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSB0aGUgc3BhcnNlIHZhbHVlIG1hcC4KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBB
ZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OnNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkpKTsKLQot
ICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCisgICAgLy8gU3RvcmUgdGhlIHZh
bHVlcyB3ZSBoYXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFn
ZVB0cik7CkBAIC00ODUsMTYgKzQ4MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRl
SlNBcnJheSh1bnMKICAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VS
ZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9Ci0KLSAg
ICAvLyBaZXJvIG91dCB0aGUgcmVtYWluaW5nIHNsb3RzLgotICAgIGZvciAodW5zaWduZWQgaSA9
IGxlbmd0aDsgaSA8IGluaXRpYWxMZW5ndGg7IGkrKykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICogaSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50PihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAq
IGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNlbmRp
ZgotICAgIH0KIH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY2OCw3ICsxNjY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0
aQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXpl
KGxlbmd0aCkpKSB7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsK
ICAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjg3LDcgKzE2ODcs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYg
dGhlIGFsbG9jYXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRo
ZSBwcm9wZXIgc3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5Lgog
ICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlm
IChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkK
KyAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwg
MCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRT
cGFjZSBmb3Igc3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2gg
c3BhY2UgaW4gTWFya2VkU3BhY2UgZm9yIGNlbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEy
NzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjUsNiArMTA2NSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICBlbWl0TG9hZFBheWxvYWQoaXRlciwgcmVn
VDEpOwogICAgIAogICAgIC8vIFRlc3QgYmFzZSdzIHN0cnVjdHVyZQorICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgSlNDZWxsOjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZkxlbmd0aEFuZFR5cGUoKSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlKSkpKTsKICAgICBsb2FkMzIoYWRk
cmVzc0ZvcihpKSwgcmVnVDMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsMTAgKzExNCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
KCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNB
cnJheTo6c19pbmZvKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5
OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKIAogICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CkBAIC0xNjIsNyArMTYyLDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIAogICAgIGlm
IChmaW5hbE9iamVjdE1vZGUgPT0gTWF5QmVGaW5hbCkgewogICAgICAgICBKdW1wIGlzSW5saW5l
ID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VD
YXBhY2l0eSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAg
bmVnMzIob2Zmc2V0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lu
bGluZS5saW5rKHRoaXMpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091
dE9mTGluZS5saW5rKHRoaXMpOwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgIH0KICAgICBzaWduRXh0ZW5kMzJU
b1B0cihvZmZzZXQsIG9mZnNldCk7CkBAIC0yMzksMTAgKzIzOSwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQog
ICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUt
PmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09m
ZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
VGVzdFB0cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJl
c3VsdCh0aGlzKTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3Jl
UmVzdWx0LCB0aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
IHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5
U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QxKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAtNDAzLDcg
KzQwMyw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBQ
YXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJl
Q2hlY2spOwogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVy
dHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNw
bGFjZW1lbnRMYWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRy
ZXNzKHJlZ1QwLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFi
ZWwgcHV0UmVzdWx0KHRoaXMpOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0
U3RydWN0dXJlKSkpKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVs
IHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRp
c3BsYWNlbWVudExhYmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5J
TlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwpAQCAtNTA5LDggKzUwOSw4IEBA
IHZvaWQgSklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJl
c3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hl
ZE9mZnNldCkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgYmFzZSk7CisgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6
ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAv
LyBDb21waWxlIGEgbG9hZCBmcm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkg
b3ZlcndyaXRlIGJhc2UuCkBAIC01MjEsOCArNTIxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRE
aXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAq
IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJ
bkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBp
bGVHZXREaXJlY3RPZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCkBAIC01MzIsOCArNTMyLDggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGxvYWRQdHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShj
YWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOwor
ICAgIGxvYWRQdHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY2MCwxMSArNjYwLDExIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVf
UFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5
UHJvZmlsZShzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlKCkpOwogI2VuZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJh
bmNoOChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENo
ZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJy
YXlTdG9yYWdlOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVnVDIpOwogICAgIEp1bXAgZmFpbHVyZUNh
c2VzMiA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMiwgVHJ1c3RlZEltbTMyKDApKTsKIAogICAg
IGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
Nyw4ICsxNTE3LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9wdXRfYgog
ICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNPYmplY3QqIGJhc2UgPSBh
c09iamVjdChiYXNlVmFsdWUpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFj
a0ZyYW1lLmdsb2JhbERhdGE7Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBiYXNl
LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKLSAg
ICBiYXNlLT5zZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0
cnVjdHVyZSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5l
U3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICBiYXNlLT5zZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJu
IGJhc2U7CiB9CkBAIC0yNDM1LDcgKzI0MzUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3Nb
MV0uanNWYWx1ZSgpOwotCisgICAgCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkg
JiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CiAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9
IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blByb3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJp
bmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkpIHsKICAgICAgICAgICAgIENIRUNLX0ZP
Ul9FWENFUFRJT04oKTsKQEAgLTI1MjgsMTIgKzI1MjgsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHV0X2J5X3ZhbAogCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50
MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAg
ICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpz
QXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2Fu
U2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoKmdsb2JhbERh
dGEsIGksIHZhbHVlKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAg
ICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShpKSkKKyAgICAgICAgICAgICAgICBv
YmplY3QtPnNldEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgY2Fs
bEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkp
OworICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmpl
Y3QsIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRl
eChjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1v
ZGUoKSk7CiAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vic2NyaXB0KSkgewpAQCAtMzM4OCw3ICsz
Mzg4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2dldHRlcgogICAgICAg
ICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChn
ZXR0ZXIpKTsKICAgICBpZiAoIXNldHRlci5pc1VuZGVmaW5lZCgpKQogICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdChzZXR0ZXIpKTsK
LSAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
c3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vzc29yKTsKKyAg
ICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcihjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sx
XS5pZGVudGlmaWVyKCksIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CiB9CiAKIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTI3OTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfYnlfaWQKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywg
aWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIExMSU5UX09Q
KDEpID0gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cK
ICAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFi
bGUoKQpAQCAtODc3LDcgKzg3Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9n
ZXRfYnlfaWQKICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9nZXRf
YnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZs
eShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTkzOSw3ICs5MzksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9m
ZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVd
LnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5v
cGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5k
ID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIHBjWzZdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9
IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CkBAIC05NjcsNyArOTY3LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAg
ICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcGNbMF0u
dS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGlu
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQ2LDEyICsxMDQ2LDEyIEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICAKICAgICBpZiAoTElLRUxZKHN1YnNj
cmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUlu
dDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAg
SlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgIGlmIChq
c0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRl
eChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAg
ICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNB
cnJheSwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7
CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVj
dCwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAg
ICAgICAgICAgICBMTElOVF9FTkQoKTsKICAgICAgICAgfQogICAgICAgICBiYXNlVmFsdWUucHV0
QnlJbmRleChleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgp
KTsKQEAgLTExMjgsNyArMTEyOCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfZ2V0dGUKICAgICBpZiAoIXNldHRlci5pc1VuZGVmaW5lZCgpKQogICAgICAgICBhY2Nlc3Nv
ci0+c2V0U2V0dGVyKGdsb2JhbERhdGEsIGFzT2JqZWN0KHNldHRlcikpOwogICAgIGJhc2VPYmot
PnB1dERpcmVjdEFjY2Vzc29yKAotICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBleGVjLAog
ICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpLAog
ICAgICAgICBhY2Nlc3NvciwgQWNjZXNzb3IpOwogICAgIExMSU5UX0VORCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05NDcs
MjEgKzk0NywyMSBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgogbWFjcm8gbG9hZFByb3BlcnR5QXRW
YXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHRhZywgcGF5bG9hZCkKICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlP
ZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ2kgcHJvcGVydHlP
ZmZzZXQKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0
b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwg
OF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAor
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcs
IHBheWxvYWQpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5
LCAuaXNJbmxpbmUKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVj
dEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9w
ZXJ0eU9mZnNldAogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxP
YmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgs
IG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFn
ZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFk
ZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXls
b2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6
ZSwgc2xvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtODA2LDIwICs4MDYsMjAgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQ
cm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0QXNQb2lu
dGVyLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0
ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5k
KQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIKLSAgICBsb2FkcCBKU09iamVjdDo6
bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0g
ICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAgbG9hZHAgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9h
ZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRl
cltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCiBl
bmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFz
SW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJ
bnQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6
Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQor
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIHN4aTJwIHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJ
bmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5l
U3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0Zp
bmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkg
KiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0g
ICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3Jh
Z2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVH
bG9iYWwoc2l6ZSwgc2xvdykKQEAgLTExMzYsOCArMTEzNiw4IEBAIF9sbGludF9vcF9nZXRfYnlf
dmFsOgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QyXSwgdDIKICAgICBsb2Fk
cCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDJdLCB0MgogICAgIGJwbmVxIFN0cnVj
dHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MiwgLm9wR2V0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNB
cnJheTo6bV9zdG9yYWdlW3QwXSwgdDMKLSAgICBiaWFlcSB0MSwgSlNBcnJheTo6bV92ZWN0b3JM
ZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJm
bHlbdDBdLCB0MworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhp
bmdIZWFkZXI6Om1fbGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIs
IFBDLCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0s
IHQyCiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CkBAIC0xMjIxLDggKzEyMjEsOCBAQCBf
bGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0
MF0sIHQwCiAgICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QwXSwgdDAK
ICAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDAsIC5vcFB1dEJ5VmFsU2xv
dwotICAgIGJpYWVxIHQyLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MV0sIC5vcFB1dEJ5VmFs
U2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MV0sIHQwCisgICAgbG9hZHAgSlNP
YmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKKyAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGlu
Z0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwog
ICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVt
cHR5CiAub3BQdXRCeVZhbFN0b3JlUmVzdWx0OgogICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0
MwpAQCAtMTIzMyw5ICsxMjMzLDkgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAKIC5vcFB1dEJ5
VmFsRW1wdHk6CiAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3Jb
dDBdCi0gICAgYmliIHQyLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxT
dG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX2F1eFdvcmRbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAgICAgYWRkaSAx
LCB0MiwgdDEKLSAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBdCisgICAg
c3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fYXV4
V29yZFt0MF0KICAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNs
b3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDExIEBAIGVsc2UKICAgICBjb25zdCBQYXlsb2FkT2Zmc2V0ID0gMAogZW5kCiAKKyMgQ29u
c3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KK2NvbnN0IElzQXJyYXkgPSAx
Citjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Citjb25zdCBBbGxBcnJheVR5cGVzID0gMTUKKwog
IyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA1CiBjb25zdCBPYmplY3RUeXBl
ID0gMTMKQEAgLTM0MSw3ICszNDYsNyBAQCBtYWNybyBhbGxvY2F0ZUJhc2ljSlNPYmplY3Qoc2l6
ZUNsYXNzSW5kCiAgICAgICAgIGxvYWRwIGNsYXNzSW5mb09mZnNldFtzY3JhdGNoMV0sIHNjcmF0
Y2gyCiAgICAgICAgIHN0b3JlcCBzY3JhdGNoMiwgW3Jlc3VsdF0KICAgICAgICAgc3RvcmVwIHN0
cnVjdHVyZSwgSlNDZWxsOjptX3N0cnVjdHVyZVtyZXN1bHRdCi0gICAgICAgIHN0b3JlcCAwLCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW3Jlc3VsdF0KKyAgICAgICAgc3RvcmVwIDAsIEpT
T2JqZWN0OjptX2J1dHRlcmZseVtyZXN1bHRdCiAgICAgZW5kCiBlbmQKIApAQCAtNTE2LDcgKzUy
MSw3IEBAIG1hY3JvIHdpdGhJbmxpbmVTdG9yYWdlKG9iamVjdCwgcHJvcGVydHkKIGVuZAogCiBt
YWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5U3RvcmFnZSwgY29udGlu
dWF0aW9uKQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0XSwg
cHJvcGVydHlTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdF0s
IHByb3BlcnR5U3RvcmFnZQogICAgICMgSW5kaWNhdGUgdGhhdCB0aGUgcHJvcGVydHlTdG9yYWdl
IHJlZ2lzdGVyIG5vdyBwb2ludHMgdG8gdGhlCiAgICAgIyBwcm9wZXJ0eSBzdG9yYWdlLCBhbmQg
dGhhdCB0aGUgb2JqZWN0IHJlZ2lzdGVyIG1heSBiZSByZXVzZWQKICAgICAjIGlmIHRoZSBvYmpl
Y3QgcG9pbnRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1NSw3ICsyNTUsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsK
KyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBl
eGVjLCBpKTsKIH0KIAogYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSAKQEAgLTMwOCw3
ICszMDgsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplCiAgICAg
ICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgeWV0IHByZXNlbnQgb24gdGhlIG9iamVjdCwg
YW5kIGlzIG5vdCB5ZXQgbWFya2VkIGFzIGRlbGV0ZWQsIHRoZW4gYWRkIGl0IG5vdy4KICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGlmICgoIXRoaXNPYmplY3QtPmQtPmRlbGV0
ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pICYmICFK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpCi0gICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCksIDApOworICAg
ICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCkpOwogICAgICAgICBpZiAoIUJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIkFycmF5
Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAi
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5o
IgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFycmF5Q29udmVudGlvbnNfaAorI2RlZmlu
ZSBBcnJheUNvbnZlbnRpb25zX2gKKworI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVyLmgiCisjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZIDAKKworLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQorLy8KKy8vIFBy
b3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVl
IGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisv
LyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50
cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdp
dGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUKKy8vIGFzIGFuIHVuc2ln
bmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJB
WV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRo
ZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQKKy8vIGludGVnZXIpIGFy
ZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUg
SlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1l
cmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCisv
LyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdp
bGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFy
c2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2lu
ZworLy8gZmFzaGlvbjoKKy8vCisvLyAgICogV2hlcmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lO
REVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAorLy8g
ICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBw
cm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KKy8vICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
ZWl0aGVyCisvLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUg
c3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YKKy8vICAgICBkYXRhIHRo
YXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hl
cmUgYXQgbGVhc3QKKy8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50
cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgorLy8gICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNU
T1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJl
IHN0b3JlZAorLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCisKKy8vIERlZmluZSB0aGUgbWF4
aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAv
IDIgdG8gZW5zdXJlIHRoYXQKKy8vIHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisjZGVm
aW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRl
eGluZ0hlYWRlcjo6bWF4aW11bUxlbmd0aCkpCisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIHRvIGJl
IG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0IGludHJvZHVjaW5n
CisvLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJkYXI6Ly9wcm9ibGVt
LzU5NzEzOTE+LgorI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEwMDAwVQorI2RlZmlu
ZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSAx
KQorLy8gMHhGRkZGRkZGRiBpcyBhIGJpdCB3ZWlyZCAtLSBpcyBub3QgYW4gYXJyYXkgaW5kZXgg
ZXZlbiB0aG91Z2ggaXQncyBhbiBpbnRlZ2VyLgorI2RlZmluZSBNQVhfQVJSQVlfSU5ERVggMHhG
RkZGRkZGRVUKKworLy8gVGhlIHZhbHVlIEJBU0VfVkVDVE9SX0xFTiBpcyB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgdmVjdG9yIGVsZW1lbnRzIHdlJ2xsIGFsbG9jYXRlCisvLyBmb3IgYW4gYXJyYXkg
dGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2VwY2lmaWVkIGxlbmd0aCAoZS5nLiBhID0gbmV3IEFy
cmF5KDEyMykpCisjZGVmaW5lIEJBU0VfVkVDVE9SX0xFTiA0VQorICAgIAorLy8gVGhlIHVwcGVy
IGJvdW5kIHRvIHRoZSBzaXplIHdlJ2xsIGdyb3cgYSB6ZXJvIGxlbmd0aCBhcnJheSB3aGVuIHRo
ZSBmaXJzdCBlbGVtZW50CisvLyBpcyBhZGRlZC4KKyNkZWZpbmUgRklSU1RfVkVDVE9SX0dST1cg
NFUKKworLy8gT3VyIHBvbGljeSBmb3Igd2hlbiB0byB1c2UgYSB2ZWN0b3IgYW5kIHdoZW4gdG8g
dXNlIGEgc3BhcnNlIG1hcC4KKy8vIEZvciBhbGwgYXJyYXkgaW5kaWNlcyB1bmRlciBNSU5fU1BB
UlNFX0FSUkFZX0lOREVYLCB3ZSBhbHdheXMgdXNlIGEgdmVjdG9yLgorLy8gV2hlbiBpbmRpY2Vz
IGdyZWF0ZXIgdGhhbiBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIGFyZSBpbnZvbHZlZCwgd2UgdXNl
IGEgdmVjdG9yCisvLyBhcyBsb25nIGFzIGl0IGlzIDEvOCBmdWxsLiBJZiBtb3JlIHNwYXJzZSB0
aGFuIHRoYXQsIHdlIHVzZSBhIG1hcC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5EZW5zaXR5
TXVsdGlwbGllciA9IDg7CisKK2lubGluZSBib29sIGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IodW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBudW1WYWx1ZXMpCit7CisgICAgcmV0dXJuIGxlbmd0aCA8
PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIHx8IGxlbmd0aCAvIG1pbkRlbnNpdHlNdWx0aXBsaWVy
IDw9IG51bVZhbHVlczsKK30KKworaW5saW5lIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVy
Rm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAg
SW5kZXhpbmdIZWFkZXIgcmVzdWx0OworICAgIHJlc3VsdC5zZXRBdXhXb3JkKGxlbmd0aCk7Cisg
ICAgcmVzdWx0LnNldExlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3Ro
LCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDggKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlQ
cm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29w
aWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKSVQuaCIKICNpbmNsdWRlICJKU1N0cmluZ0J1aWxkZXIuaCIKQEAgLTExNCw5ICsxMTYs
MTcgQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8gPQogQGVuZAogKi8K
IAorQXJyYXlQcm90b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGV4ZWMtPmds
b2JhbERhdGEoKSwgMCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQ
cm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcHJvdG90
eXBlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7
Cit9CisKIC8vIEVDTUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBK
U0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCitBcnJheVByb3Rv
dHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNBcnJheShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAg
LTI5Miw4ICszMDIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXgoaykpCi0g
ICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7CisgICAgICAgIGlmICh0
aGlzT2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBlbGVtZW50ID0gdGhp
c09iai0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbGVt
ZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQxMywxMCArNDIzLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlj
a2x5KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvV1RGU3RyaW5nSW5s
aW5lKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2MzgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEp
OwogCi0gICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYg
IWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYgKHRoaXNPYmotPmNs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3Bh
cnNlSW5kZXhpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlv
bihleGVjLCBjYWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJheSh0aGlzT2Jq
KS0+c29ydE51bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAg
ICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4OCw5ICs3OTgsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRD
YWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFk
RXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgo
aykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5k
ZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGsp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1NiwxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMs
IGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9u
KCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgo
aykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5
KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAs
IGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC05MDksMTEgKzkxOSwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMp
OwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsr
aykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFy
Z3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBj
YWNoZWRDYWxsLmNhbGwoKTsKQEAgLTk2NSwxMSArOTc1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5
KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAg
ICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7
Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBw
bHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdl
dEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXkt
PmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwg
dGhpc09iaik7CiAKQEAgLTEwMTcsMTEgKzEwMjcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhp
c09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBh
cnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgw
LCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2Fs
bC5jYWxsKCk7CkBAIC0xMDc1LDggKzEwODUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAg
ICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJy
YXktPmNhbkdldEluZGV4KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgoMCk7Cisg
ICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseSgwKSl7CisgICAg
ICAgIHJ2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseSgwKTsKICAgICAgICAgaSA9IDE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMDk3
LDggKzExMDcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKICAgICAgICAgICAgIEpTVmFsdWUgdjsK
LSAgICAgICAgICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4KGkpKSkKLSAgICAgICAg
ICAgICAgICB2ID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgaWYgKExJS0VMWShh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKSkKKyAgICAgICAgICAgICAgICB2ID0gYXJyYXkt
PmdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBi
cmVhazsgLy8gbGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBm
YWxsYmFjayB0byBzbG93IHBhdGgKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MSwgdik7CkBAIC0xMTUyLDggKzExNjIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQog
ICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFy
cmF5LT5jYW5HZXRJbmRleChsZW5ndGggLSAxKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldElu
ZGV4KGxlbmd0aCAtIDEpOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRl
eFF1aWNrbHkobGVuZ3RoIC0gMSkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNr
bHkobGVuZ3RoIC0gMSk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdW5zaWduZWQg
aWR4ID0gbGVuZ3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlkeCkpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGlkeCkpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hp
bGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaWR4KSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlkeCkpOwogICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAgICAgICAgICBy
diA9IGNhY2hlZENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxNyArMjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlw
ZSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJheVByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVByb3RvdHlwZShK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgcHVibGljOgog
ICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgQXJyYXlQcm90
b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheVBy
b3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90
b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CkBAIC00Nyw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAg
ICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheVN0b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiQXJy
YXlDb252ZW50aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkluZGV4
aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBzdHJ1Y3QgaG9s
ZHMgdGhlIGFjdHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3Qg
cG9pbnRzIHRvIGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50
aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0
cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMu
ICBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUg
dGhlIEFycmF5U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hp
ZnQgb3BlcmF0aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUg
YnkgdXNpbmc6CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNW
YWx1ZSkKK3N0cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFy
cmF5U3RvcmFnZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGly
ZWN0bHkgaW5zdGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0
ZXJmbHkuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0
ZXJmbHkqIGJ1dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2Uq
PihidXR0ZXJmbHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hl
YWRlciogaW5kZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3Jh
Z2UoKTsgfQorICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRl
eGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAg
CisgICAgLy8gV2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZl
Y3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGlu
ZGV4aW5nSGVhZGVyKCktPmF1eFdvcmQoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVk
IGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRBdXhXb3JkKGxlbmd0aCk7IH0KKyAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5sZW5ndGgo
KTsgfQorICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGlu
Z0hlYWRlcigpLT5zZXRMZW5ndGgobGVuZ3RoKTsgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mQXV4V29yZCgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJu
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZMZW5ndGgoKTsgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKGNvbnN0IEFycmF5U3RvcmFnZSYgb3RoZXIpCisg
ICAgeworICAgICAgICBtX3NwYXJzZU1hcC5jb3B5RnJvbShvdGhlci5tX3NwYXJzZU1hcCk7Cisg
ICAgICAgIG1faW5kZXhCaWFzID0gb3RoZXIubV9pbmRleEJpYXM7CisgICAgICAgIG1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBvdGhlci5tX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgIG1faW5pdGlhbGl6YXRpb25JbmRleCA9IG90aGVyLm1faW5p
dGlhbGl6YXRpb25JbmRleDsKKyAgICAgICAgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IG90
aGVyLm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZW5kaWYKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpblNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYm
IG1fc3BhcnNlTWFwLT5zcGFyc2VNb2RlKCk7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmll
cjxTcGFyc2VBcnJheVZhbHVlTWFwPiBtX3NwYXJzZU1hcDsKKyAgICB1bnNpZ25lZCBtX2luZGV4
QmlhczsKKyAgICB1bnNpZ25lZCBtX251bVZhbHVlc0luVmVjdG9yOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVu
dCBwdXJwb3Nlcy4KKyAgICB1aW50cHRyX3QgbV9pbml0aWFsaXphdGlvbkluZGV4OworICAgIHVp
bnRwdHJfdCBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICB1aW50cHRyX3QgbV9wYWRkaW5nOworI2VuZGlmCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fdmVjdG9yWzFdOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSAr
IEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkF1eFdvcmQoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9m
SW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZkxlbmd0aCgpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlh
c09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1faW5kZXhC
aWFzKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlTWFwT2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9zcGFyc2VNYXApOyB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCBzaXplRm9yKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEJ1dHRlcmZseV9oCisjZGVmaW5lIEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJJbmRleGlu
Z0hlYWRlci5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHJvcGVy
dHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7Citj
bGFzcyBTbG90VmlzaXRvcjsKK3N0cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEJ1dHRlcmZs
eSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAg
QnV0dGVyZmx5KCkgeyB9IC8vIE5vdCBpbnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAg
c3RhdGljIHNpemVfdCB0b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzID8gaGFzSW5kZXhpbmdIZWFkZXIgOiB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJl
dHVybiAocHJlQ2FwYWNpdHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKyAoaGFzSW5kZXhpbmdIZWFkZXIgPyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIDogMCkg
KyBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBmcm9tQmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0
dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5
ICsgcHJvcGVydHlDYXBhY2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkF1
eFdvcmQoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRl
cjo6b2Zmc2V0T2ZBdXhXb3JkKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6
Om9mZnNldE9mTGVuZ3RoKCk7IH0KKyAgICAKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVV
bmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHBy
b3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEluZGV4
aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9t
KHRoaXMpOyB9CisgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29u
c3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0
b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVy
dHlTdG9yYWdlKCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2Uo
KSBjb25zdCB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5
U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAg
ICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1
cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAg
ICBzdGF0aWMgaW50IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHNpemVvZihJbmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgp
IC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRp
b24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hh
bmdlIGFueQorICAgIC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFs
bG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMg
aXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwg
cG9zc2libGUgYWxsb2NhdGlvbgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUg
YXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAg
Ly8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5
KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJl
Q2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdy
b3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJy
YXkoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5k
ZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90
IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIEJ1dHRlcmZseSogcmVzaXplQXJyYXkoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlv
dSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhp
bmcgaGVhZGVyLgorICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gQnV0dGVyZmx5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
X2gKKyNkZWZpbmUgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJBcnJheVN0
b3JhZ2UuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKQoreworICAgIHZvaWQqIHRlbXA7CisgICAgc2l6ZV90IHNpemUgPSB0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHNpemUsICZ0ZW1wKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZnJv
bUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiBpbmRleGluZ0hlYWRlciwgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3Jl
YXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQorICAgICAgICAqcmVzdWx0LT5pbmRleGlu
Z0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEs
IDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0
aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKKyAg
ICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKSksCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCogQnV0dGVyZmx5OjpiYXNlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIHJldHVybiBiYXNlKGluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Cit9CisKK2lu
bGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKG5ld1By
b3BlcnR5Q2FwYWNpdHkgPiBvbGRQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFj
aXR5LCBuZXdQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIG1lbWNweSgKKyAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIGJhc2UocHJlQ2FwYWNpdHks
IG9sZFByb3BlcnR5Q2FwYWNpdHkpLAorICAgICAgICB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlD
YXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xv
YmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgb2xkUHJv
cGVydHlDYXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUg
QnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2Fw
YWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIGdsb2Jh
bERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpn
cm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwg
c2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFp
bmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFk
ZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHZvaWQqIHRoZUJhc2UgPSBi
YXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXpl
KDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlm
ICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXpl
LCBuZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJh
c2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAg
ICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVy
ZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGlu
Z0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdI
ZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4
aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxE
YXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFk
ZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAvLyBGSVhNRTogVGhpcyBj
b3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgd2UgdXNlZCB0aGUgcHJvcGVydHkg
c2l6ZSwKKyAgICAvLyBub3QgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQqIHRvID0gcmVzdWx0LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAgdm9pZCogZnJvbSA9IHBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0
ZDo6bWluKAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFzSW5k
ZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgdG90
YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNp
emVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisg
ICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5k
ZXhpbmdIZWFkZXIsCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGlu
Z0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBu
dW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTog
SXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNl
ICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1v
cnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdl
J3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9u
IGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXpl
IHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRo
ZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNp
bmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4K
KyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5n
IG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5
IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNv
bXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAt
IG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJv
cGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQg
aW4gdW5zaGlmdCgpLCBhYm92ZS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3RzLAorICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5k
T2YocHJvcGVydHlTdG9yYWdlKCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdHlwZWRlZiB2b2lkICgqR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAg
ICAgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7
CiAKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlv
blB0ciBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lk
ICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBz
dHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlz
T2JqZWN0LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9w
ZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpoYXNJbnN0YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBJbmRleGluZ0hlYWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2lu
Y2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOworY2xhc3MgU3RydWN0dXJlOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3Mg
SW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9y
YWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5z
dXJlIHRoYXQKKyAgICAvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIGVudW0g
eyBtYXhpbXVtTGVuZ3RoID0gMHgxMDAwMDAwMCB9OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkF1eFdvcmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5kZXhpbmdIZWFk
ZXIsIG1fYXV4V29yZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX2xlbmd0aCk7IH0KKyAg
ICAKKyAgICAvLyBUaGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IEluZGV4aW5nSGVhZGVyIGlzIGFs
bCB6ZXJvJ3MgaXMgcGFydCBvZiB0aGUKKyAgICAvLyBjb250cmFjdCBvZiB0aGlzIGNsYXNzIGFu
ZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuIFRoZSBKSVQgYW5kIEdDIGRlcGVuZAorICAgIC8vIG9u
IGl0LgorICAgIEluZGV4aW5nSGVhZGVyKCkKKyAgICAgICAgOiBtX2F1eFdvcmQoMCkKKyAgICAg
ICAgLCBtX2xlbmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAKKyAgICB2b2lkIHNldExlbmd0aCh1
aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1M
ZW5ndGgpOworICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWlu
dDMyX3QgYXV4V29yZCgpIHsgcmV0dXJuIG1fYXV4V29yZDsgfQorICAgIHZvaWQgc2V0QXV4V29y
ZCh1aW50MzJfdCBhdXhXb3JkKSB7IG1fYXV4V29yZCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZs
eSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZy
b20oY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRl
eGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
SW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIq
Pihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFBy
b3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9y
YWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBi
ZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXpl
X3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90IG1fYXV4V29yZDsgLy8g
VGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLgorICAg
IHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5
IHN0b3JhZ2UgYW5kIGl0cyB0eXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAor
CisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXpl
X3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQorewor
ICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9y
YWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2Uo
KS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChM
SUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZpbmUgSW5kZXhpbmdUeXBl
X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CisK
Ky8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8v
IEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBU
aGVzZSBhcmUgdXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBk
aXJlY3RseS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAg
ICAgID0gMTY7IC8vIE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFn
ZSBpbiB0aGUgcGFzdC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwOworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJh
eVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5ICAgICAgICAgICAgICAg
ICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5
U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CisKKy8vIE1hc2sgb2YgYWxs
IHBvc3NpYmxlIHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVz
ICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVk
aW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVz
QW5kSGlzdG9yeSAgPSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kZXhp
bmdUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBKU0FjdGl2YXRpb246
OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhCiAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCksCiAgICAgICAgIGNhbGxGcmFtZS0+c2NvcGUoKQogICAgICkKLSAgICAsIG1fcmVnaXN0ZXJB
cnJheShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgMCkKKyAgICAsIG1fcmVnaXN0ZXJB
cnJheSgwKQogICAgICwgbV9udW1DYXB0dXJlZEFyZ3MobWF4KGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpKQogICAgICwgbV9u
dW1DYXB0dXJlZFZhcnMoZnVuY3Rpb25FeGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQo
KSkKICAgICAsIG1faXNUb3JuT2ZmKGZhbHNlKQpAQCAtNzIsMTIgKzcyLDEyIEBAIHZvaWQgSlNB
Y3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgLy8gTm8gbmVlZCB0byBtYXJrIG91ciByZWdp
c3RlcnMgaWYgdGhleSdyZSBzdGlsbCBpbiB0aGUgUmVnaXN0ZXJGaWxlLgotICAgIFByb3BlcnR5
U3RvcmFnZSByZWdpc3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5LmdldCgp
OworICAgIFByb3BlcnR5U3RvcmFnZSByZWdpc3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9yZWdp
c3RlckFycmF5OwogICAgIGlmICghcmVnaXN0ZXJBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKGJpdHdpc2VfY2FzdDx2b2lkKio+KCZyZWdpc3RlckFy
cmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KHJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5
U2l6ZSgpKTsKLSAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJy
YXksIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOworICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlcnMgPSBy
ZWdpc3RlckFycmF5ICsgdGhpc09iamVjdC0+cmVnaXN0ZXJPZmZzZXQoKTsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgYXJndW1lbnRzIG9iamVjdCwgc2luY2UgaXQgcG9pbnRzIGF0IG91ciBidWZmZXIu
CkBAIC0xMzYsNyArMTM2LDcgQEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJs
ZVB1dAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3Rp
dmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QWN0aXZhdGlvbio+KG9iamVjdCk7CiAKQEAgLTE1MSw4ICsxNTEsOCBAQCB2b2lkIEpTQWN0aXZh
dGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsK
ICAgICB9Ci0gICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBnZXRPd25Qcm9wZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUg
SlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2
YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAg
ICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZSgpOwogICAgICAgICBzaXplX3QgcmVn
aXN0ZXJBcnJheVNpemVJbkJ5dGVzKCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9yZWdp
c3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEg
dmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIg
ZmlsZS4KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBl
bmRlbnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3Bp
ZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIGludCBt
X251bUNhcHR1cmVkQXJnczsKICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzIDogMzA7CiAg
ICAgICAgIGJvb2wgbV9pc1Rvcm5PZmYgOiAxOwpAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAgICAgICAg
ICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdl
dCgpKTsKIAotICAgICAgICBtX3JlZ2lzdGVyQXJyYXkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJl
Z2lzdGVyQXJyYXkpOworICAgICAgICBtX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5Owog
ICAgICAgICBtX3JlZ2lzdGVycyA9IHJlZ2lzdGVyczsKICAgICAgICAgbV9pc1Rvcm5PZmYgPSB0
cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC0yNCwxMyArMjQsMTcgQEAKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUg
IkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwu
aCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8
d3RmL0FWTFRyZWUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KQEAgLTQ1LDQ4MCArNDksMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNU
T1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVz
IG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlv
bnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEg
c3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0v
LwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50
aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRl
Z2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgK
LS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUg
MHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNv
bnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0
IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVu
dGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUg
KGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0
b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4g
IEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZh
c2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhl
IHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxl
c3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGll
cyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgg
PD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgot
Ly8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBh
cnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxk
IGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxl
YXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291
bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVY
IDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQK
LS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9y
YWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxh
dGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVt
IHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQg
aW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBp
biBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5l
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlz
IGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFu
IGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUg
dmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxl
bWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdp
dGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUg
QkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUg
d2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8v
IGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5
IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgot
Ly8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdl
IGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxv
bmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEg
bWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQog
Y29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9i
amVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8g
V2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMg
Z3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUg
dmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUg
aXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3Zl
Lgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZh
bHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwg
bGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCi1zdGF0aWMg
Ym9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQotewotICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKG1lc3NhZ2UpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNBcnJh
eTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKK0J1dHRlcmZseSogY3Jl
YXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewotfQotCi0jZW5kaWYKLQotdm9p
ZCBKU0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0
YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIHVuc2lnbmVkIGluaXRp
YWxWZWN0b3JMZW5ndGggPSBCQVNFX1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0
b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lk
KiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3Rv
cmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0
b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGlu
aXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
MDsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAg
ICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IoMCkpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAg
IHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5j
bGVhcigpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uID0gZmFsc2U7CisgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAg
ICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKICNlbmRpZgotCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVh
dGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBs
YXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxM
ZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFT
RV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdl
U2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwot
ICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFn
ZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3Jh
Z2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3Jh
Z2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBp
bml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsK
LSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0j
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
dHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24g
Y2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpT
QXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3Rl
bmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9j
YXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1
bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQot
ewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRl
QmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5h
ZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0g
ICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpo
ZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRD
YXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpw
dXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFy
cmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+
c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0
IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNh
c2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAg
IC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUg
LSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAg
ICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFj
Y2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRl
clNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0g
ICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIs
IGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBw
ZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBh
cnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERp
cmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBo
YXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5k
ZXhMaWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNp
YmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50cnkuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
aW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29u
c3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHZhbHVl
KTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAg
IHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNP
YmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYg
KCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQotCi1pbmxpbmUg
dm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0
cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFsdWUgcmVzdWx0
ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAoTElLRUxZKCFy
ZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBK
U09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7Ci0gICAg
aWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgQ2FsbERh
dGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxl
KCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBjYWxsKGV4ZWMs
IGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwot
fQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBCYXNlOjpnZXQo
KTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsK
LSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6
YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIG1fc3Bh
cnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9iYWxEYXRhLmhl
YXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0FycmF5OjpkZWFs
bG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBt
X3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlN
b2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGds
b2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIH0KLQotICAg
IGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFwLT5zZXRT
cGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUg
YSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUs
Ci0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0
IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkp
Lml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdlKSkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNf
Y2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHkobmV3U3RvcmFn
ZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+bV9hbGxvY0Jh
c2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9pbmRl
eEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBKU0FycmF5Ojpw
dXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1h
cCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9s
ZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFw
LT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwotICAg
ICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAg
ICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0
cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRv
ci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vz
c29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0
ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAgICAgIGlmIChk
ZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0
b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0
dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNl
dHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAgICAgICAgYWNj
ZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0gICAgICAgIGlm
IChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERh
dGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5S
ZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChkZXNjcmlwdG9y
LmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOwotfQot
Ci0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1l
cmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAgIEFTU0VSVChp
bmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkpIHsKLSAgICAg
ICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJl
Z3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkg
YXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVs
dCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVu
dGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1
cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNv
dWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdT
cGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKLSAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52
YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGlj
dGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0g
ICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0g
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMs
IGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9m
IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElm
IGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVj
dC4KLSAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0
cnVlLCB0aGVuCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNF
eHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7
Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3Io
RGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBv
d24gZGF0YSBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtb
VmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVd
XSBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYg
dGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0
dHJpYnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQg
dG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJl
IGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNz
b3IgcHJvcGVydHkgbmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1d
LCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVz
ID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAt
PmdldChkZWZhdWx0cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFw
LCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2Ut
Pm1fbGVuZ3RoKQotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlm
IGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBp
ZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1
ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNw
b25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVl
IGFsZ29yaXRobSAoOS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAg
ZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8
fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSB0aGVuCi0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAg
IC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlz
IHRydWUuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRy
aWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVq
ZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0
aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29s
ZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1l
cmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVt
ZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1
cmFibGUgcHJvcGVydHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3Jp
cHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJl
ZC4KLSAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAg
IC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2Ny
aXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3Vy
cmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkp
IHsKLSAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBm
aWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZp
Z3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNv
bmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVz
Y3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVk
IFAgb2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFu
IGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBj
b252ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFu
ZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3Bl
cnR54oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVl
cy4KLSAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQg
UCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0
eS4KLSAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNv
bnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0K
LSAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVy
dHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxz
ZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4K
LSAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFi
bGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5p
LiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBh
bmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAg
ICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRh
YmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAg
ICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UsIHRoZW4KLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhl
IFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltb
VmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIGN1cnJlbnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJl
YWRvbmx5IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4g
ZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBh
bnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJl
c2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBF
bHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0
b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZp
Z3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tT
ZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0s
IGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0
b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFi
bGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhl
IFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dl
dF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNj
cmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQu
Z2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmln
dXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2Vu
dCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0
eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0
RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAv
LyAxMy4gUmV0dXJuIHRydWUuCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGJ1dHRlcmZs
eTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMs
IGJvb2wgd3JpdGFibGUpCkBAIC01MjcsOSArNzMsOSBAQCB2b2lkIEpTQXJyYXk6OnNldExlbmd0
aFdyaXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFi
bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVN
YXA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0TGVuZ3RoSXNSZWFk
T25seSgpOwogfQpAQCAtNjMwLDM4ICsxNzYsMTAgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdAogICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVd
XSB0byBpbmRleCArIDEuCiAgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZp
bmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxl
bmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxs
IGFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCi0gICAgICAg
IHJldHVybiBhcnJheS0+ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pOwotfQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkq
PihjZWxsKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3Jh
Z2U7Ci0KLSAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAgICBpZiAoaSA+
IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7
Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFw
LT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnJheS0+ZGVm
aW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2Vw
dGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAg
cmV0dXJuIGFycmF5LT5KU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0KIAogYm9vbCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTY3MiwxMCAr
MTkwLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKgogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAg
IHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIGksIHNsb3QpOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApAQCAtNjg3LDI2ICsy
MDEsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
LSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgICAgICBp
ZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5n
ZXQoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
IH0KIApAQCAtNzE0LDExICsyMDgsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+
KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlm
IChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJ
bnQzMihleGVjKTsKQEAgLTczMywxOTYgKzIyMiw5IEBAIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXQKICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAg
Ly8gRmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICBpZiAoaSA8IHRoaXNPYmpl
Y3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVt
VmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsK
LSAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBsZW5ndGg7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgICAgICsrc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcjsKLQotICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwotICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMl4z
Mi0xIC0gdGhpcyBpcyBub3QgYW4gYXJyYXkgaW5kZXggKHNlZSBFUzUuMSAxNS40KSwgYW5kIGlz
IHRyZWF0ZWQgYXMgYSByZWd1bGFyIHByb3BlcnR5LgotICAgIGlmIChVTkxJS0VMWShpID4gTUFY
X0FSUkFZX0lOREVYKSkgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJv
dyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBjYWxsIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGguCi0gICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIHRoaXNPYmplY3Qt
PmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4
IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0g
bV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2Fz
ZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChM
SUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxl
LCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhl
IHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAg
ICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3Rv
cmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwot
Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcg
YSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChM
SUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAg
ICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlr
ZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAg
ICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhp
cyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAg
ICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9
IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUg
bV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1f
bGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93
aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFw
LT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAg
ICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3Vy
cmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRv
aW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYg
U3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFs
bG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VN
b2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7
Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5j
cmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZh
bHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8g
dGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0g
ICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNs
b3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNs
b3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQotewotICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0g
TUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFn
ZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0g
ICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBh
IHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUg
YXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFy
eSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRl
bnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5
LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5z
aWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhl
IHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xv
YmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9z
dG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRv
IHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAg
ICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNh
bid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJz
ZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5n
bG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICBy
ZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotICAgIH0K
LQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUu
Ci0gICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkgewotICAg
ICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgaWYgKCFpc0V4
dGVuc2libGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0g
UHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5
IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0gICAgICAg
IGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhl
ciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUg
IHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxk
IGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVt
VmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUo
KTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
bGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhl
YywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRl
cmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBz
dG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
dW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBp
bnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsK
LQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFs
dWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFs
dWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQot
ICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05
MzAsMzUgKzIzMiw2IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNo
ZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0
aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVT
bG90KSB7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewot
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
LSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0
LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwot
fQotCiBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikKIHsKICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCo+KGEpOwpAQCAtOTY2LDEyNyArMjM5LDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JR
U29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12
b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3Bl
cnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8v
IGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRp
ZmZlcmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEg
ZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWdu
ZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+
bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAg
fQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3Bh
cnNlVmFsdWVNYXApIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBr
ZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkp
Ci0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5m
aXJzdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNp
emUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQog
CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0
b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExl
bmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3Jl
YXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+
bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVu
Z3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2Ug
aWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2ly
ZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1h
dGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChu
ZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNy
ZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAg
Ly8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAg
aW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsg
KGRlc2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3Ro
ID49IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRM
ZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVu
Z3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xl
bmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50
ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkg
dmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxl
cnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUg
ZWZmaWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3Ro
OwotICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5l
d1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8g
RmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVh
bGxvYyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAg
ICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFn
ZVNpemUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdT
dG9yYWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwot
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0
b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNh
cGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5n
dGguCi0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1
bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFj
aXR5LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCAr
IG5ld0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2Fw
YWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAv
LyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4
Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVu
Z3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwot
ICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50
ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5k
ZXhCaWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50
IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2Us
IHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9j
YXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0g
bmV3QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVh
dmVzIHRoZSBuZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRT
bG93Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAg
IC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGgu
Ci0gICAgQVNTRVJUKGNvdW50ID4gbV9pbmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2Fw
YWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBw
cm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhh
dmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3Rv
cmFnZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtl
eSBtZXRyaWNzOgpAQCAtMTA5NSw4ICsyNjcsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUg
Y3VycmVudCBzaXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5Lgog
ICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBn
cm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxl
bmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQo
dXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBD
aGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJm
bG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTExMDQsOCArMjc2LDggQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9y
TGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3Vt
IG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92
ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNp
dHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlv
biBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2Yg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkg
PSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVx
dWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCkBAIC0xMTE2LDEwICsyODgsMTEgQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld1N0b3Jh
Z2VDYXBhY2l0eTsKICAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZp
Y2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBp
dC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsK
LSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7CisgICAgICAgIG5l
d0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0
b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJl
ZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0
dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBh
Y2l0eTsKICAgICB9CkBAIC0xMTMyLDQ1ICszMDUsNDAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vIElmIGl0IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBh
bW91bnQgdGhhdCB3aWxsIHJlbWFpbiBiYXNlZCBvbiBhbiBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0
aGUKICAgICAvLyB2ZWN0b3Igd2l0aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2
aW91c2x5LgogICAgIHVuc2lnbmVkIHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8
IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKSB7CiAgICAgICAgIC8vIEF0b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5u
b3QgYmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBwb3N0Q2FwYWNp
dHkgPSBtaW4oKG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNp
dHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBj
b250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMg
YmVpbmcgcmVkdWNlZC4KLSAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5t
X2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCk7Ci0g
ICAgfQotCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RD
YXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9y
TGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFn
ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNl
KSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIFN0ZXAgNDoKLSAgICAvLyBDb3B5IGFycmF5IGRh
dGEgLyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5
ICYgZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCi0KLSAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1v
dmVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBz
aGlmdGluZyBkYXRhCi0gICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhC
aWFzKS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAg
ICBtZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3Is
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAg
bWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFy
ZSB3ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNl
ICE9IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFs
bG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9j
QmFzZSA9IG5ld0FsbG9jQmFzZTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVx
dWlyZWRWZWN0b3JMZW5ndGgpOworICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMg
d2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJl
ZHVjZWQuCisgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0
cnVjdHVyZSgpKSB8fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxl
bmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJlcXVp
cmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4Qmlh
cyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIG5ld0lu
ZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgbWVtbW92ZShuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwg
c2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShuZXdCdXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0eVNp
emUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsK
KyAgICAKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgo
bmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2lu
ZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRl
cmZseTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikK
IHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5
KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJl
YWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZv
bGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VW
YWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3Nw
YXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90
IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTE5Nyw3ICszNjUsNyBAQCBib29sIEpTQXJyYXk6
OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0
byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwpAQCAtMTIwNiwxNCArMzc0LDE0IEBAIGJvb2wgSlNB
cnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAg
bWFwLT5yZW1vdmUoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+aXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgICAg
ICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAv
LyBEZWxldGUgcHJvcGVydGllcyBmcm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVuc2lnbmVkIHVz
ZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUg
PSB2YWx1ZVNsb3Q7CkBAIC0xMjIyLDUzICszOTAsNjUgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+bV9s
ZW5ndGggPSBuZXdMZW5ndGg7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7CiAK
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIAot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVuZ3Ro
KSB7Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3Jp
dGVFcnJvcikpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgCisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAoIWxl
bmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CiAK
LSAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgaWYgKGluZGV4IDwgbV92ZWN0
b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAg
ICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVh
cigpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGlmIChp
bmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVT
bG90LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aXNMZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgo
aW5kZXgpOworICAgICAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1Zh
bHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tE
ZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVl
LgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxl
dGUgcHJvcGVydHkuIikpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
Ly8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIENhbGwgdGhl
IFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQg
dHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5k
ZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAg
ICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBzZXRMZW5ndGgo
ZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFu
ZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJu
IGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBlbGVtZW50Owog
fQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNt
YWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3Niw2MyArNDU2LDc3IEBAIEpTVmFsdWUgSlNBcnJheTo6
cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3Ro
IDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRh
dGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewot
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwot
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3Rv
cmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBQdXNo
aW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0
IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0
aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0
aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQ
ZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlm
ICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2gg
d2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0
b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAg
ICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRo
ZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoVU5MSUtF
TFkoc3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAgICAgICBtZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1
ZSwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUu
NC41LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAotICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwot
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBw
dXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKKyAg
ICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
Y291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5z
dXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgCi0gICAgdW5zaWduZWQg
b2xkTGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhv
bGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhl
IGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChvbGRMZW5ndGgg
IT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBp
ZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VJ
bmRleGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFvbGRMZW5n
dGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92
ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNp
Z25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2
ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rv
ckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAg
ICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAg
ICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdl
LCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KLSAgICAg
ICAgICAgIG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoKSB7
CisgICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUo
KSwgY291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTM0MSw1OSArNTM1LDMwIEBAIGJvb2wg
SlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAogYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb3VudCkKIHsK
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5z
dXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9s
ZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUg
Z2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQorICAgIGlmIChs
ZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJz
ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW5kZXhCaWFzID49
IGNvdW50KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAgICAgICBjaGFyKiBu
ZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpIC0gY291bnQg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVtbW92ZShuZXdCYXNl
U3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBtX3N0b3JhZ2UgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0gICAg
ICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdlLT5tX2luZGV4Qmlh
cyA+PSBjb3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgp
LT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNv
dW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xvd0Nhc2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBP
dmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRp
bmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCku
b3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9z
dG9yYWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0aGlzT2JqZWN0
LT5sZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVj
dC0+bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxs
b2NCYXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+bV92ZWN0b3JM
ZW5ndGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVjdG9yLT5zbG90
KCksIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAoYmFzZVN0b3Jh
Z2UgIT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAgICAgICAgICAg
dGhpc09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdl
Kj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1ZhbHVlKSAqIHRo
aXNPYmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFn
ZS0+bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFw
KQotICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0YXRpYyBpbnQg
Y29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewog
ICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIo
KTsKQEAgLTE0MTAsMTEyICs1NzUsMTM3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFp
ckZvclFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRl
eGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQg
PSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KQorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBB
cnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBib29sIGFsbFZhbHVlc0FyZU51
bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBp
ZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGFsbFZh
bHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTs7
CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBib29sIGFs
bFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVy
KCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAgIHJldHVybiBzb3J0
KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlz
IGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJl
IG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAg
ICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJp
bWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAg
ICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lD
aGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICghYWxsVmFsdWVz
QXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hp
Y2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgIC8vIGFs
c28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8g
dXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIg
b2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwg
c2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNv
cnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAK
IHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNTRVJUKCFpblNw
YXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQg
PSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVz
IHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBh
bmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1w
cm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJl
cXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHBy
b3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3Ry
aW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5n
aW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lz
dGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFT
U0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlz
KS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRp
bmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQ
cmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNv
bnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIK
LSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAg
ICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUo
ZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6
aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVl
LCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291
bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252
ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28g
d2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAv
LyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2Ug
cGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAg
ICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBp
ZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgor
ICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2
ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3Rvcigm
dmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVz
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAg
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZh
bHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2Vx
dWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2Vz
IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0u
c2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFw
OjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNv
cnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJh
ZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4g
bG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNp
emUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAg
cXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAv
LyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBh
IHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBz
dGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNv
cnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBG
SVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0
YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEg
c3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBz
b3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9m
KFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYK
LQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGgg
dG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmICht
X3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5j
bHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMp
LT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5
KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0
cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBz
dG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3Jp
Z25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBp
bmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5m
aXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZl
Y3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0K
IAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTcsMjUzICs3ODcs
MjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBK
U0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENh
bGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJU
KCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBG
SVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0
aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBj
b21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAg
IC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5t
X2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5n
dGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9y
TGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAw
KTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVl
PEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQg
aXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0g
ZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVG
dW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxU
eXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRh
OwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
Y2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9u
IG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlm
aWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcg
dGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2ln
bmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBp
Z25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNl
cnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5l
ZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYg
PSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYg
fHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJz
dHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmlu
c2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5l
ZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMg
ZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIu
CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVk
IGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8v
IGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxl
bmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4o
c3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5z
aWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1h
cCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
QVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERl
cHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5j
dGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21w
YXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21w
YXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENh
bGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBh
ZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVG
dW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2
ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQg
ZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51
bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFy
cmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFu
ZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7
IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFs
dWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQot
ICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0g
ICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChu
ZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdo
IHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVu
Z3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51
bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAo
bmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJh
eSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAg
aWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxl
bmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAg
ICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZp
bmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZp
bmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0g
bnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUg
ZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBt
aWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAg
ICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgor
ICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0
ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAg
ICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xl
YXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
ICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVk
KTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBs
ZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5
aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFj
ayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlD
b21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRy
ZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAg
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJh
Y3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAg
ICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9
IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1
bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkK
LSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNr
Q29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2
ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3Rv
cmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVu
Z3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5n
dGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBK
U0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVu
Z3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwot
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsK
LSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0g
ICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAo
OyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWdu
ZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQog
ewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWdu
ZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5n
dGgpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25l
ZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAg
Zm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0g
ICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91
dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVk
ID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5l
ZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAg
IGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8g
ZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRW
ZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1E
ZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VN
YXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3
VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRV
bmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5j
bGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0
b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsK
LQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
IHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAg
QVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VS
VChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAg
ICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
VmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7
ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAg
ICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUg
b2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVu
Y3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5n
dGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7Cisg
ICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAg
ICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewor
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUg
YW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAor
ICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAg
ICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9y
TGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAo
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZp
bmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAo
KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
ZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAK
KyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQo
bnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAg
QVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlm
IChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9
IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3Ro
KTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VS
VChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
LmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFs
bG9jYXRlZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMjEsMTQyICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9o
CiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7
CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZW51bSBQdXREaXJlY3RJ
bmRleE1vZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1dERpcmVjdEluZGV4U2hv
dWxkTm90VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsKLQotICAgIHN0cnVjdCBT
cGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAg
IHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJy
YXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90Jikg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAg
ICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsK
LSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6
OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVp
bnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1h
bCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElz
UmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVm
IE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRS
ZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1f
ZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
Jik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBz
ZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19j
YXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9m
bGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExl
bmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGlj
X2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1h
cAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUq
LCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSk7Ci0gICAg
ICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3Ig
ZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRo
aXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9m
IHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVt
b3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92
ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBt
X21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21h
cC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJl
Z2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFw
IG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRl
ZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFs
IGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQn
cyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1f
dmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNl
IHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQg
aXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBB
cnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlm
dCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBi
eSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2Yo
SlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5z
aWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8v
IFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0
aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsg
ZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMg
dG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0
cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2Vu
ZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51
bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBh
bGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9
OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNs
YXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0g
ICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAs
IG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAg
IGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxP
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAg
ICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9p
ZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAog
ICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3Ry
dWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5LDI2ICs1NywxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGly
ZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBj
b25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAg
ICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJvcGVy
dGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBtb2Rl
ICh0aGUgZGVmYXVsdCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0
eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBh
bGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4
TW9kZSBtb2RlID0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAg
IHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgbW9kZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8v
IE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhw
TWF0Y2hBcnJheS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQs
IGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIwMiwxNDIgKzc1LDg0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVy
biBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAg
ICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5z
aWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0
SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1f
bGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5
U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5D
WQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24p
OwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0
IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9p
bml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAg
ICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMg
bnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAg
ICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAg
ICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBh
cyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0j
aWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhl
IG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5n
dGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgg
PT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVCht
X3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAg
fQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAg
IHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2
b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAg
ICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90
IGxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9k
ZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXpl
KHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0
b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFt
YXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0TGVu
Z3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0gICAgICAgIHZvaWQgcHV0
RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlw
dG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAgICBib29sIGRlZmluZU93bk51
bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNH
bG9iYWxEYXRhJik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCi0gICAg
ICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2Rl
KTsKLQotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJl
ZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNp
Z25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9OwogCi0gICAgICAg
IGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lz
dGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2
YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8v
IFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4K
LSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1h
eWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxs
PwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOworICAgIGlu
bGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAw
LCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdl
LT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgICAgICByZXR1cm4gYnV0dGVyZmx5OworICAg
IH0KIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3BhcnNlVmFsdWVNYXApOyB9Ci0gICAg
ICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhCaWFzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTQXJyYXksIG1faW5kZXhCaWFzKTsgfQotICAgIH07CisgICAgQnV0dGVyZmx5KiBj
cmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAgICAgaW5saW5lIEpTQXJy
YXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5LT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFs
TGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkq
IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0g
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxE
YXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3Rk
OjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0
YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVl
LCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6
ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOworI2lmIENIRUNLX0FSUkFZ
X0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7
CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSB0cnVlOworI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBKU0FycmF5KiBh
c0FycmF5KEpTVmFsdWUpOwpAQCAtMzU2LDMwICsxNzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNDZWxsKiBjZWxsKSB7IHJldHVybiBjZWxsLT5jbGFz
c0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvOyB9CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5
KEpTVmFsdWUgdikgeyByZXR1cm4gdi5pc0NlbGwoKSAmJiBpc0pTQXJyYXkodi5hc0NlbGwoKSk7
IH0KIAotLy8gVGhlIGRlZmluaXRpb24gb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBk
ZXBlbmRhbnQgb24gdGhlIGRlZmluaXRpb24gc3RvcmFnZVNpemUKLS8vIGZ1bmN0aW9uIGJlbG93
IC0gdGhlIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggbGltaXQgaXMgZGVmaW5lZCBzdWNoIHRo
YXQgdGhlIHN0b3JhZ2UKLS8vIHNpemUgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LiAgKHNp
emVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsKLS8v
ICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgbXVzdCBiZSA8
PSAweEZGRkZGRkZGVSAod2hpY2ggaXMgbWF4aW11bSB2YWx1ZSBvZiBzaXplX3QpLgotI2RlZmlu
ZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoMHhGRkZG
RkZGRlUgLSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpCi0KLS8vIFRoZXNlIHZhbHVl
cyBoYXZlIHRvIGJlIG1hY3JvcyB0byBiZSB1c2VkIGluIG1heCgpIGFuZCBtaW4oKSB3aXRob3V0
IGludHJvZHVjaW5nCi0vLyBhIFBJQyBicmFuY2ggaW4gTWFjaC1PIGJpbmFyaWVzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzU5NzEzOTE+LgotI2RlZmluZSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDEw
MDAwVQotI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggKE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEggLSAxKQotICAgIGlubGluZSBzaXplX3QgSlNBcnJheTo6c3RvcmFnZVNpemUodW5z
aWduZWQgdmVjdG9yTGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLSAgICAKLSAgICAgICAgLy8gTUFYX1NUT1JB
R0VfVkVDVE9SX0xFTkdUSCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCBwcm92aWRlZCAodmVjdG9yTGVu
Z3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIC8vIC0gYXMgYXNzZXJ0
ZWQgYWJvdmUgLSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4KLSAg
ICAgICAgc2l6ZV90IHNpemUgPSAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkgKyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpOwotICAgICAgICAvLyBBc3NlcnRpb24gdG8gZGV0ZWN0IGludGVnZXIgb3ZlcmZs
b3cgaW4gcHJldmlvdXMgY2FsY3VsYXRpb24gKHNob3VsZCBub3QgYmUgcG9zc2libGUsIHByb3Zp
ZGVkIHRoYXQKLSAgICAgICAgLy8gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBpcyBjb3JyZWN0
bHkgZGVmaW5lZCkuCi0gICAgICAgIEFTU0VSVCgoKHNpemUgLSAoc2l6ZW9mKEFycmF5U3RvcmFn
ZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpIC8gc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgPT0gdmVjdG9yTGVuZ3RoKSAmJiAoc2l6ZSA+PSAoc2l6ZW9mKEFycmF5U3Rv
cmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpKTsKLSAgICAKLSAgICAgICAg
cmV0dXJuIHNpemU7Ci0gICAgfQotCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBhcnJheVN0cnVjdHVyZSwgY29uc3QgQXJnTGlz
dCYgdmFsdWVzKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
b3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGkK
IAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoYm91
bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0
SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJn
dW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KGkp
KTsKIApAQCAtNjUsNyArNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5k
RnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBw
ZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFy
Z3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1
bWVudChpKSk7CiAKQEAgLTExMiw4ICsxMTIsOCBAQCB2b2lkIEpTQm91bmRGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24oRXhlCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgZXhlY3V0YWJs
ZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCi0gICAg
cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIo
ZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKLSAgICBwdXREaXJlY3RB
Y2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIs
IGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERl
bGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
YWxsZXIsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCiB2b2lkIEpTQm91bmRGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDExIEBAIHZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWMKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBKU0Nl
bGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiBTdHJpbmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQog
ewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmU7
CiAgICAgICAgIH0KLQorICAgICAgICAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAg
ICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJl
LnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgpAQCAtMTYwLDYgKzE2MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJs
ZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJs
ZQogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICAgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBn
ZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25z
dCBKU09iamVjdCopOwogICAgICAgICBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZQogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxl
KCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
dXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI1
NSw3ICsyNTUsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAg
ICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsK
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8
IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMjg0LDcgKzI4NCw3IEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgaWYgKHRoaXNPYmplY3Qt
PmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVF
cnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3Ip
OworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAgICBpZiAodGhpc09iamVj
dC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJl
c3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywg
cHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JH
ZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTMxNiw3ICszMTYsNyBAQCBib29s
IEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3Qp
OwogICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0RnVuY3Rpb24oKSAmJiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgSlNGdW5j
dGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcik7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTM5NiwxNCArMzk2LDE0IEBAIGJvb2wgSlNG
dW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKICAgICAgICAgaWYgKHRoaXNPYmpl
Y3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFC
YXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250
RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRp
b24pOwogICAgICAgICB9CiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgp
IHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVy
KCktPnJldHJpZXZlQXJndW1lbnRzRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CiAgICAg
fSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikg
ewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
KSB7CiAgICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAg
IHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJT
ZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihl
eGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0
dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVj
ayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFs
dWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXJGcm9tVk1Db2RlKGV4ZWMs
IHRoaXNPYmplY3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFeGNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAi
UGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4
cE9iamVjdC5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMjEzLDYgKzIxNCw3IEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICByZWdFeHBTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFNoYXJlZFN5bWJv
bFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RydWN0
dXJlQ2hhaW5TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVDaGFpbjo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAKICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZp
ZXJUYWJsZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDQsNiArMjQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZUNoYWluU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzcGFyc2VB
cnJheVZhbHVlTWFwU3RydWN0dXJlOwogCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRp
ZmllclRhYmxlOwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBHZXR0ZXJTZXR0ZXIqIHBy
b3RvQWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICBwcm90b0FjY2Vz
c29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b0dldHRlcikpOwogICAgIHByb3Rv
QWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIEpTRnVuY3Rpb246OmNyZWF0
ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7Ci0gICAg
bV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNj
ZXNzb3IgfCBEb250RW51bSk7CisgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEFjY2Vz
c29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNj
ZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0
cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKIAogICAgIG1fbmFtZVNjb3BlU3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjEsOCArNTIxLDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBl
bmROZXh0UHJvcAogICAgIGlmIChtX2lzQXJyYXkpIHsKICAgICAgICAgLy8gR2V0IHRoZSB2YWx1
ZS4KICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICAgICAgaWYgKG1faXNKU0FycmF5ICYmIGFz
QXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgICAgICB2
YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleChpbmRleCk7CisgICAgICAg
IGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXhR
dWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5nZXQo
KSktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QobV9vYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFtX29i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChtX29iamVjdC5n
ZXQoKSwgZXhlYywgaW5kZXgsIHNsb3QpKQpAQCAtNjg3LDggKzY4Nyw4IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5kZXhT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAmJiBhcnJheS0+
Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXkt
PmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KGFycmF5KSAm
JiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAg
aW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFycmF5LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4LCBzbG90KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIChl
cmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDEwICsyNCwxMiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMuaCIKQEAgLTM4LDEyICs0MCwxOSBA
QAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3Iu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIlNwYXJzZUFy
cmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisvLyBXZSBrZWVwIHRyYWNr
IG9mIHRoZSBzaXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVz
ZSB0aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93
IHRoZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkg
dGhlIGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5z
aWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93
KEpTQ2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVj
dHVyZSgpOwpAQCAtODYsMjkgKzk1LDgwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1By
b3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlz
aXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJm
bHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgQVNT
RVJUKHN0b3JhZ2VTaXplKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIHNpemVfdCBj
YXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChj
YXBhY2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9m
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZT
dG9yYWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lm
U2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMp
KSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nh
c3Q8UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5
dGVzKSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9m
U3RvcmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9
IGN1cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJj
ZSA9IHN0b3JhZ2UgLSAxOworICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7Cisg
ICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0
eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsK
KyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYg
KHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUlu
Qnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRp
ZXMuCisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3Vy
Y2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBj
b3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7
CiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAg
ICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVl
KTsKICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2Us
IFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAg
ICAgICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbmQgY29w
eSB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1
cmluZ0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJn
ZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZs
eSA9IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9w
ZXJ0aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAg
IC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Is
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXApOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKQEAgLTEyMiw5ICsxODIsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlz
T2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRo
aXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAg
ICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNp
dG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9y
S25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNp
dG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JE
ZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0Miw5ICsyMDIsOSBAQCB2b2lkIEpTRmluYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAg
IHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAg
ICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNp
dG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9y
S25vd25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNp
emUpOwpAQCAtMTYxLDEwICsyMjEsNTAgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29u
c3QgSlNPYmplYwogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUg
ZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBp
bXBsaWVzIHRoYXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlk
ZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA+IE1B
WF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpLCBzbG90KTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RG
b3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0xNzQsNiArMjc0LDEzIEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFT
U0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVh
cCh0aGlzT2JqZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgIAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBp
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUg
cHJvdG90eXBlIGNoYWluCiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzQyLDE0
NiBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNP
YmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJB
WV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwor
ICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJy
YXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rv
ckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFt
ZV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAg
ICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVj
ZXNzYXJ5LgorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgeworICAgICAgICAg
ICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0
LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPmNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpl
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKKwor
ICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2Jh
bERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gc3Rv
cmFnZTsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7
ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1h
cCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAgIC8vIGFuZCBhdHRy
aWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisgICAgICAgIGlmICh2
YWx1ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBpZiAoIW5ld0J1
dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1
dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9
IDA7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDAp
OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9i
YWxEYXRhLCB0aGlzLCBtYXApOworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworfQorCit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRU
eXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xk
VHlwZSwgb2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0
aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFycmF5
U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBBU1NF
UlQoIXJlc3VsdC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCghcmVzdWx0LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgcmVzdWx0LT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICByZXN1bHQtPnNldFZlY3Rv
ckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJlc3VsdC0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
KyAgICByZXN1bHQtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NP
TlNJU1RFTkNZCisgICAgcmVzdWx0LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgIHJl
c3VsdC0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSgpLCBBbGxvY2F0ZUFycmF5U3RvcmFnZSk7CisgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlQXJy
YXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIEJBU0VfVkVDVE9SX0xFTik7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
IGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3Rz
KGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAg
IGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheTogeworICAgICAgICBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCk7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIG1hcC0+c2V0
U3BhcnNlTW9kZSgpOworICAgICAgICByZXR1cm4gYXJyYXlTdG9yYWdlKCk7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTI2OSwxMCArNTEz
LDE4IEBAIGJvb2wgSlNPYmplY3Q6OmFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXQKICAgICByZXR1
cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5hbGxvd3NBY2Nlc3NG
cm9tKGdsb2JhbE9iamVjdCwgZXhlYyk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEFj
Y2Vzc29yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3ZvaWQgSlNPYmplY3Q6OnB1
dERpcmVjdEFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQodmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCwgdmFsdWUsIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBw
dXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZh
bHVlKSk7CiAKQEAgLTMwNCw2ICs1NTYsMTAgQEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlKiBleAogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiAKICAgICBp
ZiAoIXRoaXNPYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSkKICAgICAgICAgdGhpc09i
amVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CkBAIC0zMzIsMTAgKzU4
OCw0NSBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAotYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCitib29sIEpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpKTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIAorICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eToKKyAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGkgPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICh2
YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAg
ICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9z
cGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJh
dG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91
bmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250
RGVsZXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgbWFwLT5yZW1vdmUoaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQpAQCAtNDY1LDYgKzc1Niw1MSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0CiAKIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGll
cyBmaXJzdC4gVGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgorICAg
IC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBm
b3IgZXZlcnkgaW50ZWdlcgorICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxh
cmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKKyAgICAvLyB3aGljaCBh
bG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlO
YW1lQXJyYXkuCisgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3Zl
Y3RvcltpXSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IGtleXM7CisgICAgICAgICAgICBrZXlzLnJlc2VydmVDYXBh
Y2l0eShtYXAtPnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0p
KQorICAgICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aXQtPmZpcnN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0
ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCkpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewogICAgIGdldENsYXNzUHJv
cGVydHlOYW1lcyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
LCBvYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CiAgICAgb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KQEAgLTUxNSw4ICs4NTEsNyBAQCB2b2lkIEpTT2JqZWN0
OjpmcmVlemUoSlNHbG9iYWxEYXRhJiBnbG9iCiAKIHZvaWQgSlNPYmplY3Q6OnByZXZlbnRFeHRl
bnNpb25zKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoaXNKU0FycmF5KHRo
aXMpKQotICAgICAgICBhc0FycmF5KHRoaXMpLT5lbnRlckRpY3Rpb25hcnlNb2RlKGdsb2JhbERh
dGEpOworICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKTsKICAgICBp
ZiAoaXNFeHRlbnNpYmxlKCkpCiAgICAgICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUo
KSkpOwogfQpAQCAtNTczLDExICs5MDgsMTEgQEAgYm9vbCBKU09iamVjdDo6cmVtb3ZlRGlyZWN0
KEpTR2xvYmFsRGF0YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKQorTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7Ci0gICAgaWYgKEpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0
dGVyU2V0dGVyKGxvY2F0aW9uLT5nZXQoKSktPmdldHRlcigpKSB7CisgICAgaWYgKEpTT2JqZWN0
KiBnZXR0ZXJGdW5jdGlvbiA9IGFzR2V0dGVyU2V0dGVyKGdldERpcmVjdE9mZnNldChvZmZzZXQp
KS0+Z2V0dGVyKCkpIHsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVu
Y3Rpb24sIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CisgICAgICAgICAgICBzbG90LnNl
dENhY2hlYWJsZUdldHRlclNsb3QodGhpcywgZ2V0dGVyRnVuY3Rpb24sIG9mZnNldCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXJGdW5jdGlvbik7
CiAgICAgfSBlbHNlCkBAIC02MDMsMjYgKzkzOCw1MjcgQEAgU3RydWN0dXJlKiBKU09iamVjdDo6
Y3JlYXRlSW5oZXJpdG9ySUQoSgogICAgIHJldHVybiBpbmhlcml0b3JJRDsKIH0KIAotUHJvcGVy
dHlTdG9yYWdlIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3ZvaWQgSlNPYmplY3Q6
OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7Ci0gICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsK
KyAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IudmFsdWUoKSkKKyAgICAgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+QWNjZXNzb3I7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAg
ICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQ
cmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgp
OworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
CisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAg
ICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVy
UHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3Qo
KTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKwor
ICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhl
Yyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAg
ICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOwor
CisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vz
c29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1
dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4g
RVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZG
RkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBG
YXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBh
cnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
dGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZh
bHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMg
bWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVl
JworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2Vk
IHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScp
LgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBB
U1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgMCwg
dGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5k
ZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIEFTU0VSVChtYXApOworCisg
ICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMs
IGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9m
IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElm
IGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVj
dC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0
cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNF
eHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7
CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUu
Iik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3Io
RGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBv
d24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtb
VmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVd
XSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYg
dGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0
dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQg
dG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJl
IGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNz
b3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1d
LCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVz
ID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAt
PmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBp
biBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQg
aW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmll
bGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBp
biBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDku
MTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdl
dChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5l
cXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcu
IElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgor
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVj
dCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAg
ICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25m
aWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtb
RW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJs
ZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBv
ZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgp
ICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMg
dHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBp
ZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhh
dmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVz
Y3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAg
ICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVu
dCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVu
dCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBP
IGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9w
ZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3Bl
cnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1d
IGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVz
IHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8v
IDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9t
IGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8v
IFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdz
IFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0
aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURl
c2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAg
ICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURl
c2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4g
SWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRh
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3Jp
dGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZp
ZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0
YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhj
ZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29u
ZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRo
ZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFs
dWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAm
JiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFi
bGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJs
ZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0
ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlw
dG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVl
IHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMg
cHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBm
YWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYg
ZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNj
IGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkg
aXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgp
ICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0
cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRp
bmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8g
dG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVj
LCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRy
dWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0
OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVh
dGUoZ2xvYmFsRGF0YSk7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9i
YWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICAvLyBJ
dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCks
IHNpbmNlCi0gICAgLy8gd2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zaXRpb24u
Cit2b2lkIEpTT2JqZWN0OjpkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKQoreworICAgIGlmIChB
cnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpKQorICAgICAg
ICBhcnJheVN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6
OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdywgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXgg
dGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBN
QVhfQVJSQVlfSU5ERVgpOworICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJz
ZU1hcC5nZXQoKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdl
ID0gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9w
ZXJ0eVN0b3JhZ2UgPSAwOworICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9u
J3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsK
KyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2
ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAg
ICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkp
CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0
aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1
Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxv
Y2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5
IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0g
YWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAt
PnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNs
YWtlIEdDQydzIHRoaXJzdCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0
eXBlLXB1bm5lZCBwb2ludGVycy4KLSAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdl
OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdl
Pih0ZW1wKSArIG5ld1NpemUgKyAxOworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3Nh
cnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkg
Pj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxl
bmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHko
KSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAg
ICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhl
ciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUg
IHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxk
IGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVt
VmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUo
KTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
bGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7CisgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhp
cywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBt
X251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8v
IENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRl
IHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5t
X3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5m
aXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBu
ZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhh
dCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhf
QVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlm
IChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJv
dywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
KGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
ICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9y
YWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOwor
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUp
OworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlT
dG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRE
aXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hv
dWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50
IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8fCBhdHRy
aWJ1dGVzKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisKKyAgICAv
LyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3Bh
cnNlIG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJh
eSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1v
ZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2li
bGUoKSk7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBvbGRQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4pICogb2xkU2l6ZSk7CisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBu
ZWNlc3NhcnkuCisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0
IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8g
Z3JvdyB0aGUgdmVjdG9yLgorICAgICAgICBpZiAoTElLRUxZKAorICAgICAgICAgICAgICAgICFh
dHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgJiYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpCisgICAgICAgICAgICAgICAgJiYgaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3Vj
Y2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9j
YXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9w
ZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1h
cCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBt
b2RlKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0
aCkgeworICAgICAgICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpIHsK
KyAgICAgICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBu
b3Qgd3JpdGFibGUuCisgICAgICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4
U2hvdWxkVGhyb3csIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAg
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0
byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExl
bmd0aChsZW5ndGgpOworICAgIH0KIAotICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwot
ICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7CisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1
c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4K
KyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1v
ZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9u
IGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8
IGF0dHJpYnV0ZXMgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJ
bkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5n
dGgpKQorICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUpOworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNy
ZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBu
dW1WYWx1ZXNJbkFycmF5OworCisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBp
bnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQt
PnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1h
cCgpOworCisgICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYg
KCF2YWx1ZVNsb3QpCisgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAg
ICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZh
bGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisg
ICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBB
cnJheTogeworICAgICAgICBpZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0
ZXMpCisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0
YSkpOworICAgICAgICBpZiAoIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAg
ICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFn
ZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7Cisg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVu
Z3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgs
IHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5n
dGg7CisgICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IHN0ZDo6bWluKGN1cnJlbnRMZW5ndGgs
IDEwMDAwMFUpOworCisgICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAg
ICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFjdXJy
ZW50VmVjdG9yTGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNp
cmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVt
YXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAo
bmV3TGVuZ3RoICogMyArIDEpIC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5j
cmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAg
IC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAg
IGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSAr
IChkZXNpcmVkTGVuZ3RoICYgMSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0
aCA+PSBkZXNpcmVkTGVuZ3RoKTsKKworICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNy
ZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBzdGQ6Om1pbihp
bmNyZWFzZWRMZW5ndGgsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQorCitBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVz
aXJlZExlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQg
bGVuZ3RoOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICB2ZWN0b3JMZW5n
dGggPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0
b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0Ojpp
bmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5l
d0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4g
aW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBh
bnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENh
bGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1v
cmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9M
RU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+
bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5z
aWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisK
KyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2Fz
ZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsK
KyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+
Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3Ro
KSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAo
IW5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0
ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBw
cmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkg
bGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+
PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJh
eSgKKyAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAg
ICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JM
ZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwor
ICAgIHJldHVybiB0cnVlOworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQg
SlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0
eXBlKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygp
OworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFzdG9y
YWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKworICAgIEFTU0VSVChzdG9yYWdlKTsK
KyAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgQVNTRVJUKCFz
dG9yYWdlLT5tX3NwYXJzZU1hcCk7CisKKyAgICB1bnNpZ25lZCBudW1WYWx1ZXNJblZlY3RvciA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5nZXQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaykKKyAgICAg
ICAgICAgICAgICB2YWx1ZS5pc1VuZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhl
IG9iamVjdCB3YXMgZGVhbGxvY2F0ZWQuCisgICAgICAgICAgICArK251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3Rl
bmN5Q2hlY2spCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVj
dG9yID09IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgIEFTU0VSVChudW1WYWx1
ZXNJblZlY3RvciA8PSBzdG9yYWdlLT5sZW5ndGgoKSk7CisKKyAgICBpZiAobV9zcGFyc2VWYWx1
ZU1hcCkgeworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3NwYXJzZVZhbHVlTWFwLT5lbmQoKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3BhcnNlVmFsdWVNYXAtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
QVNTRVJUKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgICAgICAgICBBU1NFUlQoaXQt
PnNlY29uZCk7CisgICAgICAgICAgICBpZiAodHlwZSAhPSBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaykKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKS5pc1Vu
ZGVmaW5lZCgpOyAvLyBMaWtlbHkgdG8gY3Jhc2ggaWYgdGhlIG9iamVjdCB3YXMgZGVhbGxvY2F0
ZWQuCisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLy8gQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKworQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAg
QVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKKworICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQg
dGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQor
ICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUg
c3RydWN0dXJlIGluLXBsYWNlLgorICAgIAorICAgIHJldHVybiBtX2J1dHRlcmZseS0+Z3Jvd1By
b3BlcnR5U3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7
CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTYzMCwxMCArMTQ2Niw0NiBAQCBib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgdW5zaWduZWQgYXR0cmlidXRl
cyA9IDA7CiAgICAgSlNDZWxsKiBjZWxsID0gMDsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIGNlbGwpOwotICAgIGlmIChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCkK
KyAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihvYmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihv
YmplY3QtPmdldERpcmVjdE9mZnNldChvZmZzZXQpLCBhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAg
IGlmIChpdCA9PSBtYXAtPm5vdEZvdW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRvcik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjU4LDcgKzE1MzAsNyBAQCBzdGF0aWMg
Ym9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICAgICAgYWNjZXNz
b3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3IuZ2V0dGVyT2Jq
ZWN0KCkpOwogICAgICAgICAgICAgaWYgKG9sZERlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQog
ICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKLSAgICAgICAgICAgIHRhcmdldC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBh
dHRyaWJ1dGVzIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nl
c3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3Ip
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgSlNWYWx1ZSBu
ZXdWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CkBAIC02ODMsMTAgKzE1NTUsMTkgQEAgc3RhdGljIGJv
b2wgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3Iuc2V0dGVyUHJlc2VudCgpKQogICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmds
b2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7CiAKLSAgICB0YXJnZXQt
PnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhY2Nl
c3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKKyAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vz
c29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE1heUJlSW5k
ZXgoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIHVuc2lnbmVkIGFzSW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwor
ICAgIGlmIChhc0luZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7CisgICAgZWxz
ZQorICAgICAgICBwdXREaXJlY3RJbmRleChleGVjLCBhc0luZGV4LCB2YWx1ZSk7Cit9CisKIGNs
YXNzIERlZmluZU93blByb3BlcnR5U2NvcGUgewogcHVibGljOgogICAgIERlZmluZU93blByb3Bl
cnR5U2NvcGUoRXhlY1N0YXRlKiBleGVjKQpAQCAtNzA0LDI2ICsxNTg1LDI2IEBAIHByaXZhdGU6
CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiB9OwogCi1ib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgLy8gVHJh
Y2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAg
Ly8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9w
ZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5
IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5v
bi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJl
IGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3Jr
LgogICAgIERlZmluZU93blByb3BlcnR5U2NvcGUgc2NvcGUoZXhlYyk7Ci0KKyAgICAKICAgICAv
LyBJZiB3ZSBoYXZlIGEgbmV3IHByb3BlcnR5IHdlIGNhbiBqdXN0IHB1dCBpdCBvbiBub3JtYWxs
eQogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGlmICghb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGN1cnJlbnQpKSB7CisgICAgaWYgKCFtZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgewogICAgICAg
ICAvLyB1bmxlc3MgZXh0ZW5zaW9ucyBhcmUgcHJldmVudGVkIQotICAgICAgICBpZiAoIW9iamVj
dC0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkgewogICAg
ICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBk
ZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIikpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3Igb2xkRGVzY3JpcHRvcjsKICAgICAgICAgb2xkRGVzY3JpcHRvci5zZXRWYWx1ZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNj
cmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRv
cik7CiAgICAgfQogCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0eSgpKQpAQCAtNzQ5LDggKzE2
MzAsOCBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgLy8g
QSBnZW5lcmljIGRlc2NyaXB0b3IgaXMgc2ltcGx5IGNoYW5naW5nIHRoZSBhdHRyaWJ1dGVzIG9m
IGFuIGV4aXN0aW5nIHByb3BlcnR5CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpKSB7CiAgICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRv
cikpIHsKLSAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIHB1dERlc2Ny
aXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3Iu
YXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAg
ICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50
KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC03NjIsOCArMTY0Myw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWMKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5p
c20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpKSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybiBw
dXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7Cisg
ICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSBh
bmQgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQpAQCAtNzg0LDggKzE2NjUsOCBA
QCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpICYmICFkZXNjcmlw
dG9yLnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJy
ZW50KSwgY3VycmVudCk7CisgICAgICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgIH0KIAogICAgIC8vIENo
YW5naW5nIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJv
cGVydHkKQEAgLTgwMiw3ICsxNjgzLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplYwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQot
ICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBvYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGdldERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFhY2Nlc3NvcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gYXNHZXR0
ZXJTZXR0ZXIoYWNjZXNzb3IpOwpAQCAtODEyLDEyICsxNjkzLDM3IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICBp
ZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIG1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgdW5zaWduZWQgYXR0cnMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KTsKLSAgICBvYmplY3QtPnB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0
ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOworICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgLy8gSWYg
aXQncyBhbiBhcnJheSBpbmRleCwgdGhlbiB1c2UgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFn
ZS4KKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICAvLyBjLiBMZXQg
c3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNj
LCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgorICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2Vl
ZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBlLiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAg
Ly8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAv
LyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFs
c2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAg
ICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAgICAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25J
bmRleGVkUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwor
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KHRoaXMsIGV4ZWMsIGksIHNsb3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogSlNPYmplY3Qq
IHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNz
YWdlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE3ICsyNCwyMiBAQAogI2RlZmluZSBKU09iamVjdF9o
CiAKICNpbmNsdWRlICJBcmdMaXN0LmgiCisjaW5jbHVkZSAiQXJyYXlDb252ZW50aW9ucy5oIgor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1
ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlT
bG90LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0
SW5kZXhNb2RlLmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAKLSNpbmNsdWRlICJT
dG9yYWdlQmFycmllci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC03OSw2ICs4NCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQWNjZXNzb3Ig
ICAgID0gMSA8PCA1LCAgLy8gcHJvcGVydHkgaXMgYSBnZXR0ZXIvc2V0dGVyCiAgICAgfTsKIAor
ICAgIENPTVBJTEVfQVNTRVJUKE5vbmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBOb25lX2lz
X2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKFJlYWRP
bmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9ubHlfaXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udEVudW0gPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBEb250RW51bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KyAgICBDT01QSUxFX0FTU0VSVChEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwg
RG9udERlbGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxF
X0FTU0VSVChGdW5jdGlvbiA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEZ1bmN0aW9uX2lzX2Jl
bG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEFjY2Vzc29y
IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgQWNjZXNzb3JfaXNfYmVsb3dfRmlyc3RJbnRlcm5h
bEF0dHJpYnV0ZSk7CisKICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OwogCiAgICAgY2xhc3MgSlNP
YmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKQEAgLTk2LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotCisgICAgICAg
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKQEAgLTEyMCwxOCArMTMyLDE5NiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0
YXRlKik7CiAKKyAgICAgICAgdW5zaWduZWQgZ2V0QXJyYXlMZW5ndGgoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1
dERpcmVjdCogbWV0aG9kczoKKyAgICAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBu
b3QgY29uc3VsdGVkCisgICAgICAgIC8vICAtIGFjY2Vzc29ycyBhcmUgbm90IGNhbGxlZC4KKyAg
ICAgICAgLy8gIC0gaXQgd2lsbCBpZ25vcmUgZXh0ZW5zaWJpbGl0eSBhbmQgcmVhZC1vbmx5IHBy
b3BlcnRpZXMgaWYgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0IGlzIHBhc3NlZCBhcyB0aGUg
bW9kZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgcHJv
cGVydHkgd2l0aCBhdHRyaWJ1dGVzIHdyaXRhYmxlLCBlbnVtZXJhYmxlIGFuZCBjb25maWd1cmFi
bGUgYWxsIHNldCB0byB0cnVlLgorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVzICYmIGNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7
CisgICAgICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIFB1dERpcmVj
dEluZGV4TGlrZVB1dERpcmVjdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBIG5vbi10aHJv
d2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBhbmQgcHV0RGlyZWN0SW5kZXguCisgICAgICAgIHZv
aWQgcHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSk7CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHko
dW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAg
ICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RF
TkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemlu
ZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9
PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRp
YWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0
aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAg
ICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBj
b21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGlu
ayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNo
ZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1f
aW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
KTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0g
ZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFy
c2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAg
ICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVm
aW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5v
dCBjb25zdWx0ZWQKICAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgogICAg
ICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChhZnRlciB0aGUgY2FsbCB0
aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzKQorICAgICAg
ICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4K
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcyk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgICAgICB2b2lkIHB1
dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwot
ICAgICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZvaWQgcHV0RGlyZWN0
QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKTsKIAogICAgICAgICBib29sIHByb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKQEAgLTE0Nyw2ICszMzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHBy
b3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNW
YWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9Q
cmVmZXJlbmNlKSBjb25zdDsKQEAgLTIwMyw4ICszOTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5
U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdl
dCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVy
biBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ug
b3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsg
cmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQyMSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3Rv
cmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3Rv
cmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAg
ICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUo
KSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjUsMjEgKzQ1
OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxlZChnbG9iYWxEYXRh
KTsgfQogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wg
aXNFeHRlbnNpYmxlKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5zaWJsZSgpOyB9Cisg
ICAgICAgIGJvb2wgaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAhaXNFeHRlbnNpYmxlKCkKKyAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5pbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvKCk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIHN0YXRpY0Z1bmN0
aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmll
ZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0
YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2Ug
Z3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0
YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90
IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNH
bG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgc2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJvYmFi
bHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0
cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVy
ZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
Kik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0K
ICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlv
bmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0ODgsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1
dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFU
QSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUyMCw3OCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkg
d2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQg
dHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBK
U09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAg
ICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9p
bmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRP
dXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3Rv
cmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0
dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgaWYg
eW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkK
KyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgICAg
IEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNv
bWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IGlzIGlu
IGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UK
KyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQg
d291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRl
ZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAgICAgIC8v
IGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNl
IEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3Ro
LCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUlu
aXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVmaW5lT3du
Tm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAgICAgIGVudW0gQ29uc2lzdGVuY3lD
aGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lD
aGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVj
a1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZvaWQg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29u
c2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsK
KworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7
CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEm
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkBAIC0zMzYsMTcgKzYwNCwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAg
ICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAK
ICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5h
bChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1
dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0
eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3Qm
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogCiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZmlu
ZFByb3BlcnR5SGFzaEVudHJ5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAg
ICAgIFN0cnVjdHVyZSogY3JlYXRlSW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJik7CisgICAgICAg
IAorICAgICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFy
cmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKKyAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFnZSopOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVjdG9yTGVuZ3RoLCB1bnNp
Z25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKKyAgICAgICAgdW5z
aWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwogCi0gICAg
ICAgIFN0b3JhZ2VCYXJyaWVyIG1fb3V0T2ZMaW5lU3RvcmFnZTsKKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
QnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX3BhZGRpbmc7CiAjZW5kaWYKICAgICB9OwpA
QCAtMzcyLDggKzY1Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gMCkKKyAgICAgICAgICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00NTYsMTEgKzc0
MCw2IEBAIGlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3QKICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTRmluYWxPYmplY3QsIG1faW5saW5lU3RvcmFnZSk7CiB9CiAK
LWlubGluZSBzaXplX3QgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpCi17Ci0g
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9vdXRPZkxpbmVTdG9yYWdlKTsK
LX0KLQogaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzR2xvYmFsT2JqZWN0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbE9iamVjdFR5
cGU7CkBAIC00OTEsMTggKzc3MCwxNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxU
aGlzKCkgY29uCiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBH
bG9iYWxUaGlzVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldE91dE9mTGluZVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmICghc3RvcmFn
ZSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCkpOwotICAgIH0KKyAgICBBU1NFUlQo
IWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhaGFzSW5k
ZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpKTsKICAgICBzZXRTdHJ1Y3R1
cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHN0b3JhZ2UpOworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVyZmx5Owor
fQorCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKEJ1dHRlcmZseSogYnV0dGVyZmx5KQoreworICAgIG1fYnV0dGVyZmx5ID0gYnV0dGVy
Zmx5OwogfQogCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC01NDAsOSArODE4LDkgQEAgaW5saW5l
IEpTT2JqZWN0KiBhc09iamVjdChKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBhc09iamVjdCh2
YWx1ZS5hc0NlbGwoKSk7CiB9CiAKLWlubGluZSBKU09iamVjdDo6SlNPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSBKU09iamVjdDo6
SlNPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KQotICAgICwgbV9vdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHRoaXMsIDApCisgICAgLCBt
X2J1dHRlcmZseShidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTU5MCwxNSArODY4LDE3IEBAIGlubGlu
ZSBKU09iamVjdCogSlNWYWx1ZTo6dG9UaGlzT2JqZWN0KEUKIAogQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgaWYgKFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUo
KS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIGxvY2F0aW9uLT5pc0dldHRlclNldHRl
cigpKQotICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBsb2NhdGlvbik7
CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmdldChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3RPZmZzZXQob2Zmc2V0
KTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
JiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3Qoc2xvdCwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRW
YWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCksIG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7
CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIHZhbHVlLCBvZmZzZXQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGdl
dE93blByb3BlcnR5U2xvdFNsb3coZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogLy8g
SXQgbWF5IHNlZW0gY3JhenkgdG8gaW5saW5lIGEgZnVuY3Rpb24gdGhpcyBsYXJnZSwgZXNwZWNp
YWxseSBhIHZpcnR1YWwgZnVuY3Rpb24sCkBAIC02ODQsNiArOTY0LDcgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNT
RVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQocHJvcGVydHlOYW1lLmFzSW5kZXgoKSA9PSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOwogCiAgICAgaWYgKHN0cnVjdHVyZSgpLT5pc0RpY3Rp
b25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKQEAgLTcxMiwx
MSArOTkzLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAg
ICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFn
ZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9m
TGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3Rv
cmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0
dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAg
ICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24pOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdl
KGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsKKyAgICAgICAgc2V0QnV0dGVy
Zmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKCkpOwogCiAgICAgICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKQEAgLTczMCwxMyArMTAxMSwxMyBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAg
IHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgewotICAgICAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsgCisgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChjdXJy
ZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAg
ICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJlbnRD
YXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5l
d0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIGN1cnJlbnRDYXBh
Y2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKIAogICAgICAgICB2YWxpZGF0
ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpOwotICAgICAgICBzZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0
b3JhZ2UsIHN0cnVjdHVyZSk7CisgICAgICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdC
dXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAgICAgICAgIHB1dERpcmVjdE9mZnNldChnbG9iYWxEYXRh
LCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJh
bnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUs
CiAgICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCkBA
IC04MDMsOSArMTA4NCw5IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRS
ZWEKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3
U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAorICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCiAgICAgICAgIGdsb2JhbERhdGEsIG9sZENhcGFj
aXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIHNldE91dE9mTGlu
ZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBzZXRC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOwogfQogCiBp
bmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5l
Y2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
KQpAQCAtODM5LDExICsxMTIwLDExIEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3Qo
SlNHbG9iYWwKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5p
c0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgUHJvcGVy
dHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Cisg
ICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3
T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKLSAgICBz
ZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIHN0cnVjdHVyZSgpKTsK
KyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7
CiAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogfQogCkBA
IC05MzUsNiArMTIxNiwxMSBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJlZ2lzdGVyOjp3aXRo
Q2FsCiAgICAgcmV0dXJuIHI7CiB9CiAKK2lubGluZSBzaXplX3Qgb2Zmc2V0SW5CdXR0ZXJmbHko
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOworfQor
CiAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBwYXRjaGluZyBjb2RlIHdoZXJlIHlvdSB3YW50IHRv
IGVtaXQgYSBsb2FkIG9yIHN0b3JlIGFuZAogLy8gdGhlIGJhc2UgaXM6CiAvLyBGb3IgaW5saW5l
IG9mZnNldHM6IGEgcG9pbnRlciB0byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZSBwb2ludGVyLgpA
QCAtOTQyLDE0ICsxMjI4LDE0IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVnaXN0ZXI6Ondp
dGhDYWwKIGlubGluZSBzaXplX3Qgb2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkK
LSAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2Uob2Zmc2V0KTsKLSAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpIC0gSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpICsgc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOworICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCk7
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KIAogaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNl
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zm
c2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOwor
ICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJm
bHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBBU1NFUlQoIShKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KQEAgLTk1Nyw3ICsxMjQz
LDcgQEAgaW5saW5lIGludCBpbmRleFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5TwogaW5saW5lIGlu
dCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYg
KGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKyBCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw5
IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKICAgICBpZiAoby0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQogICAg
ICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICAKKyAgICBpZiAoaGFzSW5k
ZXhpbmdIZWFkZXIoby0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgCiAgICAgc2l6ZV90IGNvdW50ID0gbm9y
bWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgbyk7CiAgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVj
dHVyZUNoYWluID0gby0+c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVDaGFpbi0+aGVhZCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CiAgICAgU3ltYm9sVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwpAQCAt
NjUsNyArNjUsNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5CiAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5n
ZXQoKSkpOwogICAgIH0KICAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBwdXRE
aXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2
aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0MiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSA9IDEg
PDwgMzsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSXNFbnZpcm9ubWVudFJlY29yZCA9IDEg
PDwgNDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90ID0gMSA8PCA1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuID0gMSA8PCA2OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzID0gMSA8PCA3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIElu
dGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
PSAxIDw8IDY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gPSAxIDw8IDc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgPSAxIDw8IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFByb2hpYml0c1By
b3BlcnR5Q2FjaGluZyA9IDEgPDwgOTsKIAogICAgIGNsYXNzIFR5cGVJbmZvIHsKICAgICBwdWJs
aWM6CkBAIC03NSw4ICs3Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG92ZXJy
aWRlc0hhc0luc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNI
YXNJbnN0YW5jZSk7IH0KICAgICAgICAgYm9vbCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKTsgfQogICAgICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpIGNvbnN0
IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KTsgfQor
ICAgICAgICBib29sIGludGVyc2VjdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8oKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEludGVyc2VjdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8pOyB9CiAgICAg
ICAgIGJvb2wgb3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25G
bGFnczEoT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbik7IH0KLSAgICAgICAgYm9vbCBvdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzKTsgfQorICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMpOyB9CiAgICAgICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29uc3QgeyBy
ZXR1cm4gaXNTZXRPbkZsYWdzMihQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcpOyB9CiAKICAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBmbGFnc09mZnNldCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJMaXRlcmFsUGFyc2VyLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTY0MCw3
ICs2NDIsMTMgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEb1BhcnNlT2JqZWN0RW5kRXhwcmVzc2lvbjoK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc09iamVjdChvYmplY3RTdGFjay5sYXN0
KCkpLT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXJTdGFjay5sYXN0
KCksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KG9iamVjdFN0YWNrLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lIGlk
ZW50ID0gaWRlbnRpZmllclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
ID0gaWRlbnQuYXNJbmRleCgpOworICAgICAgICAgICAgICAgIGlmIChpICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRl
eChtX2V4ZWMsIGksIGxhc3RWYWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnQs
IGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlID09IFRv
a0NvbW1hKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvUGFyc2VPYmplY3RTdGFydEV4cHJl
c3Npb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNiBAQCBBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKE9iamVjdFByb3RvdHlwCiAKIE9iamVjdFByb3RvdHlwZTo6T2JqZWN0
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHVjdHVyZSkKICAgICA6IEpT
Tm9uRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHVjdHVyZSkKLSAgICAsIG1faGFz
Tm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzKHRydWUpCiB7CiB9CiAKQEAgLTc3LDM0ICs3Niw2
IEBAIHZvaWQgT2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihKU0cKICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwogfQogCi12b2lkIE9iamVjdFByb3RvdHlwZTo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgT2JqZWN0UHJvdG90eXBl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpOwotICAgIEJhc2U6
OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyAmJiBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgdGhpc09i
amVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgPSBmYWxzZTsKLX0KLQotYm9v
bCBPYmplY3RQcm90b3R5cGU6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQotewotICAgIE9iamVjdFByb3RvdHlw
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihvYmplY3QpOwotICAgIGJv
b2wgcmVzdWx0ID0gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5t
X2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyAmJiBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9oYXNO
b1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWJvb2wgT2JqZWN0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKLXsKLSAgICBPYmplY3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1faGFzTm9Q
cm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKLX0KLQogYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQogewogICAgIHJldHVybiBnZXRTdGF0aWNGdW5j
dGlvblNsb3Q8SlNOb25GaW5hbE9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpvYmplY3RQcm90b3R5
cGVUYWJsZShleGVjKSwganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNCArNTAs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE9iamVjdFByb3Rv
dHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKLQogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotCi0gICAgICAgIGJvb2wgbV9oYXNOb1Byb3BlcnRp
ZXNXaXRoVUludDMyTmFtZXM7CiAgICAgfTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRl
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zm
c2V0LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5T2Zmc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBpbmxp
bmUgc2l6ZV90IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShQCiB7CiAgICAgdmFsaWRhdGVPZmZz
ZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
cmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSAtIDI7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDE7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNw
ZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9wZXJ0
eVN0b3JhZ2VfaAorI2RlZmluZSBQcm9wZXJ0eVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKK3R5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gUHJvcGVydHlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFB1dERpcmVjdEluZGV4TW9kZV9oCisjZGVm
aW5lIFB1dERpcmVjdEluZGV4TW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFB1dERp
cmVjdEluZGV4TW9kZSB7IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCwgUHV0RGlyZWN0SW5k
ZXhTaG91bGROb3RUaHJvdywgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyB9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dERpcmVjdEluZGV4TW9kZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDM3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhwTWF0Y2hlc0FycmF5LmgiCiAK
KyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJy
YXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIEFTU0VSVF9D
TEFTU19GSVRTX0lOX0NFTEwoUmVnRXhwTWF0Y2hlc0FycmF5KTsKIAogY29uc3QgQ2xhc3NJbmZv
IFJlZ0V4cE1hdGNoZXNBcnJheTo6c19pbmZvID0geyJBcnJheSIsICZKU0FycmF5OjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwTWF0Y2hlc0FycmF5KX07CiAKK1JlZ0V4
cE1hdGNoZXNBcnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKKyAgICA6
IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1
Y3R1cmUoKSwgYnV0dGVyZmx5KQorICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgICwgbV9zdGF0
ZShSZWlmaWVkTm9uZSkKK3sKKyAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1
dCk7CisgICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Cit9CisKK1Jl
Z0V4cE1hdGNoZXNBcnJheSogUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQp
Cit7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0g
ZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gY3JlYXRlQXJy
YXlCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7Cisg
ICAgUmVnRXhwTWF0Y2hlc0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFJlZ0V4cE1hdGNoZXNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5
KGdsb2JhbERhdGEsIGJ1dHRlcmZseSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1
dCwgcmVnRXhwLCByZXN1bHQpOworICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSwgbV9yZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKIH0KIAogdm9pZCBSZWdFeHBNYXRj
aGVzQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjggKzI4
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDog
cHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJh
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAg
ICAgICAgICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNo
ZXNBcnJheVN0cnVjdHVyZSgpKQotICAgICAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAg
ICAgICAgICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
aW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsKLSAgICAgICAgICAgIG1fcmVnRXhw
LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHApOwotICAgICAgICB9CisgICAgICAgIFJlZ0V4
cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBKU0dsb2JhbE9iamVjdCos
IEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQpOwogCiAgICAgICAgIGVudW0gUmVpZmll
ZFN0YXRlIHsgUmVpZmllZE5vbmUsIFJlaWZpZWRNYXRjaCwgUmVpZmllZEFsbCB9OwogCiAgICAg
cHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMg
UmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogaW5w
dXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1bHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQpOwotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5
KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4o
Z2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGdsb2JhbERhdGEsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKLSAgICAgICAgICAg
IGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBh
cnJheTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVh
dGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAg
ICAgSlNTdHJpbmcqIGxlZnRDb250ZXh0KEV4ZWNTdGF0ZSopOwogICAgICAgICBKU1N0cmluZyog
cmlnaHRDb250ZXh0KEV4ZWNTdGF0ZSopOwpAQCAtNTgsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFn
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYg
KzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIK
IAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCkBAIC0xMTMsMTEgKzExNSwxMSBA
QCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJh
c2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBSZWplY3RfaAorI2RlZmluZSBSZWplY3RfaAorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisj
aW5jbHVkZSAiRXJyb3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBib29sIHJlamVj
dChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCit7CisgICAgaWYgKHRocm93RXhjZXB0aW9uKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gUmVqZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVk
ZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NvbnN0IENsYXNzSW5mbyBTcGFyc2VBcnJheVZhbHVlTWFwOjpzX2luZm8gPSB7ICJTcGFy
c2VBcnJheVZhbHVlTWFwIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTcGFyc2VBcnJh
eVZhbHVlTWFwKSB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVl
TWFwX2gKKyNkZWZpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKKyNpbmNsdWRlICJKU0NlbGwu
aCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9y
LmgiCisjaW5jbHVkZSAiUHV0RGlyZWN0SW5kZXhNb2RlLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGlj
IFdyaXRlQmFycmllcjxVbmtub3duPiB7CisgICAgdHlwZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93
bj4gQmFzZTsKKworICAgIFNwYXJzZUFycmF5RW50cnkoKSA6IGF0dHJpYnV0ZXMoMCkge30KKwor
ICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBn
ZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9y
JikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCA6IHB1
YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCitw
cml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwg
V1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0g
MCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAy
LAorICAgIH07CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSk7CisgICAgflNwYXJzZUFycmF5VmFsdWVNYXAoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSk7CisKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNDZWxs
OjpTdHJ1Y3R1cmVGbGFnczsKKworcHVibGljOgorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgdHlwZWRlZiBNYXA6Oml0ZXJhdG9yIGl0
ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
KyAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKKworICAgIHN0YXRpYyBTcGFy
c2VBcnJheVZhbHVlTWFwKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKTsKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFy
c2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAg
fQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxh
Z3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAg
IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhl
IG1hcAorICAgIHZvaWQgcHV0RW50cnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0
RGlyZWN0SW5kZXhNb2RlKTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQp
OworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsg
fQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0
aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBt
X21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5y
ZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFw
LmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21h
cC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgor
ICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsg
fQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6
ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmlu
ZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJTcGFyc2VB
cnJheVZhbHVlTWFwLmgiCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJS
ZWplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFw
OjpTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICA6IEJh
c2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLmdl
dCgpKQorICAgICwgbV9mbGFncyhOb3JtYWwpCisgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkK
K3sKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6On5TcGFyc2VBcnJheVZhbHVlTWFw
KCkKK3sKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworfQorCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFy
c2VBcnJheVZhbHVlTWFwPihnbG9iYWxEYXRhLmhlYXApKSBTcGFyc2VBcnJheVZhbHVlTWFwKGds
b2JhbERhdGEpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1h
cCo+KGNlbGwpLT5TcGFyc2VBcnJheVZhbHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpOwor
fQorCitpbmxpbmUgU3RydWN0dXJlKiBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1
bnNpZ25lZCBpKQoreworICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0
V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1
bHQgPSBtX21hcC5hZGQoaSwgZW50cnkpOworICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNh
cGFjaXR5KCk7CisgICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAg
ICAgICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAt
IG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSk7CisgICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpwdXRFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZp
bmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8g
SW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhl
IGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0
aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05l
d0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3Vs
dC5pdGVyYXRvcik7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNj
ZXNzb3IpKSB7CisgICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXJyYXksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFs
dWUgYWNjZXNzb3IgPSBlbnRyeS5TcGFyc2VBcnJheUVudHJ5OjpCYXNlOjpnZXQoKTsKKyAgICBB
U1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9
IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0
ZXIpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxE
YXRhKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHZh
bHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwg
YXJncyk7Cit9CisKK2lubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCit7CisgICAg
QWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYg
ZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBh
cmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgor
ICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwg
YW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUg
cmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChtb2Rl
ICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAmJiAh
YXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3Ip
OworICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91
bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlz
IG5vdCBleHRlbnNpYmxlLiIpOworICAgIH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSBhdHRy
aWJ1dGVzOworICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6Omdl
dChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6
OmdldCgpOworICAgIEFTU0VSVCh2YWx1ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2
YWx1ZSktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5k
ZWZpbmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNs
b3QoZ2V0dGVyKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBT
cGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVz
dWx0KTsKKworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRl
cihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0
YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFy
cmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5
RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRl
cyk7CisgICAgcmV0dXJuIEJhc2U6OmdldCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogdGhpc01hcCA9IGpzQ2FzdDxT
cGFyc2VBcnJheVZhbHVlTWFwKj4odGhpc09iamVjdCk7CisgICAgaXRlcmF0b3IgZW5kID0gdGhp
c01hcC0+bV9tYXAuZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdCA9IHRoaXNNYXAtPm1fbWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5z
ZWNvbmQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5
VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNk
ZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIFByb3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogQ29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0
b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tl
ZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIHN0b3JhZ2UpOwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmll
cihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAg
c2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYsIEpTQ2VsbCosIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAg
ICAgICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQo
UHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAg
IG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJh
c2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9y
YWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVy
YXRvciooKSB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
W2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3Qg
aSkgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3Jh
Z2UgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdl
IGdldCgpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSB7IHJl
dHVybiAhbV9zdG9yYWdlOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBt
X3N0b3JhZ2U7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2ICs3OCwxNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlCiAgICAgSlNPYmplY3Q6OnB1dChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKIH0KIAordm9pZCBTdHJpbmdPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUo
KS0+Y2FuR2V0SW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsK
K30KKwogYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogewogICAgIFN0cmlu
Z09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpAQCAt
MTMzLDYgKzE0NCwxNCBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwogfQogCitib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQoreworICAgIFN0
cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKKyAg
ICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5jYW5HZXRJbmRleChpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOworfQorCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBT
dHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkBA
IC02Niw3ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpT
U3RyaW5nKik7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJ
bnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTV3JhcHBlck9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ09iamVjdChKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTdHJpbmdQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNo
ZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlz
aW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1
bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlw
ZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVj
dHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8pCisgICAgLCBt
X2luZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxE
YXRhLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1h
eUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkK
ICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBAQCBjb25zdCBD
bGFzc0luZm8gU3RydWN0dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwp
CiAgICAgLCBtX3R5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbikK
KyAgICAsIG1faW5kZXhpbmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0
aGlzLCBqc051bGwoKSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcsNiArMTk5LDcg
QEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZp
b3VzKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0
dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8oKSkKKyAgICAs
IG1faW5kZXhpbmdUeXBlKHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkp
CiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJv
dG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAg
LCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0yNTEs
NiArMjU0LDggQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogCiAg
ICAgZm9yIChwdHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyAtLWkp
IHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgaWYgKCFzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
UHJvcGVydHlNYXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRy
aWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdl
dCgpKTsKICAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwogICAgIH0KQEAgLTUw
Miw2ICs1MDcsMzggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAgaWYg
KFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNp
dGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNT
RVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09
IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAg
fQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2
aW91cyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5cGUgPSBpbmRl
eGluZ1R5cGU7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQorICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5t
X3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91cykKKyAgICAgICAg
ICAgIHRyYW5zaXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKCk7Cisg
ICAgfQorICAgIAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERh
dGEsIHRyYW5zaXRpb24pOworICAgIHJldHVybiB0cmFuc2l0aW9uOworfQorCiAvLyBJbiBmdXR1
cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wgU3RydWN0dXJlOjpp
c1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5o
IgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcgKzY5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZv
KiwgSW5kZXhpbmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAwLDYgKzEwMSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
ZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5z
aXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsK
IAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBib29sIGlz
RnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAg
ICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0
KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGlu
Z1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3Qp
OyB9CkBAIC0zMzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlw
ZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIApAQCAt
MzYzLDcgKzM3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIElu
ZGV4aW5nVHlwZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAg
ICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKIApAQCAtNDE2
LDYgKzQyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAgICAgICBUeXBlSW5m
byBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CiAgICAg
ICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0
OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CkBAIC00NDcsNyAr
NDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1faGFzTm9uRW51bWVy
YWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZp
b3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDIyOwog
ICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6IDI7CiAgICAg
ICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAgICB1bnNpZ25lZCBt
X2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJ
bmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUlu
Zm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsK
ICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXAp
KSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZv
LCBjbGFzc0luZm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBp
bmRleGluZ1R5cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBA
QAogI2lmbmRlZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogI2RlZmluZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAi
V2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpT
Q2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbnMgdGhhdCBkb24n
dCBoYXZlIHRvIGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisvLyBTdXBwb3J0IGZvciBh
dHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJv
cGVydGllcy4KKy8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9u
IG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7Cisg
ICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0
ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRyYW5z
aXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxpbmUgSW5kZXhpbmdUeXBl
IG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uIHRyYW5zaXRpb24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBB
bGxvY2F0ZUFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJheVN0
b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBvbGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlIHsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdTaW5nbGVTbG90RmxhZyA9
IDE7CiAKQEAgLTQ0LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7
CiAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+
IEtleTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSBwLnNlY29uZDsKKyAgICAgICAgICAgIGlmIChwLmZpcnN0
KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5
L3JlZ3Jlc3MtMzA0ODI4LmpzCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwgYWN0dWFsLCBz
dW1tYXJ5ICsgCiAKIC8vIHJldmVyc2UKIHZhbHVlICA9ICcxMjMnOwotZXhwZWN0ID0gJzEyMyc7
CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHBy
b3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2Fs
bCh2YWx1ZSkgKyAnJzsKQEAgLTczLDcgKzczLDcgQEAgcmVwb3J0Q29tcGFyZShleHBlY3QsIGFj
dHVhbCwgc3VtbWFyeSArIAogCiAvLyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsKLWV4cGVjdCA9ICdj
YmEnOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25s
eSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zb3J0LmNh
bGwodmFsdWUpICsgJyc7CkBAIC0xMTQsNyArMTE0LDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywg
dmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAnZGVmJzsKLWV4cGVj
dCA9IDY7CitleHBlY3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5LiI7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnVuc2hp
ZnQuY2FsbCh2YWx1ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0xMjgsNyArMTI4LDcgQEAgcmVwb3J0
Q29tcGFyZSgnZGVmJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzaGlmdAogdmFsdWUgID0g
J2FiYyc7Ci1leHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5Lic7
CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHBy
b3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNoaWZ0LmNhbGwo
dmFsdWUpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycsIHZhbHVlLCBz
dW1tYXJ5ICsgJzoKIAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBl
RXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6
IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBh
Y3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEsIDEpICsgJyc7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24g
MTI3OTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDEwICs3MywxMSBAQCBib29sIEFycmF5VmFsdWU6OmdldChzaXpl
X3QgaW5kZXgsIERpY3RpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQXJyYXkqIGFy
cmF5ID0gYXNBcnJheShtX3ZhbHVlKTsKLSAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChpbmRl
eCkpCisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICBpZiAoIWFy
cmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBKU1ZhbHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAg
SlNWYWx1ZSBpbmRleGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAg
ICBpZiAoaW5kZXhlZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWluZGV4ZWRWYWx1ZS5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDcgKzExOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29u
c3QKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0g
YXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkg
aXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTYxMAorICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkp
OwogI2lmIEVOQUJMRShCTE9CKQogICAgICAgICBpZiAoaXRlbS5pbmhlcml0cygmSlNBcnJheUJ1
ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoY29udGV4dCwg
dG9BcnJheUJ1ZmZlcihpdGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsx
MTAsOSBAQCB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJrCiAKICAgICBE
YXNoQXJyYXkgZGFzaDsKICAgICBKU0FycmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7
CisgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBmbG9h
dCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXgoaSkudG9GbG9hdChleGVjKTsKKyAgICAgICAg
ZmxvYXQgZWxlbSA9IHZhbHVlQXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b0Zsb2F0KGV4ZWMp
OwogICAgICAgICBpZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0ZShlbGVtKSkKICAgICAgICAgICAg
IHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdM
aXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw4ICszMyw5IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdG9ET01TdHJpbmdM
aXMKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IHN0cmluZ0xpc3QgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICAv
LyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgc3RyaW5nTGlzdC0+YXBwZW5k
KGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAg
ICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogCiAgICAgcmV0dXJuIHN0cmluZ0xpc3QucmVsZWFzZSgpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5n
TWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCwxMSBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlCiAgICAgcmV0
dXJuICFlYzsKIH0KIAorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCkpOworfQorCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpCiB7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsMTIgKzE2MCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
CiAgICAgLy8gaXMgYWxsb3dlZC4KICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wg
YWxsb3dzQWNjZXNzID0gc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2Jq
ZWN0LT5pbXBsKCksIGVycm9yTWVzc2FnZSk7Ci0KKyAgICAKICAgICAvLyBMb29rIGZvciBvdmVy
cmlkZXMgYmVmb3JlIGxvb2tpbmcgYXQgYW55IG9mIG91ciBvd24gcHJvcGVydGllcywgYnV0IGln
bm9yZSBvdmVycmlkZXMgY29tcGxldGVseQogICAgIC8vIGlmIHRoaXMgaXMgY3Jvc3MtZG9tYWlu
IGFjY2Vzcy4KICAgICBpZiAoYWxsb3dzQWNjZXNzICYmIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KKyAgICAKICAgICAvLyBXZSBuZWVkIHRoaXMgY29kZSBoZXJlIGJl
Y2F1c2Ugb3RoZXJ3aXNlIEpTRE9NV2luZG93QmFzZSB3aWxsIHN0b3AgdGhlIHNlYXJjaCBiZWZv
cmUgd2UgZXZlbiBnZXQgdG8gdGhlCiAgICAgLy8gcHJvdG90eXBlIGR1ZSB0byB0aGUgYmxhbmtl
dCBzYW1lIG9yaWdpbiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdykgY2hlY2sgYXQgdGhl
IGVuZCBvZiBnZXRPd25Qcm9wZXJ0eVNsb3QuCiAgICAgLy8gQWxzbywgaXQncyBpbXBvcnRhbnQg
dG8gZ2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBzdHJhaWdodCBvdXQgb2YgdGhlIERPTVdpbmRvdyBw
cm90b3R5cGUgcmVnYXJkbGVzcyBvZgpAQCAtMjY5LDYgKzI2OSw4MiBAQCBib29sIEpTRE9NV2lu
ZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCitib29s
IEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7Cisg
ICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBoYXZlIGEgbWVzc2FnZSBoZXJlIHRoYXQgZXhwbGFpbnMgd2h5IHRo
ZSBwcm9wZXJ0eSBhY2Nlc3MvZnVuY3Rpb24gY2FsbCB3YXMKKyAgICAgICAgLy8gbm90IGFsbG93
ZWQuIAorICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBjcm9zcy1kb21haW4gYWNjZXNz
IGhlcmUgd2l0aG91dCBwcmludGluZyB0aGUgZ2VuZXJpYyB3YXJuaW5nIG1lc3NhZ2UKKyAgICAv
LyBiZWNhdXNlIHdlIGFsd2F5cyBhbGxvdyBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbiwganVzdCBk
aWZmZXJlbnQgb25lcyBkZXBlbmRpbmcgd2hldGhlciBhY2Nlc3MKKyAgICAvLyBpcyBhbGxvd2Vk
LgorICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBhbGxvd3NBY2Nlc3MgPSBzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSwgZXJyb3JN
ZXNzYWdlKTsKKworICAgIC8vIExvb2sgZm9yIG92ZXJyaWRlcyBiZWZvcmUgbG9va2luZyBhdCBh
bnkgb2Ygb3VyIG93biBwcm9wZXJ0aWVzLCBidXQgaWdub3JlIG92ZXJyaWRlcyBjb21wbGV0ZWx5
CisgICAgLy8gaWYgdGhpcyBpcyBjcm9zcy1kb21haW4gYWNjZXNzLgorICAgIGlmIChhbGxvd3NB
Y2Nlc3MgJiYgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgaW5kZXgsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRl
eCk7CisgICAgCisgICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1lcyBieSBuYW1lIGJlZm9yZSBi
dWlsdC1pbiBwcm9wZXJ0aWVzIHRvCisgICAgLy8gbWF0Y2ggTW96aWxsYS4gVGhpcyBkb2VzIG5v
dCBtYXRjaCBJRSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCisgICAgLy8gbmFtaW5nIGZyYW1lcyB0
aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9wZXJ0aWVzIHRoYXQKKyAgICAvLyBh
cmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2
ZSB0byBkbworICAgIC8vIGl0IHRoZSBNb3ogd2F5LgorICAgIGlmICh0aGlzT2JqZWN0LT5pbXBs
KCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lKSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
Y2hpbGRGcmFtZUdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICAvLyBEbyBwcm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRoYXQgZnVuY3Rpb25zIGFuZCBhdHRy
aWJ1dGVzIGluIHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKKyAgICAvLyBwcmVjZWRlbmNlIG92ZXIg
dGhlIGluZGV4IGFuZCBuYW1lIGdldHRlcnMuICAKKyAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09i
amVjdC0+cHJvdG90eXBlKCk7CisgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
aWYgKGFzT2JqZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkg
eworICAgICAgICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlz
T2JqZWN0LT5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgICAg
IHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBTZWFyY2ggdGhlIHdob2xl
IGZyYW1lIGhpZXJhcmNoeSBzb21ld2hlcmUgYXJvdW5kIGhlcmUuCisgICAgLy8gV2UgbmVlZCB0
byB0ZXN0IHRoZSBjb3JyZWN0IHByaW9yaXR5IG9yZGVyLgorCisgICAgLy8gYWxsb3cgd2luZG93
WzFdIG9yIHBhcmVudFsxXSBldGMuICgjNTY5ODMpCisgICAgaWYgKGluZGV4IDwgdGhpc09iamVj
dC0+aW1wbCgpLT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgeworICAgICAg
ICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKKyAgICAgICAgc2xv
dC5zZXRDdXN0b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWFsbG93c0FjY2VzcykgeworICAgICAg
ICB0aGlzT2JqZWN0LT5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICBz
bG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBBbGxvdyBzaG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdl
cy5JbWFnZTEKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmZy
YW1lKCktPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7
CisgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9t
aWNTdHJpbmcocHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAm
JiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRv
bWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9w
ZXJ0eU5hbWUpKSkgeworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFt
ZWRJdGVtR2V0dGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaW5kZXgsIHNsb3QpOworfQorCiBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAg
ICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3Qp
OwpAQCAtMzYyLDYgKzQzOCwyNSBAQCB2b2lkIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjCiAgICAgICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBKU0RPTVdpbmRvdzo6cHV0QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKworICAgIC8vIE9wdGltaXphdGlvbjog
YWNjZXNzIEphdmFTY3JpcHQgZ2xvYmFsIHZhcmlhYmxlcyBkaXJlY3RseSBiZWZvcmUgaW52b2x2
aW5nIHRoZSBET00uCisgICAgaWYgKHRoaXNPYmplY3QtPkpTR2xvYmFsT2JqZWN0OjpoYXNPd25Q
cm9wZXJ0eUZvcldyaXRlKGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0
LT5pbXBsKCkpKQorICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Q6OnB1dEJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICBCYXNlOjpwdXRC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQor
CiBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0RPTVdpbmRvdyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwpAQCAtMzcxLDYgKzQ2Niwx
NSBAQCBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqCiAgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9
CiAKK2Jvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpTRE9NV2lu
ZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CisgICAgLy8gT25s
eSBhbGxvdyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4u
CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
ZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDYgKzk3LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3du
UHJvcGVydHlTbG8KICAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9
CisKIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTRE9NV2luZG93U2hlbGwq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkBAIC0xMDks
NiArMTE1LDEyIEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0KEpTQ2VsbCogY2VsbCwKICAg
ICB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QtPndp
bmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBKU0RP
TVdpbmRvd1NoZWxsOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgSlNET01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1No
ZWxsKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93KTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXREaXJlY3RWaXJ0
dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBKU0RP
TVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihvYmpl
Y3QpOwpAQCAtMTI3LDYgKzEzOSwxMiBAQCBib29sIEpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVBy
b3BlcnR5KEpTCiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPndpbmRvdygpLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1l
KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwq
PihjZWxsKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93U2hlbGwq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNDOjpKU09iamVjdCop
OwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
ICAgICBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkKTsKICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBK
U0M6OkVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE1IEBAIGJvb2wgSlNIaXN0b3J5OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0hpc3Rvcnk6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lKQoreworICAgIEpTSGlzdG9yeSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0hp
c3RvcnkqPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0
aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywg
dGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNIaXN0b3J5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTSGlzdG9yeSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcg
Kzg5LDggQEAgSlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cG9ydChFeAogc3RhdGlj
IHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
YXJyYXksIENvbnRleHRNZW51JiBtZW51KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgSlNPYmplY3QqIGl0ZW0gPSBhc09iamVj
dChhcnJheS0+Z2V0SW5kZXgoaSkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJy
YXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NTYxMAorICAgICAgICBKU09iamVjdCogaXRlbSA9IGFzT2JqZWN0KGFycmF5LT5nZXRJ
bmRleFF1aWNrbHkoaSkpOwogICAgICAgICBKU1ZhbHVlIGxhYmVsID0gaXRlbS0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgImxhYmVsIikpOwogICAgICAgICBKU1ZhbHVlIHR5cGUgPSBpdGVt
LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAidHlwZSIpKTsKICAgICAgICAgSlNWYWx1ZSBp
ZCA9IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJpZCIpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwxNSBAQCBib29sIEpTTG9jYXRpb246
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wgSlNMb2NhdGlvbjo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNMb2NhdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0xvY2F0aW9uKj4oY2VsbCk7CisgICAgLy8gT25seSBhbGxvdyBkZWxldGluZyBieSBmcmFt
ZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKIHZvaWQgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9u
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNTdG9yYWdl
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKK30KKwogdm9pZCBK
U1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RvcmFnZSo+
KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJT
b2NrZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9j
b2xzQXJyYXkgPSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdo
YXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wg
PSBwcm90b2NvbHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDcgKzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1Rv
SW4KICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVs
ZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlw
dFN0YXRlLCBlbGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50
VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDkgQEAgU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5n
dGhTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4KGluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJz
ZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAg
ICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAg
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsK
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRl
eCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0U3BhcnNlSW5kZXgo
YXJyYXksIGluZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTI3OTM2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTc3NywyMyArNzc3LDI1IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAg
JGltcGxJbmNsdWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgifSA9IDEgaWYgISRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tSGVhZGVyIn0gJiYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSk7CiAKLSAgICBteSAkaGFzR2V0
dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwCi0gICAgICAgICAgICAgICAgIHx8ICEkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifQotICAgICAgICAgICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KLSAg
ICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJp
Y0luZGV4ZWRHZXR0ZXIifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQotICAgICAgICAgICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdEFuZERlc2NyaXB0b3IifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CisgICAg
bXkgJGhhc0NvbXBsZXhHZXR0ZXIgPQorICAgICAgICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQorICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdEFuZERlc2NyaXB0b3IifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CisgICAgCisgICAgbXkgJGhhc0dldHRl
ciA9ICRudW1BdHRyaWJ1dGVzID4gMCB8fCAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiT21pdENvbnN0cnVjdG9yIn0gfHwgJGhhc0NvbXBsZXhHZXR0ZXI7CiAKICAgICAjIEdldHRl
cnMKICAgICBpZiAoJGhhc0dldHRlcikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7XG4iKSBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVy
aWNJbmRleGVkR2V0dGVyIn0pICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21OYW1lZEdldHRlciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIp
IGlmICgkaGFzQ29tcGxleEdldHRlcik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9y
In07CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07CiAgICAg
ICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9
IDE7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJbnRlcnNlY3RzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIn0gPSAxOwogICAgIH0KIAogICAg
ICMgQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgd3JpdGFibGUgcHJvcGVydGllcwpAQCAtODA0LDE1ICs4
MDYsMTcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBteSAk
aGFzU2V0dGVyID0gJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifQotICAg
ICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21O
YW1lZFNldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifTsKKyAgICBteSAkaGFzQ29tcGxleFNldHRl
ciA9CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1
bmN0aW9uIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tTmFtZWRTZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn07CisgICAgICAgIAorICAgIG15ICRoYXNTZXR0ZXIg
PSAkaGFzUmVhZFdyaXRlUHJvcGVydGllcyB8fCAkaGFzQ29tcGxleFNldHRlcjsKIAogICAgICMg
R2V0dGVycwogICAgIGlmICgkaGFzU2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9OworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTtcbiIpIGlmICgkaGFzQ29tcGxleFNldHRlcik7CiAgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBwdXREZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4i
KSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9
OwogICAgIH0KIApAQCAtODQ4LDYgKzg1Miw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAg
IyBDdXN0b20gZGVsZXRlUHJvcGVydHkgZnVuY3Rpb24KICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9OworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9OwogCiAgICAgIyBDdXN0b20gZ2V0UHJv
cGVydHlOYW1lcyBmdW5jdGlvbiBleGlzdHMgb24gRE9NV2luZG93CiAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xNzQxLDIxICsxNzQ2LDc5IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkluZGV4ZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KQotICAgICAgICAgICAgICAgICYmICEkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0KKyAgICAgICAgICAgICAgICB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0KKyAgICAgICAg
ICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93
blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYg
c2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9
IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHByb3Bl
cnR5TmFtZSA8IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1wbCgp
KS0+bGVuZ3RoKCkpIHtcbiIpOwotICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRC
eUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3Rv
bUluZGV4KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIp
O1xuIik7CisKKyAgICAgICAgICAgICMgVGhpcyBhdHRlbXB0cyB0byBzaW5rIHRoZSBzb21ld2hh
dCBleHBlbnNpdmUgaW50LXRvLXN0cmluZyBjb252ZXJzaW9uIHRoYXQgaGFwcGVucyB3aGVuIHdl
IGNyZWF0ZSBQcm9wZXJ0eU5hbWUKKyAgICAgICAgICAgICMgdG8gdGhlIHBvaW50IHdoZXJlIHdl
IGFjdHVhbGx5IG5lZWQgaXQuIEluIHBhcnRpY3VsYXIsIHdoZW4gd2UgZ2VuZXJhdGUgdGhpcyBt
ZXRob2QgZm9yIGNsYXNzZXMgdGhhdCBjYW4KKyAgICAgICAgICAgICMgYXR0ZW1wdCB0aGVpciBp
bmRleGVkIGdldHRlciBmaXJzdCwgd2UgdHJ5IHRvIGVuc3VyZSB0aGF0IGlmIHRoYXQgZ2V0dGVy
IHN1Y2NlZWRzIHRoZW4gd2UgZG9uJ3QgcGF5IGZvciB0aGUKKyAgICAgICAgICAgICMgY3JlYXRp
b24gb2YgdGhlIFByb3BlcnR5TmFtZS4KKyAgICAgICAgICAgIG15ICRnZW5lcmF0ZWRQcm9wZXJ0
eU5hbWUgPSAwOworICAgICAgICAgICAgbXkgJHByb3BlcnR5TmFtZUdlbmVyYXRpb24gPSBzdWIg
eworICAgICAgICAgICAgICAgIGlmICgkZ2VuZXJhdGVkUHJvcGVydHlOYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgJGdlbmVyYXRl
ZFByb3BlcnR5TmFtZSA9IDE7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBteSAkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbiA9IHN1YiB7CisgICAgICAgICAg
ICAgICAgbXkgJHJlcXVpcmVzTWFudWFsTG9va3VwID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik5hbWVkR2V0dGVyIn07CisgICAgICAgICAgICAgICAgaWYgKCRyZXF1aXJlc01hbnVhbExv
b2t1cCkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjb25z
dCBIYXNoRW50cnkqIGVudHJ5ID0gJHtjbGFzc05hbWV9VGFibGUuZW50cnkoZXhlYywgcHJvcGVy
dHlOYW1lKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoZW50cnkpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0
dGVyKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTmFtZWRHZXR0ZXIifSAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJh
dGlvbigpOworICAgICAgICAgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTtcbiIpOworCisgICAg
ICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRl
ciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0
dGVyIn0pIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncygk
aW1wbENsYXNzTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkge1xuIik7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKGluZGV4IDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLT5sZW5ndGgoKSkge1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRl
ciJ9KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcbiIpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0
aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFt
ZUdlbmVyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4o
dGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3Qs
IHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3sid3RmL3RleHQvQXRvbWljU3RyaW5nLmgifSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1l
R2VuZXJhdGlvbigpOworICAgICAgICAgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJh
dGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIn0pIHsKKyAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRp
b24oKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09i
amVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQogCkBAIC0xOTQ2LDE2ICsyMDA5LDMwIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxs
KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybjtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xh
c3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkge1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
VU5VU0VEX1BBUkFNKHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMs
IGluZGV4LCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91
bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KSlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgCisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnB1dEJ5SW5k
ZXgoY2VsbCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRoYXNSZWFkV3JpdGVQcm9wZXJ0
aWVzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBD
bGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJyYXkiLCAmSlNBcnJh
eTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVBcnJheSkgfTsKIAog
UnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisg
ICAgOiBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9h
cnJheSgwKQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxMyArNzMsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBBcnJheSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0FycmF5OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBJbnRlcnNlY3RzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVj
dHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJheShFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5n
aWZ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04t
c3RyaW5naWZ5LmpzCShyZXZpc2lvbiAxMjc5MzYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
c291cmNlcy9KU09OLXN0cmluZ2lmeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzM0LDcgKzMzNCw3
IEBAIGZ1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgewogICAgICAgICBqc29uT2JqZWN0LnN0cmluZ2lm
eSh7YToiYSIsIGI6ImIiLCBjOiJjIiwgMzogImQiLCAyOiAiZSIsIDE6ICJmIn0sIHJlcGxhY2VG
dW5jKTsKICAgICAgICAgcmV0dXJuIHJlcGxhY2VUcmFja2VyOwogICAgIH0pOwotICAgIHJlc3Vs
dFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQgPSAnKHN0cmluZyl7ImEiOiJhIiwiYiI6ImIi
LCJjIjoiYyIsIjMiOiJkIiwiMiI6ImUiLCIxIjoiZiJ9O2Eoc3RyaW5nKSJhIjtiKHN0cmluZyki
YiI7YyhzdHJpbmcpImMiOzMoc3RyaW5nKSJkIjsyKHN0cmluZykiZSI7MShzdHJpbmcpImYiOyc7
CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9ICcoc3RyaW5nKXsiMSI6
ImYiLCIyIjoiZSIsIjMiOiJkIiwiYSI6ImEiLCJiIjoiYiIsImMiOiJjIn07MShzdHJpbmcpImYi
OzIoc3RyaW5nKSJlIjszKHN0cmluZykiZCI7YShzdHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0
cmluZykiYyI7JzsKICAgICByZXN1bHQucHVzaChmdW5jdGlvbihqc29uT2JqZWN0KXsKICAgICAg
ICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgdmFyIGFycmF5ID0gW3t0b1N0cmluZzpmdW5jdGlv
bigpe2NvdW50Kys7IGFycmF5WzBdPSdhJzsgYXJyYXlbMV09J2MnOyBhcnJheVsyXT0nYic7IHJl
dHVybiAnYSd9fV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163018</attachid>
            <date>2012-09-09 15:29:24 -0700</date>
            <delta_ts>2012-09-09 16:11:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>butterflies_patch_36.diff</filename>
            <type>text/plain</type>
            <size>517251</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3MyBA
QAorMjAxMi0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEpTQyBvYmplY3Qg
bW9kZWwuIFByZXZpb3VzbHksIGFsbCBvYmplY3RzIGhhZCBmYXN0IGxvb2t1cCBmb3IKKyAgICAg
ICAgbmFtZWQgcHJvcGVydGllcy4gSW50ZWdlciBpbmRleGVkIHByb3BlcnRpZXMgd2VyZSBvbmx5
IGZhc3QgaWYgeW91IHVzZWQgYQorICAgICAgICBKU0FycmF5LiBXaXRoIHRoaXMgY2hhbmdlLCBh
bGwgb2JqZWN0cyBoYXZlIGZhc3QgaW5kZXhlZCBwcm9wZXJ0aWVzLiBUaGlzIGlzCisgICAgICAg
IGFjY29tcGxpc2hlZCB3aXRob3V0IGFueSBzcGFjZSBvdmVyaGVhZCBieSB1c2luZyBhIGJpZGly
ZWN0aW9uYWwgb2JqZWN0IGxheW91dCwKKyAgICAgICAgYWthIGJ1dHRlcmZsaWVzLiBFYWNoIEpT
T2JqZWN0IGhhcyBhIG1fYnV0dGVyZmx5IHBvaW50ZXIgd2hlcmUgcHJldmlvdXNseSBpdAorICAg
ICAgICBoYWQgYSBtX291dE9mTGluZVN0b3JhZ2UgcG9pbnRlci4gVG8gdGhlIGxlZnQgb2YgdGhl
IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgbV9idXR0ZXJmbHksIHdlIHBsYWNlIGFs
bCBuYW1lZCBvdXQtb2YtbGluZSBwcm9wZXJ0aWVzLiBUbyB0aGUgcmlnaHQsIHdlIHBsYWNlCisg
ICAgICAgIGFsbCBpbmRleGVkIHByb3BlcnRpZXMgYWxvbmcgd2l0aCBpbmRleGluZyBtZXRhLWRh
dGEuIFRob3VnaCwgc29tZSBpbmRleGluZworICAgICAgICBtZXRhLWRhdGEgaXMgcGxhY2VkIGlu
IHRoZSA4LWJ5dGUgd29yZCBpbW1lZGlhdGVseSBsZWZ0IG9mIHRoZSBwb2ludGVkLXRvCisgICAg
ICAgIGxvY2F0aW9uOyB0aGlzIGlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgaW5kZXhpbmcgbWV0
YS1kYXRhIGJlaW5nIHNtYWxsIGVub3VnaAorICAgICAgICBpbiB0aGUgY29tbW9uIGNhc2UgdGhh
dCBtX2J1dHRlcmZseSBhbHdheXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbmRleGVkCisgICAgICAg
IHByb3BlcnR5LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZSBuZXV0cmFs
LCBleGNlcHQgb24gdGVzdHMgdGhhdCB1c2UgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uCisgICAgICAg
IHBsYWluIG9iamVjdHMsIHdoZXJlIHRoZSBzcGVlZC11cCBpcyBpbiBleGNlc3Mgb2YgYW4gb3Jk
ZXIgb2YgbWFnbml0dWRlLgorICAgICAgICAKKyAgICAgICAgT25lIG5vdGFibGUgYXNwZWN0IG9m
IHdoYXQgdGhpcyBjaGFuZ2UgYnJpbmdzIGlzIHRoYXQgaXQgYWxsb3dzIGluZGV4aW5nCisgICAg
ICAgIHN0b3JhZ2UgdG8gbW9ycGggb3ZlciB0aW1lLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVz
ZWQgdG8gYWxsb3cgYWxsIG5vbi1hcnJheQorICAgICAgICBvYmplY3RzIHRvIHN0YXJ0IG91dCB3
aXRob3V0IGFueSBpbmRleGVkIHN0b3JhZ2UuIEJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvcgorICAg
ICAgICBzb21lIGtpbmRzIG9mIGFycmF5IHR5cGUgaW5mZXJlbmNlIGluIHRoZSBmdXR1cmUuCisK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDYWxsYmFja09i
amVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBB
UEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkamFjZW5jeUxpc3Q6OkFkamFjZW5jeUxpc3QpOgorICAgICAgICAoQWRqYWNlbmN5TGlz
dCk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZnJvbU9ic2VydmVkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlQWxyZWFkeUNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVXNlc0J1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRz
TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZv
cm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnB1dEJ5VmFsKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRC
eUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAg
ICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6
OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fs
bE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRz
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAgICAgICAoSlND
OjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pv
aW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5o
OgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjppblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
c2l6ZUZvcik6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1
cmluZ0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNp
emVBcnJheSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6Cisg
ICAgICAgIChNZXRob2RUYWJsZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjp2ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRQ
dWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNh
cGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAg
KiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6
SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnRlYXJPZmYpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpjcmVh
dGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxl
dGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmlzTGVu
Z3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpib3Vu
ZEZ1bmN0aW9uQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
Lmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpI
b2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlh
bGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlhbGl6YXRp
b24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFyc2VJbmRleGluZ01vZGUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhpbmdTaG91bGRCZVNwYXJzZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojph
cnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JaZXJv
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlND
OjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5CdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlND
OjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jh
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86OmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8pOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgIChPYmplY3RQcm90
b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpT
Qzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9QdXRE
aXJlY3RJbmRleE1vZGUuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0Fy
cmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVz
QXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAg
ICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVqZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVu
dHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVNYXApOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZv
dW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToK
KyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
On5TcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpkZXN0cm95KToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICog
cnVudGltZS9TdG9yYWdlQmFycmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoU3RyaW5nT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTo6SGFzaDo6aGFzaCk6CisgICAgICAgICogdGVzdHMvbW96aWxsYS9qczFfNi9BcnJh
eS9yZWdyZXNzLTMwNDgyOC5qczoKKwogMjAxMi0wOS0wOSAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHRoZSBTdHJpbmcgaW5pdGlhbGl6YXRp
b24gb24gdGhlIGZ1bmN0aW9uIHNpZGUgb2YgU3RyaW5nOjpudW1iZXIoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1
LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAKKyAgICBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCiAgICAgcnVu
dGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKICAgICBydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAogICAgIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
NTMsOCArNDUzLDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludGVnZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcCBc
CkBAIC00NjMsNiArNDY1LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaCBcCkBAIC01MDcsNiArNTExLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAgXApAQCAtNjExLDcgKzYxOCw5IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
T2Zmc2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGUuaCBcCkBAIC02MjgsMTEgKzYzNywxNCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ0NvdW50ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVy
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2
YWxBY3RpdmF0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwIFwKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAogICAgIHJ1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCisgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cCBcCiAgICAgcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXAogICAgIHJ1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL1N0cmluZ09iamVjdC5jcHAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBQ
YXJlbnQ6Om1ldGhvZFRhYmxlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFz
SW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hh
c0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC0xNzgsNiArMTc4LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTg3LDcgKzE4OCw3IEBAIHByaXZhdGU6CiAKICAgICBz
dGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUgcHJvdG8pOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDYgKzE4MywxMiBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
cmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgogSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRl
ZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKICAgICBjb25zdCBKU0NhbGxiYWNrT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwpAQCAt
NDQ5LDcgKzQ1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoK
IH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwog
ICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZXhlYyk7CkBAIC00ODQsNyArNDkwLDcg
QEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBybwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIFBhcmVudDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAog
I2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRl
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNiArNTE0LDU4
IEBACiAJCQlOYW1lPSJydW50aW1lIgogCQkJPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcUmVqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccnVudGltZVxBcnJheVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQ
cm9wZXJ0eVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQdXREaXJlY3RJbmRleE1vZGUuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQnV0dGVyZmx5LmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEFycmF5Q29u
dmVudGlvbnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXEFyZ0xpc3QuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsOCBAQAogCQkwRjBCODNCNTE0QkNGODYyMDA4ODVCNEYgLyog
TWV0aG9kQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYw
QjgzQjcxNEJDRjhFMTAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCNjE0QkNGOERGMDA4ODVC
NEYgLyogR2xvYmFsUmVzb2x2ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRl
eE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjBDRDRDNDE1RjZCNkJC
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAv
KiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYx
NUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE4OCw2ICsxOTAsMTcgQEAKIAkJMEZCNTQ2
NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0Njgw
MDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdC
MTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCN0YzOTUxNUVE
OEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJh
eUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEExNUVEOEUz
ODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdG
MzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyog
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlEMTVFRDhFNDYw
MEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RTE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZD
N0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01NjYsNyArNTc5LDYgQEAKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENB
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3
MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07Ci0JCUE3
ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkw
IC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFC
OThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIw
MDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tl
ci5oICovOyB9OwogCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07
CkBAIC04MjksNiArODQxLDggQEAKIAkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhv
ZENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RD
YWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzQjYxNEJD
RjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdsb2JhbFJlc29sdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRl
Y29kZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTQ1LDYgKzk1OSwxNyBAQAogCQkwRkI1NDY3ODE0RjVDNDY4MDAy
QzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZC
N0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhG
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5kZXhpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUzODAwRjE2
N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
RkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1
MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzM5LDcgKzEzNjQsNiBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkg
LyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZD
NTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3Jh
Z2VCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VCYXJy
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5
RTkxMiAvKiBKU09iamVjdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNPYmplY3RSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjAxNyw2ICsyMDQxLDIwIEBACiAJCTdFRjZFMEJCMEVCN0ExRUMw
MDc5QUZBRiAvKiBydW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAgKi8sCisJCQkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovLAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRp
b25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5o
ICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKKwkJ
CQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICov
LAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAor
CQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmgg
Ki8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICov
LAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKKwkJCQkwRkI3
RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovLAorCQkJCTBG
QjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAq
LywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJD
MjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjIwMiw3ICsy
MjQwLDYgQEAKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAg
Ki8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAot
CQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovLAogCQkJ
CUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8s
CiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmgg
Ki8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNw
cCAqLywKQEAgLTI3NTIsNyArMjc4OSw2IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJF
RjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBp
biBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFy
cmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0
cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
MjkwMSw2ICsyOTM3LDE4IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTElu
dE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8q
IEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3
QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTYxNUVE
OEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0Yz
OTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
N0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIxNUVEOEU0
NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUMx
NUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTAyLDYg
KzM1NTAsNyBAQAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNX
aXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMw
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFj
aCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBU
aGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJp
dHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgx
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJy
YXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4g
SXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFz
cyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE1LDcgKzE3MTUsOSBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5k
ZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgp
ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MiwxMSArODUyLDExIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2Ug
T1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTE2LDEwICs5MTYsMTAgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgog
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQxLDcgKzEzNDEsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xMzU5
LDggKzEzNTksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8v
IFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1h
eSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUg
c3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBTaXplID0g
MyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lM
aXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKGtp
bmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21P
YnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAw
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToK
LSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFy
cmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtl
U2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDog
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Ig
d2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUg
YXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9t
CkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZh
bHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9B
UlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6
c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1Nw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0
IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0
T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
ICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUg
ewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8g
ZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBH
ZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5k
cywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAgIEludDhB
cnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07
CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50
cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBp
cyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2Zm
IGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBp
biB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6
TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFy
cmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03
MSwxMSArOTgsMzAgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIAog
CiBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUgYm9vbCBt
b2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsK
ICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNj
ZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTYw
LDYgQEAgaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0K
IAotaW5saW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUg
bGVmdCwgQXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAg
IGxlZnQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICBy
aWdodCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0Fy
cmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dp
dGNoIChtb2RlKSB7CkBAIC0xNDcsNyArMTc0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNp
ZmljKEFycmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5
OjpNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJB
WV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyArMTY4NSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lu
bGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAg
IGVsc2UKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0
b3JhZ2UsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1
dHRlcmZseSwgYmFzZSk7CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRk
VG9HcmFwaCgKICAgICAgICAgICAgIEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMTcsNyArMjMx
Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdl
dFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpA
QCAtMjM2OCwxMyArMjM2OCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0
eVN0b3JhZ2UsIGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRU
b0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0
b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNh
c2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwogICAgICAg
ICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBub2RlUHRyLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCkBAIC0z
ODEsOCArMzgxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkR2Vu
ZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7Ci0gICAgICAgIE5vZGUgZ2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIE5v
ZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAgaWYgKG1vZGVVc2VzQnV0dGVy
Zmx5KGFycmF5TW9kZSkpCisgICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlID0g
Tm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSA9IE5vZGUoR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5KTsKICAgICAg
ICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAgICAgICAgZ2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VJ
bmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsNyArNDczLDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJl
dHVybiBub2RlLm9wKCkgPT0gR2V0QnlWYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgc3RydWN0IE9wSW5mbyB7
CiBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKICAgICAKKyAg
ICBOb2RlKCkgeyB9CisgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMg
Y2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KICAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCi0g
ICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1h
Y3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDaGVja0Fy
cmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJl
c3VsdEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJERkdPcGVyYXRpb25zLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgpA
QCAtMjI2LDE0ICsyMjcsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0
ZSogZQogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRhLCBleGVjKTsKICAg
ICAKLSAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChhcnJheS0+Y2FuU2V0SW5kZXgo
aW5kZXgpKSB7Ci0gICAgICAgICAgICBhcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaW5kZXgs
IHZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgIGlmIChvYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhR
dWlja2x5KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRl
eCwgdmFsdWUsIHN0cmljdCk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3RyaWN0KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMzQxLDExICszNDIsMTIgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBnZXRCeVZhbChFeAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZnbG9iYWxEYXRh
LCBleGVjKTsKICAgICAKLSAgICAvLyBGSVhNRTogdGhlIEpJVCB1c2VkIHRvIGhhbmRsZSB0aGVz
ZSBpbiBjb21waWxlZCBjb2RlIQotICAgIGlmIChpc0pTQXJyYXkoYmFzZSkgJiYgYXNBcnJheShi
YXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFzQXJyYXkoYmFzZSktPmdldEluZGV4KGluZGV4KSk7CisgICAgaWYgKGJhc2UtPmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgICAg
ICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAg
IH0KIAotICAgIC8vIEZJWE1FOiB0aGUgSklUc3R1YiB1c2VkIHRvIHJlbGluayB0aGlzIHRvIGFu
IG9wdGltaXplZCBmb3JtIQogICAgIGlmIChpc0pTU3RyaW5nKGJhc2UpICYmIGFzU3RyaW5nKGJh
c2UpLT5jYW5HZXRJbmRleChpbmRleCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNTdHJpbmcoYmFzZSktPmdldEluZGV4KGV4ZWMsIGluZGV4KSk7CiAKQEAgLTU0OCwxNSArNTUw
LDE1IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGwKICAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlPihleGVjLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCks
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVj
LCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3Vu
ZHNTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKICAg
ICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5kZXggaXMgb3V0c2lkZSB0aGUg
ZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5LT5jYW5TZXRJbmRleChpbmRl
eCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOworICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxl
KCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC01NjUsMTUg
KzU2NywxNSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAg
ICAgIGFycmF5LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IEpTQXJyYXkqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRl
eCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewog
ICAgICAgICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRo
ZSBleGlzdGluZyB2ZWN0b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGlu
ZGV4KSk7Ci0gICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBBU1NFUlQoIWFy
cmF5LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgYXJyYXktPm1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTI3
NSwyMCArMTI3NywyOSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCogcmVzdWx0OwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZyZXN1bHQpKQotICAgICAgICBDUkFTSCgpOwot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHks
IGZhbHNlLCAwKSk7CiB9CiAKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgbmV3U2l6ZSkKIHsKLSAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgdm9pZCog
cmVzdWx0OwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShuZXdT
aXplLCAmcmVzdWx0KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIDEpICsgbmV3
U2l6ZTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRl
cmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLT5nbG9iYWxEYXRhKCksIDAsIG5ld1NpemUs
IGZhbHNlLCAwKSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBv
YmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlh
bE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
dXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVj
dC0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShyZXN1bHQpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCiBkb3VibGUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw3ICs5NSw3IEBAIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXIK
IHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNf
REZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9KKShF
bmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0
aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkopKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSWNmKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTEwNiw4ICsxMDYsMTAgQEAgdHlwZWRlZiB2
b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5j
b2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlv
bl9XKShXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKLXR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRU8pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FT1MpKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAo
KlBfREZHT3BlcmF0aW9uX0VQUykoRXhlY1N0YXRlKiwgdm9pZCosIHNpemVfdCk7Cit0eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6
ZV90KTsKIAogLy8gVGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBD
KysgaW1wbGVtZW50YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CkBAIC0xNDAsOCArMTQyLDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsU3RyaQogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
Owogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNB
cnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlC
b3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVz
aChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwpAQCAtMTg3LDYgKzE4OSw4IEBAIHNpemVfdCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbklzRnVuY3Rpb24KIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqLCBKU09iamVjdCosIFN0cnVjdHVyZSos
IFByb3BlcnR5T2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6ZSkg
V1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUq
LCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7CiAKIC8vIFRoaXMgbWV0aG9kIGlz
IHVzZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRp
b24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxs
cyBvdXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiAKKyAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTIgKzE5
OSwxMiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dEdQUik7CiAjZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJv
dG9PYmplY3QtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3Vs
dEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9m
ZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CisgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSks
IHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1
bHRHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
QnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwogI2VuZGlmCiAgICAgfQogCkBAIC0yNTQsMTMgKzI1NCwxMCBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBmYWlsdXJlQ2FzZXM7CiAgICAgICAgCiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7IAotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJh
bmNoUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1Ykpp
dC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKLSAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCkpKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MjcsNyArNDI0
LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAg
ICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZWxzZQpAQCAtNDc3LDcgKzQ3NCw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICB9CiAjZW5k
aWYKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxz
ZQpAQCAtNjg1LDE3ICs2ODIsMTcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgc3R1
YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICBzdHVi
Sml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTgzNCw3ICs4MzEsNyBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAg
ICAgICAgICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMyk7CisgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAg
c3R1YkppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2Ny
YXRjaEdQUjEpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoU3Vi
UHRyKE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
bmV3U2l6ZSksIHNjcmF0Y2hHUFIxKSk7CiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwpAQCAtODQ4
LDcgKzg0NSw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRj
aEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSkpOwogICAgICAgICBzY3JhdGNoR1BSMUhhc1N0b3JhZ2UgPSB0cnVlOwogICAg
IH0KIApAQCAtODU4LDggKzg1NSw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQotICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAg
LTg2Nyw5ICs4NjQsOSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5Jbmxp
bmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIx
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOworICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0
ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAg
IHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICAKQEAgLTEwMjQsNiArMTAyMSwx
MSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAg
ICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2tpcCBvcHRp
bWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUg
aGFzCisgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKGhh
c0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbm9ybWFsaXpl
UHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MDgsNyArNTA4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChD
b2RlTwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwog
ICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQucGF0
Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxv
YWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBKSVRDb21waWxlcjo6Q29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IG1faml0LmNvbnZlcnRpYmxl
TG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbENvbXBhY3QgdGFnTG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWQzMldpdGhDb21wYWN0
QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIs
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJl
c3VsdFRhZ0dQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgcGF5bG9hZExv
YWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7
CiAgICAgCkBAIC01NjUsNyArNTY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlTwogCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BSLCB2YWx1ZVRhZ0dQ
UiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsK
IAotICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VM
b2FkID0gbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQ
YXlsb2FkR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNo
R1BSKTsKKyAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9y
YWdlTG9hZCA9IG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHRhZ1N0b3JlV2l0aFBhdGNoID0gbV9qaXQu
c3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSkpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3Rv
cmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBh
eWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIApAQCAtMjU1NCw3
ICsyNTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6IHsKKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtMjU2MywxNCArMjU2Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdp
dGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUg
Y2hlY2suCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzcGVj
dWxhdGVkIHRoYXQgaXQncyBzb21lIGtpbmQgb2YgYXJyYXksIGF0IHRoaXMgcG9pbnQuCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOwogCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CkBAIC0yNTgyLDEyICsyNTc1
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CiAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNTk3LDEzICsyNTkxLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1Jl
ZyA9IHJlc3VsdFRhZy5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVn
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKIAotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNl
IGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVj
dG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGlj
dGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAg
ICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IGl0J3Mgc29tZSBraW5kIG9mIGFycmF5LCBhdCB0
aGlzIHBvaW50LgogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoMzIoCkBA
IC0yNzEyLDggKzI3MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAg
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1
ZS50YWdHUFIoKTsKQEAgLTI3NDEsOCArMjczMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5
TW9kZSgpKSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTI3NTUsOSArMjc0NCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAogICAgICAg
ICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0
aGUgYXJyYXk7IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05v
dE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwogCiAgICAgICAgICAgICBsZW5ndGhE
b2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CkBAIC0yNzY3LDcgKzI3NTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlVGFnUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7
CiAgICAgICAgIAotICAgICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91
dE9mQm91bmRzKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3Mobm9kZS5hcnJh
eU1vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgYmV5
b25kQXJyYXlCb3VuZHMsIHRoaXMsCkBAIC0yODk3LDE4ICsyODg2LDE4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6
YXJyZSBsZW5ndGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwg
c3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKICAgICAg
ICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAg
bV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rv
cikpKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCBzdG9yYWdlR1BSKTsKICAgICAgICAgCkBAIC0yOTMzLDE5ICsyOTIyLDE5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0
b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7CiAgICAgICAgIHNldFVuZGVmaW5lZENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VM
ZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgdmFsdWVUYWdHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQ
YXlsb2FkR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgdmFsdWVUYWdHUFIpKTsKICAgICAgICAgCkBAIC0zNTg3LDE0
ICszNTc2LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7
CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk1NCw3ICszOTQzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBzdHJ1Y3R1cmVzTm90TWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCByZXN1bHRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBG
YXN0IGNhc2UKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3Vs
dFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNv
bHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBvZmZzZXQpKSwg
cmVzb2x2ZUluZm9HUFIpOwogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNPdXRPZkxpbmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
R3JlYXRlclRoYW5PckVxdWFsLCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMyKGlubGluZVN0
b3JhZ2VDYXBhY2l0eSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OTgsNyArNDk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2Rl
TwogICAgIEpJVENvbXBpbGVyOjpQYXRjaGFibGVKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQu
cGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oLTEpKSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExh
YmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9h
ZFdpdGhQYXRjaCA9IG1faml0LmxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIDApLCByZXN1bHRHUFIpOwogICAgIAogICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwpAQCAtNTM0LDcg
KzUzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KICAgICB3
cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRp
YmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuY29udmVy
dGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwz
MiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2
YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCiAgICAgSklU
Q29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC0yNTg0LDggKzI1
ODQsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIElO
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKQEAgLTI1OTcs
MjcgKzI2MTUsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGFscmVhZHkgc3BlY3Vs
YXRlZCB0aGF0IHRoZSBiYXNlIGlzIHNvbWUga2luZCBvZiBhcnJheSwKLSAgICAgICAgICAgIC8v
IGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5hcnJh
eU1vZGUoKSA9PSBBcnJheTo6SlNBcnJheSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG91dE9mQm91bmRzKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKSA9PSBBcnJheTo6SlNBcnJheSkKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGhvbGUpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRz
KTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsQXJyYXlJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG91dE9mQm91bmRzKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Cisg
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0
QnlWYWxBcnJheUludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NzAzLDYgKzI3MTMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIGlmIChhbHJlYWR5SGFuZGxlZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IHRoZSBiYXNlIG1heSBub3QgYmUgbmVjZXNzYXJ5IGZvciBz
b21lIGFycmF5IGFjY2VzcyBtb2Rlcy4gQnV0IHdlIGhhdmUgdG8KKyAgICAgICAgLy8ga2VlcCBp
dCBhbGl2ZSB0byB0aGlzIHBvaW50LCBzbyBpdCdzIGxpa2VseSB0byBiZSBpbiBhIHJlZ2lzdGVy
IGFueXdheS4gTGlrZWx5CisgICAgICAgIC8vIG5vIGhhcm0gaW4gbG9ja2luZyBpdCBoZXJlLgog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGNoaWxkMSk7CiAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwogICAg
ICAgICAKQEAgLTI3MTAsMTEgKzI3MjMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogCiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCi0gICAgICAgICAgICAvLyBNYXAgYmFzZSwgcHJv
cGVydHkgJiB2YWx1ZSBpbnRvIHJlZ2lzdGVycywgYWxsb2NhdGUgYSBzY3JhdGNoIHJlZ2lzdGVy
LgogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQpAQCAtMjczOCw4ICsyNzQ5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAgICAgaWYg
KGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
IGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCiAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJh
eUJvdW5kcyk7CiAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNzUyLDkgKzI3NjMsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3Ip
KSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1pZ2h0
IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAg
ICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAg
ICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAogICAgICAg
ICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjc2Myw3ICsy
Nzc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
ID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsKKyAgICAgICAgICAgIGlmICghaXNJbkJv
dW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjkzMiwxNyArMjk0MywxNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2Ug
dG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkp
OwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAKQEAgLTI5NjgsMTggKzI5NzksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVu
ZGVmaW5lZENhc2VzOwogICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSksIHZhbHVlR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogCiAgICAgICAgIHNldFVuZGVmaW5lZENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1
ZUdQUikpOwogICAgICAgICAKQEAgLTM1NjUsMTQgKzM1NzYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgR2V0
UHJvcGVydHlTdG9yYWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CkBAIC0zOTE1LDcgKzM5MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAjZW5kaWYKICAgICAgICAgbV9qaXQubmVnMzIocmVzb2x2ZUluZm9HUFIp
OwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2
ZUluZm9HUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGds
b2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJl
c29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIsIChpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE5ICszMTUsMzAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAg
ICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6IHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZXMgdGhlIGNvZGUgYmVs
b3cgaW4gYW50aWNpcGF0aW9uIG9mIHRoaXMgY29kZSBiZWluZwotICAgICAgICAvLyBzdWJzdGFu
dGlhbGx5IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9T
VE9SQUdFX01PREVTOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAg
ICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgICAgICAKKyAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAu
Z3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDgoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0
b3JhZ2UpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMwMDYsMTEgKzMwMTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFn
ZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlUmVnKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZz
ZXQpLCBzdG9yYWdlUmVnKTsKQEAgLTMxMjUsMTMgKzMxMzEsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAK
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogeworICAgIGNhc2UgQVJSQVlf
V0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgcmVzdWx0UmVnKTsKICAgICAgICAgICAgIAogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAKQEAgLTMyMjcsNiArMzIzMiwyMCBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAg
IGlmIChoYXNJbmRleGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJl
dmlvdXNTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKKworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VX
aXRoSW5pdGlhbENhcGFjaXR5LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIpOworICAgICAgICAKKyAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICAKQEAgLTMyNDgsMTMgKzMyNjcsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0
aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwogICAgICAgICAKLSAgICBtX2ppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNo
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpKTsKICAgICAgICAgCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICog
b3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpOworCisgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKG5vZGUuc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQo
dGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZs
eVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBuZXdTaXplIC8g
c2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBT
dG9yYWdlT3BlcmFuZCBvbGRTdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKQEAgLTMyNjcsOSArMzMwNCw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGg7CiAgICAgICAgIAotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91
dE9mTGluZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6
ZW9mKEpTVmFsdWUpKTsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGNvcGllZEFsbG9jYXRvciA9ICZt
X2ppdC5nbG9iYWxEYXRhKCktPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogICAgICAgICAKICAg
ICBtX2ppdC5sb2FkUHRyKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2Ny
YXRjaEdQUjIpOwpAQCAtMzI4MCwxMyArMzMxNCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpKTsK
KyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsK
ICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0g
c2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgLShv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIxKTsK
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikp
KSk7CiAgICAgfQotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsK
KyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgCiAgICAgc3RvcmFnZVJl
c3VsdChzY3JhdGNoR1BSMiwgbV9jb21waWxlSW5kZXgpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU2LDkgKzExNTYsMTQgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IG9iamVjdCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKG9iamVjdCk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0LCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QsIFRydXN0ZWRJbW1QdHIoc2l6
ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIG9sZCwgc2l6ZV90IHNpemUpCkBAIC0xMTY2LDYgKzExNzEsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRy
KHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
c2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CkBAIC0xMzczLDcgKzEzODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FQVpKIG9wZXJh
dGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9uLCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpAQCAtMTQz
OCw2ICsxNDQ4LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FT1Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgc2l6ZV90IGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQ
X0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBz
aXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKQEAgLTE2
NzYsNyArMTcwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzNQYXlsb2FkLCBh
cmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RG
R09wZXJhdGlvbl9FQVpKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJ
XzMyQklUX0RVTU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0yMTY0LDcgKzIxODks
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIH0KIAogICAgIC8vIEl0IGlzIGFjY2VwdGFi
bGUgdG8gaGF2ZSBzdHJ1Y3R1cmUgYmUgZXF1YWwgdG8gc2NyYXRjaCwgc28gbG9uZyBhcyB5b3Un
cmUgZmluZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc092ZXJzaXplKHNpemVfdCk7CiAgICAg
c3RhdGljIENvcGllZEJsb2NrKiBvdmVyc2l6ZUJsb2NrRm9yKHZvaWQqIHB0cik7CiAKLSAgICBD
aGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCwgdm9pZCoqKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZVNsb3dDYXNlKHNpemVf
dCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZU92ZXJzaXplKHNpemVf
dCwgdm9pZCoqKTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUodm9p
ZCoqLCBzaXplX3QsIHNpemVfdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJlZ2lzdGVySUQgdmFsdWUsIFJl
Z2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7
CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3Is
IHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChT
dHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsK
LSAgICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBSZWdpc3RlcklE
IHJlc3VsdCk7CisgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCwg
cHRyZGlmZl90IG9mZnNldEZyb21CYXNlLCBSZWdpc3RlcklEIHJlc3VsdCk7CiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVj
dHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAg
IHZvaWQgZW1pdEFsbG9jYXRlSlNBcnJheSh1bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWdu
ZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3Vs
dCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI3OTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBib29s
IGRlc3RyCiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBB
ZGRyZXNzKHJlc3VsdCwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSkpOwogCiAgICAgLy8gaW5p
dGlhbGl6ZSB0aGUgb2JqZWN0J3MgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyCi0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIENsYXNzVHlwZTo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRy
ZXNzKHJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3Qo
VCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCkBAIC00
MzQsNyArNDM0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIEpJVDo6ZQog
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0
cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIFJlZ2lzdGVySUQgcmVzdWx0KQoraW5saW5l
IHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90IHNpemUsIHB0cmRpZmZf
dCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQpCiB7CiAgICAgQ29waWVkQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsK
IApAQCAtNDQzLDM3ICs0NDMsMzIgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNp
Y1N0b3JhZwogICAgIHN0b3JlUHRyKHJlc3VsdCwgJmFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWlu
aW5nKTsKICAgICBuZWdQdHIocmVzdWx0KTsKICAgICBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzKCZh
bGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCByZXN1bHQpOwotICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoc2l6ZSksIHJlc3VsdCk7CisgICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXplIC0g
b2Zmc2V0RnJvbUJhc2UpLCByZXN1bHQpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxv
Y2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVn
aXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQg
c3RvcmFnZVB0cikKIHsKICAgICB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gc3RkOjptYXgobGVu
Z3RoLCA0VSk7Ci0gICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gSlNBcnJheTo6c3RvcmFnZVNp
emUoaW5pdGlhbExlbmd0aCk7CisgICAgc2l6ZV90IGluaXRpYWxTdG9yYWdlID0gQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGluaXRpYWxMZW5n
dGgpKTsKIAogICAgIC8vIFdlIGFsbG9jYXRlIHRoZSBiYWNraW5nIHN0b3JlIGZpcnN0IHRvIGVu
c3VyZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiAKICAgICAvLyBkb2Vzbid0IGhhcHBlbiBkdXJp
bmcgSlNBcnJheSBpbml0aWFsaXphdGlvbi4KLSAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uo
aW5pdGlhbFN0b3JhZ2UsIHN0b3JhZ2VSZXN1bHQpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3Rv
cmFnZShpbml0aWFsU3RvcmFnZSwgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSwgc3RvcmFnZVJlc3Vs
dCk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgY2VsbCBmb3IgdGhlIGFycmF5LgogICAgIGVtaXRB
bGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNBcnJheSwgZmFsc2U+KFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKSwgY2VsbFJlc3VsdCwgc3Rv
cmFnZVB0cik7CiAKICAgICAvLyBTdG9yZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvIGluIHRoZSBB
cnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhzdG9yYWdl
UmVzdWx0LCBBcnJheVN0b3JhZ2U6OmFsbG9jQmFzZU9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJ
bW0zMihsZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCksIEFkZHJlc3Moc3RvcmFnZVJl
c3VsdCwgQXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpKSk7CisgICAgc3Rv
cmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
MCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQo
KSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgQXJyYXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQoKSkpOwogCiAgICAgLy8gU3RvcmUgdGhl
IG5ld2x5IGFsbG9jYXRlZCBBcnJheVN0b3JhZ2UuCi0gICAgc3RvcmVQdHIoc3RvcmFnZVJlc3Vs
dCwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpKTsKKyAgICBz
dG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHZlY3RvciBsZW5ndGggYW5kIGlu
ZGV4IGJpYXMuCi0gICAgc3RvcmUzMihJbW0zMihpbml0aWFsTGVuZ3RoKSwgQWRkcmVzcyhjZWxs
UmVzdWx0LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJyYXk6OmluZGV4Qmlhc09mZnNl
dCgpKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBzcGFyc2UgdmFsdWUgbWFwLgotICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3Bh
cnNlVmFsdWVNYXBPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZXMgd2Ug
aGF2ZS4KKyAgICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAq
IHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKQEAgLTQ4NSwxNiArNDgwLDYgQEAgaW5s
aW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVucwogICAgICAgICBzdG9yZTMyKHN0
b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIHNpemVvZih1aW50MzJf
dCkpKTsKICNlbmRpZgogICAgIH0KLQotICAgIC8vIFplcm8gb3V0IHRoZSByZW1haW5pbmcgc2xv
dHMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgaW5pdGlhbExlbmd0aDsgaSsr
KSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigw
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7Ci0jZWxzZQotICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSkpOwotI2VuZGlmCi0gICAgfQogfQogCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY4LDcgKzE2NjgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXko
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgbGVuZ3RoID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3Zl
cnNpemUoSlNBcnJheTo6c3RvcmFnZVNpemUobGVuZ3RoKSkpIHsKKyAgICBpZiAoQ29waWVkU3Bh
Y2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlTdG9y
YWdlOjpzaXplRm9yKGxlbmd0aCkpKSkgewogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0
aGlzLCBjdGlfb3BfbmV3X2FycmF5KTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKQEAgLTE2ODcsNyArMTY4Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
YXJyYXkoSW5zdHJ1Y3QKICAgICAvLyBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBvdmVyc2l6
ZSwgd2Ugd2lsbCBhbHJlYWR5IG1ha2UgdGhlIHByb3BlciBzdHViIGNhbGwgYWJvdmUgaW4gCiAg
ICAgLy8gZW1pdF9vcF9uZXdfYXJyYXkuCiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJy
YXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkpKQorICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bGVuZ3RoKSkpKQogICAgICAgICByZXR1cm47CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBO
b3QgZW5vdWdoIHNwYWNlIGluIENvcGllZFNwYWNlIGZvciBzdG9yYWdlLgogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBNYXJrZWRTcGFjZSBmb3IgY2VsbC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDEw
ICsyMTMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lm
IEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMSwgY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsK
ICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6
OnNfaW5mbykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJl
Z1QxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0Fy
cmF5U3RvcmFnZSkpKTsKICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSkpOwogICAgIAogICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCiAgICAgbG9hZDMy
KEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZApAQCAtMjcyLDExICsyNzIsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMSwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1Qw
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgZW1pdFdyaXRlQmFycmll
cihyZWdUMCwgcmVnVDEsIHJlZ1QxLCByZWdUMywgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDMpOwogICAgIAogICAgIEp1bXAgZW1w
dHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpOwogICAgIApAQCAtMjg4LDEwICsyODgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CiAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAgICBicmFuY2gzMihCZWxvdywgcmVn
VDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8o
c3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAgICAgCiAgICAgZW5kLmxpbmsodGhpcyk7CkBAIC0z
NDMsNyArMzQzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0aCgpCiAgICAgUGF0
Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVj
dHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRj
aEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNo
ZWNrKTsKICAgICAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QyKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBEYXRhTGFiZWxDb21wYWN0IGRp
c3BsYWNlbWVudExhYmVsMSA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChB
ZGRyZXNzKHJlZ1QyLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOyAvLyBwYXls
b2FkCiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDIgPSBsb2FkUHRyV2l0
aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMiwgcGF0Y2hHZXRCeUlkRGVm
YXVsdE9mZnNldCksIHJlZ1QxKTsgLy8gdGFnCiAgICAgCkBAIC00MDksNyArNDA5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERhdGFMYWJlbFB0ciBz
dHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNo
R2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogICAgIAotICAgIENvbnZlcnRpYmxlTG9hZExh
YmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDEpOworICAgIENv
bnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDEpOwog
ICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVsMSA9IHN0b3JlUHRyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChyZWdUMiwgQWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNl
dCkpOyAvLyBwYXlsb2FkCiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwyID0gc3Rv
cmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QzLCBBZGRyZXNzKHJlZ1QxLCBwYXRjaFB1
dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHRhZwogICAgIApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKIHZvaWQgSklUOjpjb21waWxl
UHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVn
aXN0ZXJJRCB2YWx1ZVBheWxvYWQsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKIHsKICAg
ICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSkKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2Up
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgYmFzZSk7CiAgICAgZW1pdFN0b3JlKGluZGV4UmVsYXRpdmVUb0Jhc2UoY2FjaGVkT2Zm
c2V0KSwgdmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwgYmFzZSk7CiB9CiAKQEAgLTQ1Niw3ICs0NTYs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgfQogICAg
IAogICAgIFJlZ2lzdGVySUQgdGVtcCA9IHJlc3VsdFBheWxvYWQ7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHRlbXApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0
ZW1wKTsKICAgICBlbWl0TG9hZChpbmRleFJlbGF0aXZlVG9CYXNlKGNhY2hlZE9mZnNldCksIHJl
c3VsdFRhZywgcmVzdWx0UGF5bG9hZCwgdGVtcCk7CiB9CiAKQEAgLTQ2OSw5ICs0NjksOSBAQCB2
b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdl
KCksIHJlc3VsdFRhZyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVzdWx0VGFnLCBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UGF5bG9hZCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVzdWx0VGFnLCBvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOworICAg
IGxvYWRQdHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRUYWcpOworICAgIGxvYWQz
MihBZGRyZXNzKHJlc3VsdFRhZywgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVz
dWx0VGFnLCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZyk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29s
IGRpcmVjdCkKQEAgLTYyMCwxMSArNjIwLDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBh
dGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIo
cmVnVDIsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmlsZShzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgSnVt
cCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZv
KSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpKTsKICAgICAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0
IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHJlZ1QyKTsKICAgICAKICAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2gzMihB
Ym92ZSwgcmVnVDIsIFRydXN0ZWRJbW0zMihJTlRfTUFYKSk7CiAgICAgbW92ZShyZWdUMiwgcmVn
VDApOwpAQCAtMTAyOSw3ICsxMDI5LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZQogICAgIAogICAgIGlmIChmaW5hbE9iamVjdE1vZGUgPT0gTWF5QmVGaW5hbCkg
ewogICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1
c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBiYXNlKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBicmVha3Bv
aW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIGJhc2UpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgYmFzZSk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgfQogICAg
IGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMCArMTE0LDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAg
ICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZFB0cihCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDApKTsKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9m
ZnNldChSZWdpc3RlCiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFs
KSB7CiAgICAgICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNo
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHNjcmF0Y2gpOwogICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7CkBAIC0xNzQsNyArMTc0
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgICAgICBi
cmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7
CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKQEAgLTIzOSwx
MCArMjM5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDIsIGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7
CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5
OjpzX2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIp
OwogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0UHRyKFplcm8sIEJhc2VJbmRleChyZWdUMiwg
cmVnVDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwpAQCAtMjUyLDEwICsyNTIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIAogICAgIGVt
cHR5LmxpbmsodGhpcyk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1Qy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwot
ICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKyAg
ICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogCiAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgc3RvcmUzMihy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVS
ZXN1bHQsIHRoaXMpOwogCkBAIC00MDMsNyArNDAzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgYmFzZQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBw
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsK
ICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBD
b252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
ICAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9hZFB0cldpdGhDb21w
YWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRP
ZmZzZXQpLCByZWdUMCk7CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CkBAIC00NzAsNyAr
NDcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKgogICAgIERh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCi0gICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7
CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRp
YmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMik7CiAgICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhB
ZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1
bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0
QnlJZCk7CkBAIC01MDksOCArNTA5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsK
LSAgICBzdG9yZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKKyAgICBzdG9yZVB0
cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZs
eShjYWNoZWRPZmZzZXQpKSk7CiB9CiAKIC8vIENvbXBpbGUgYSBsb2FkIGZyb20gYW4gb2JqZWN0
J3MgcHJvcGVydHkgc3RvcmFnZS4gIE1heSBvdmVyd3JpdGUgYmFzZS4KQEAgLTUyMSw4ICs1MjEs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hl
ZE9mZnNldCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQs
IHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1
bHQpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjdCogYmFz
ZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKQEAgLTUz
Miw4ICs1MzIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChKU09iamVjCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihiYXNlLT5hZGRyZXNzT2ZP
dXRPZkxpbmVTdG9yYWdlKCksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRy
ZXNzKCksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0
ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVz
dWx0KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0
KQpAQCAtNjYwLDExICs2NjAsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRB
cnJheUxlbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMywg
bV9jb2RlQmxvY2stPmdldE9yQWRkQXJyYXlQcm9maWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4
KS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1
cmVDYXNlczEgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAg
ICBKdW1wIGZhaWx1cmVDYXNlczEgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSkpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3Ro
IGZyb20gdGhlIHN0b3JhZ2UKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgcmVn
VDIpOwogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMiwg
VHJ1c3RlZEltbTMyKDApKTsKIAogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVn
VDIsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUxNyw4ICsxNTE3LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oSlNPYmplY3QqLCBvcF9wdXRfYgogICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7
CiAgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChiYXNlVmFsdWUpOwogICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9ICpzdGFja0ZyYW1lLmdsb2JhbERhdGE7Ci0gICAgUHJvcGVydHlT
dG9yYWdlIG5ld1N0b3JhZ2UgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCBvbGRTaXplLCBuZXdTaXplKTsKLSAgICBiYXNlLT5zZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2Jh
bERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBiYXNlLT5ncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBvbGRTaXplLCBuZXdT
aXplKTsKKyAgICBiYXNlLT5zZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBuZXdT
dHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIGJhc2U7CiB9CkBAIC0yNDM1LDcgKzI0MzUsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzdWJz
Y3JpcHQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwotCisgICAgCiAgICAgaWYgKExJ
S0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CiAgICAg
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+ZmFzdEdldE93blBy
b3BlcnR5KGNhbGxGcmFtZSwgYXNTdHJpbmcoc3Vic2NyaXB0KS0+dmFsdWUoY2FsbEZyYW1lKSkp
IHsKICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKQEAgLTI1MjgsMTIgKzI1Mjgs
MTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogCiAgICAgaWYg
KExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1
YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsK
LSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAganNB
cnJheS0+c2V0SW5kZXgoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2ts
eShpKSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseSgqZ2xvYmFsRGF0
YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEpTQXJyYXk6
OnB1dEJ5SW5kZXgoanNBcnJheSwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgfSBlbHNlIGlmIChpc05hbWUoc3Vi
c2NyaXB0KSkgewpAQCAtMzM4OCw3ICszMzg4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X2dldHRlcgogICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBhc09iamVjdChnZXR0ZXIpKTsKICAgICBpZiAoIXNldHRlci5pc1VuZGVm
aW5lZCgpKQogICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBhc09iamVjdChzZXR0ZXIpKTsKLSAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3Nvcihj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwg
YWNjZXNzb3IsIEFjY2Vzc29yKTsKKyAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3NvcihjYWxs
RnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sxXS5pZGVudGlmaWVyKCksIGFjY2Vzc29yLCBBY2Nlc3Nv
cik7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Rocm93X3JlZmVyZW5jZV9l
cnJvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcgKzg1OCw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VY
Q0VQVElPTigpOwogICAgIExMSU5UX09QKDEpID0gcmVzdWx0OwotCisgICAgCiAgICAgaWYgKCFM
TElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKICAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCiAg
ICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGUoKQpAQCAtODc3LDcgKzg3Nyw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgICAgICAgICBwY1s1XS51
Lm9wZXJhbmQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6
OmdldE9wY29kZShsbGludF9vcF9nZXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51Lm9w
ZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTkzOSw3ICs5Mzks
NyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHBjWzZdLnUu
c3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7
CkBAIC05NjcsNyArOTY3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9i
eV9pZAogICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50
X29wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIHBjWzVdLnUu
b3BlcmFuZCA9IG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAq
IHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0g
b2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDQ2LDEy
ICsxMDQ2LDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAg
ICAKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50
MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFz
ZVZhbHVlKSkgewotICAgICAgICAgICAgSlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZh
bHVlKTsKLSAgICAgICAgICAgIGlmIChqc0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAg
ICAgICAgICBqc0FycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7CisgICAgICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJ
bmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHko
Z2xvYmFsRGF0YSwgaSwgdmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IEpTQXJyYXk6OnB1dEJ5SW5kZXgoanNBcnJheSwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAgICAgICBMTElOVF9FTkQoKTsKICAgICAgICAg
fQogICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKQEAgLTExMjgsNyArMTEyOCw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGUKICAgICBpZiAoIXNldHRlci5pc1VuZGVm
aW5lZCgpKQogICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGdsb2JhbERhdGEsIGFzT2JqZWN0
KHNldHRlcikpOwogICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKAotICAgICAgICBnbG9i
YWxEYXRhLAorICAgICAgICBleGVjLAogICAgICAgICBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRp
ZmllcihwY1syXS51Lm9wZXJhbmQpLAogICAgICAgICBhY2Nlc3NvciwgQWNjZXNzb3IpOwogICAg
IExMSU5UX0VORCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC05NDcsMjEgKzk0NywyMSBAQCBfbGxpbnRfb3BfaXNfc3RyaW5n
OgogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVy
dHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBhc3NlcnQobWFj
cm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sg
ZW5kKQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRP
ZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9h
ZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRT
dG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQg
KyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3Bl
cnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtv
YmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRpIFRhZ09mZnNldCAr
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRl
eGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQK
IGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0
LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNl
dCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKLSAgICBsb2FkcCBKU09iamVjdDo6
bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisg
ICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAogICAgIGptcCAucmVhZHkKIC5pc0lu
bGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmlu
YWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAq
IDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAg
ICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAK
IG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKQEAgLTEyODcsMTIgKzEyODcsOSBAQCBf
bGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBpZiBWQUxVRV9QUk9GSUxFUgogICAgICAgICBzdG9y
ZXAgdDMsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZVt0Ml0KICAgICBlbmQKLSAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
RGF0YVt0Ml0sIHQyCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3Qy
XSwgdDIKLSAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDIsIC5vcEdldEJ5
VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MF0sIHQzCi0gICAgYmlhZXEg
dDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93CisgICAgYnRw
eiBTdHJ1Y3R1cmU6Om1faW5kZXhpbmdUeXBlW3QzXSwgSGFzQXJyYXlTdG9yYWdlLCAub3BHZXRC
eVZhbFNsb3cKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MworICAgIGJp
YWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9y
TGVuZ3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgbG9h
ZGkgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MywgdDEsIDhdLCB0MgogICAg
IGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBQYXlsb2FkT2Zmc2V0W3QzLCB0MSwgOF0s
IHQxCkBAIC0xMzczLDEyICsxMzcwLDkgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAgICAgaWYg
VkFMVUVfUFJPRklMRVIKICAgICAgICAgc3RvcmVwIHQzLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNl
ZW5TdHJ1Y3R1cmVbdDBdCiAgICAgZW5kCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0g
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xv
YmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0sIHQwCi0gICAgYnBuZXEgU3RydWN0dXJlOjpt
X2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZhbFNsb3cKLSAgICBiaWFlcSB0MiwgSlNBcnJh
eTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5
OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGJ0cHogU3RydWN0dXJlOjptX2luZGV4aW5nVHlwZVt0
M10sIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6
Om1fYnV0dGVyZmx5W3QxXSwgdDAKKyAgICBiaWFlcSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwog
ICAgIGJpZXEgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDIsIDhdLCBF
bXB0eVZhbHVlVGFnLCAub3BQdXRCeVZhbEVtcHR5CiAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Ogog
ICAgIGxvYWRpIDEyW1BDXSwgdDMKQEAgLTEzOTAsOSArMTM4NCw5IEBAIF9sbGludF9vcF9wdXRf
YnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjpt
X251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0
aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0MiwgdDEKLSAgICBzdG9yZWkgdDEsIEFycmF5U3Rv
cmFnZTo6bV9sZW5ndGhbdDBdCisgICAgc3RvcmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVy
ICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXQogICAgIGptcCAub3BQdXRCeVZh
bFN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtODA2LDIwICs4MDYsMjAgQEAgX2xsaW50X29w
X2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZp
bmFsKHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAg
ICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQogICAgIG5lZ3AgcHJvcGVydHlPZmZzZXRBc1BvaW50
ZXIKLSAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3Jh
Z2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZh
bHVlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBv
YmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dEFzUG9pbnRlciwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAg
ICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5s
aW5lCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9y
YWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtv
YmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZz
ZXRBc0ludAogICAgIHN4aTJwIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJ
bnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0Ojpt
X2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RB
bmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmpl
Y3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUK
KyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4
aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1
ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKQEAgLTExMzIsMTIgKzEx
MzIsOSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBpZiBWQUxVRV9QUk9GSUxFUgogICAg
ICAgICBzdG9yZXAgdDMsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZVt0Ml0KICAg
ICBlbmQKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKLSAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fZ2xvYmFsRGF0YVt0Ml0sIHQyCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xh
c3NJbmZvW3QyXSwgdDIKLSAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDIs
IC5vcEdldEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MF0sIHQzCi0g
ICAgYmlhZXEgdDEsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wR2V0QnlWYWxTbG93
CisgICAgYnRieiBTdHJ1Y3R1cmU6Om1faW5kZXhpbmdUeXBlW3QzXSwgSGFzQXJyYXlTdG9yYWdl
LCAub3BHZXRCeVZhbFNsb3cKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0
MworICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
Om1fdmVjdG9yTGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93CiAgICAgbG9hZGlzIDhbUEIsIFBD
LCA4XSwgdDAKICAgICBsb2FkcCBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QzLCB0MSwgOF0sIHQy
CiAgICAgYnRweiB0MiwgLm9wR2V0QnlWYWxTbG93CkBAIC0xMjE3LDEyICsxMjE0LDkgQEAgX2xs
aW50X29wX3B1dF9ieV92YWw6CiAgICAgaWYgVkFMVUVfUFJPRklMRVIKICAgICAgICAgc3RvcmVw
IHQzLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVbdDBdCiAgICAgZW5kCi0gICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERh
dGFbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0MF0s
IHQwCi0gICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0M10sIHQwLCAub3BQdXRCeVZh
bFNsb3cKLSAgICBiaWFlcSB0MiwgSlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDFdLCAub3BQdXRC
eVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDFdLCB0MAorICAgIGJ0Ynog
U3RydWN0dXJlOjptX2luZGV4aW5nVHlwZVt0M10sIEhhc0FycmF5U3RvcmFnZSwgLm9wUHV0QnlW
YWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKKyAgICBiaWFl
cSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxl
bmd0aFt0MF0sIC5vcFB1dEJ5VmFsU2xvdwogICAgIGJ0cHogQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MCwgdDIsIDhdLCAub3BQdXRCeVZhbEVtcHR5CiAub3BQdXRCeVZhbFN0b3JlUmVzdWx0Ogog
ICAgIGxvYWRpcyAyNFtQQiwgUEMsIDhdLCB0MwpAQCAtMTIzMyw5ICsxMjI3LDkgQEAgX2xsaW50
X29wX3B1dF9ieV92YWw6CiAKIC5vcFB1dEJ5VmFsRW1wdHk6CiAgICAgYWRkaSAxLCBBcnJheVN0
b3JhZ2U6Om1fbnVtVmFsdWVzSW5WZWN0b3JbdDBdCi0gICAgYmliIHQyLCBBcnJheVN0b3JhZ2U6
Om1fbGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsU3RvcmVSZXN1bHQKICAgICBhZGRpIDEsIHQyLCB0MQotICAgIHN0b3JlaSB0MSwg
QXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0KKyAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCiAgICAgam1wIC5v
cFB1dEJ5VmFsU3RvcmVSZXN1bHQKIAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2
aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBlbHNlCiAgICAg
Y29uc3QgUGF5bG9hZE9mZnNldCA9IDAKIGVuZAogCisjIENvbnN0YW50IGZvciByZWFzb25pbmcg
YWJvdXQgYnV0dGVyZmxpZXMuCitjb25zdCBJc0FycmF5ID0gMQorY29uc3QgSGFzQXJyYXlTdG9y
YWdlID0gOAorY29uc3QgQWxsQXJyYXlUeXBlcyA9IDE1CisKICMgVHlwZSBjb25zdGFudHMuCiBj
b25zdCBTdHJpbmdUeXBlID0gNQogY29uc3QgT2JqZWN0VHlwZSA9IDEzCkBAIC0zNDEsNyArMzQ2
LDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNpemVDbGFzc0luZAogICAgICAgICBs
b2FkcCBjbGFzc0luZm9PZmZzZXRbc2NyYXRjaDFdLCBzY3JhdGNoMgogICAgICAgICBzdG9yZXAg
c2NyYXRjaDIsIFtyZXN1bHRdCiAgICAgICAgIHN0b3JlcCBzdHJ1Y3R1cmUsIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVbcmVzdWx0XQotICAgICAgICBzdG9yZXAgMCwgSlNPYmplY3Q6Om1fb3V0T2ZMaW5l
U3RvcmFnZVtyZXN1bHRdCisgICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
cmVzdWx0XQogICAgIGVuZAogZW5kCiAKQEAgLTUxNiw3ICs1MjEsNyBAQCBtYWNybyB3aXRoSW5s
aW5lU3RvcmFnZShvYmplY3QsIHByb3BlcnR5CiBlbmQKIAogbWFjcm8gd2l0aE91dE9mTGluZVN0
b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eVN0b3JhZ2UsIGNvbnRpbnVhdGlvbikKLSAgICBsb2FkcCBK
U09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQorICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RdLCBwcm9wZXJ0eVN0b3JhZ2UKICAg
ICAjIEluZGljYXRlIHRoYXQgdGhlIHByb3BlcnR5U3RvcmFnZSByZWdpc3RlciBub3cgcG9pbnRz
IHRvIHRoZQogICAgICMgcHJvcGVydHkgc3RvcmFnZSwgYW5kIHRoYXQgdGhlIG9iamVjdCByZWdp
c3RlciBtYXkgYmUgcmV1c2VkCiAgICAgIyBpZiB0aGUgb2JqZWN0IHBvaW50ZXIgaXMgbm90IG5l
ZWRlZCBhbnltb3JlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9v
bCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKUwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgcmV0dXJuIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7CiB9CiAKIGJvb2wg
QXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgCkBAIC0zMDgsNyArMzA4LDcgQEAgYm9vbCBBcmd1
bWVudHM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZQogICAgICAgICAvLyBJZiB0aGUgcHJvcGVy
dHkgaXMgbm90IHlldCBwcmVzZW50IG9uIHRoZSBvYmplY3QsIGFuZCBpcyBub3QgeWV0IG1hcmtl
ZCBhcyBkZWxldGVkLCB0aGVuIGFkZCBpdCBub3cuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
OwogICAgICAgICBpZiAoKCF0aGlzT2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzIHx8ICF0aGlz
T2JqZWN0LT5kLT5kZWxldGVkQXJndW1lbnRzW2ldKSAmJiAhSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRo
aXNPYmplY3QtPmFyZ3VtZW50KGkpLmdldCgpLCAwKTsKKyAgICAgICAgICAgIG9iamVjdC0+cHV0
RGlyZWN0TWF5QmVJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmFyZ3VtZW50
KGkpLmdldCgpKTsKICAgICAgICAgaWYgKCFCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJBcnJheUNvbnN0cnVjdG9yLmgiCiAKICNp
bmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb252
ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBcnJheUNvbnZlbnRpb25zX2gKKyNkZWZpbmUgQXJyYXlDb252ZW50aW9uc19o
CisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBDSEVDS19BUlJBWV9DT05TSVNURU5DWSAw
CisKKy8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKKy8vCisvLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkg
b2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6CisvLyAgICog
VGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8gICAqIEEgc3RvcmFnZSB2ZWN0
b3IuCisvLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCisvLworLy8gUHJvcGVy
dGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQg
YXJlIG5vdCByZXByZXNlbnRhYmxlCisvLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVy
ZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKKy8vIChzcGVjaWZp
Y2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUg
YXMgYW4gdW5zaWduZWQgMzItYml0CisvLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJy
YXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1h
cC4KKy8vCisvLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJl
c2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAorLy8gd2hlcmUgKGkgPD0gTUFYX0FS
UkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRo
ZXIgdGhlCisvLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGlu
ZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKKy8vIGZhc2hpb246CisvLwor
Ly8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
YmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8vICAgICB1bmxlc3MgdGhlIGFycmF5
IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRo
ZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgorLy8gICAgIGJlIHN0
b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5k
aW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBp
biB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0CisvLyAgICAg
KDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxh
dGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhf
QVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKKy8vICAgICBpbiB0
aGUgc3BhcnNlIGFycmF5LgorCisvLyBEZWZpbmUgdGhlIG1heGltdW0gc3RvcmFnZSB2ZWN0b3Ig
bGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkgLyAyIHRvIGVuc3VyZSB0aGF0Cisv
LyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorI2RlZmluZSBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kZXhpbmdIZWFkZXI6Om1heGltdW1M
ZW5ndGgpKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBp
biBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZworLy8gYSBQSUMgYnJhbmNoIGlu
IE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KKyNkZWZpbmUg
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9S
X0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKKy8vIDB4RkZGRkZGRkYgaXMg
YSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4g
aW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCisKKy8vIFRoZSB2
YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVt
ZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0
aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQorI2RlZmluZSBC
QVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3
ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAorLy8g
aXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9XIDRVCisKKy8vIE91ciBwb2xpY3kg
Zm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCisv
LyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2Ug
YWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgorLy8gYXMgbG9u
ZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBt
YXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OworCitp
bmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBudW1WYWx1ZXM7Cit9CisK
K2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlckZvckFycmF5KHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nSGVhZGVyIHJlc3Vs
dDsKKyAgICByZXN1bHQuc2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LnNldFZl
Y3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9yQXJyYXkobGVuZ3RoLCBCQVNFX1ZF
Q1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFycmF5Q29u
dmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUu
aCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNo
ZWRDYWxsLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQu
aCIKICNpbmNsdWRlICJKU1N0cmluZ0J1aWxkZXIuaCIKQEAgLTExNCw5ICsxMTYsMTcgQEAgY29u
c3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8gPQogQGVuZAogKi8KIAorQXJyYXlQ
cm90b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGV4ZWMtPmdsb2JhbERhdGEo
KSwgMCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUo
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcHJvdG90eXBlLT5maW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKIC8v
IEVDTUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU0FycmF5KGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCitBcnJheVByb3RvdHlwZTo6QXJy
YXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDogSlNBcnJheShnbG9iYWxPYmplY3Qt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiB7CiB9CiAKQEAgLTI5Miw4ICsz
MDIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKyspIHsKICAgICAgICAgSlNWYWx1ZSBl
bGVtZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXgoaykpCi0gICAgICAgICAg
ICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7CisgICAgICAgIGlmICh0aGlzT2JqLT5j
YW5HZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0
SW5kZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbGVtZW50ID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQxMywxMCArNDIzLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKysp
IHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAgICAg
aWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoayk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspOwog
ICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMp
KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2MzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogCi0gICAg
aWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXko
dGhpc09iaiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygp
ID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlSW5kZXhp
bmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihleGVjLCBj
YWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJheSh0aGlzT2JqKS0+c29ydE51
bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7CiAgICAgICAgIGVsc2Ug
aWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4OCw5ICs3OTgsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMs
IGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9u
KCk7ICsraykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpCisgICAg
ICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXgoayk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7CiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBqc051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1NiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJh
eSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwog
ICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykg
ewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFw
cGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5n
ZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5
LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIs
IHRoaXNPYmopOwogCkBAIC05MDksMTEgKzkxOSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlz
T2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAg
ICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRU
aGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFy
cmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAs
IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxs
LmNhbGwoKTsKQEAgLTk2NSwxMSArOTc1LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmop
OwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZv
ciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsK
LSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGsp
KTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4
UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVt
YmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7
CiAKQEAgLTEwMTcsMTEgKzEwMjcsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAg
ICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7
IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBs
eVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0
SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+
Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0
aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7
CkBAIC0xMDc1LDggKzEwODUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2
ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdl
dEluZGV4KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgoMCk7CisgICAgZWxzZSBp
ZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseSgwKSl7CisgICAgICAgIHJ2ID0g
YXJyYXktPmdldEluZGV4UXVpY2tseSgwKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMDk3LDggKzExMDcs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKICAgICAgICAgICAgIEpTVmFsdWUgdjsKLSAgICAgICAg
ICAgIGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4KGkpKSkKLSAgICAgICAgICAgICAgICB2
ID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2Fu
R2V0SW5kZXhRdWlja2x5KGkpKSkKKyAgICAgICAgICAgICAgICB2ID0gYXJyYXktPmdldEluZGV4
UXVpY2tseShpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBicmVhazsgLy8g
bGVuZ3RoIGhhcyBiZWVuIG1hZGUgdW5zYWZlIHdoaWxlIHdlIGVudW1lcmF0ZSBmYWxsYmFjayB0
byBzbG93IHBhdGgKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgdik7CkBA
IC0xMTUyLDggKzExNjIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GCiAgICAgCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBy
diA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5H
ZXRJbmRleChsZW5ndGggLSAxKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4KGxlbmd0
aCAtIDEpOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHko
bGVuZ3RoIC0gMSkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkobGVuZ3Ro
IC0gMSk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdW5zaWduZWQgaWR4ID0gbGVu
Z3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlkeCkpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGlkeCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51
bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaWR4KSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlkeCkpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAgICAgICAgICBydiA9IGNhY2hl
ZENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZSA6IHB1Ymxp
YyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheVByb3RvdHlwZSog
cHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpl
eGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBBcnJh
eVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CkBAIC00Nyw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheVN0
b3JhZ2VfaAorI2RlZmluZSBBcnJheVN0b3JhZ2VfaAorCisjaW5jbHVkZSAiQXJyYXlDb252ZW50
aW9ucy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVy
LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBzdHJ1Y3QgaG9sZHMgdGhlIGFj
dHVhbCBkYXRhIHZhbHVlcyBvZiBhbiBhcnJheS4gIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRv
IGl0J3MgY29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1f
dmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNl
IHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBp
bXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5
U3RvcmFnZSB0aGF0IAorLy8gaXMgdXNlZCB0byBxdWljayB1bnNoaWZ0IC8gc2hpZnQgb3BlcmF0
aW9uLiAgVGhlIGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6
CisvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0
cnVjdCBBcnJheVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFn
ZSk7Citwcml2YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5z
dGFudGlhYmxlLiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitw
dWJsaWM6CisgICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJm
bHkpOyB9CisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5k
ZXhpbmdIZWFkZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQor
ICAgIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxCdXR0ZXJmbHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRl
cigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8g
V2Ugc3RlYWwgdHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0
aCBhbmQgbGVuZ3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVh
ZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVu
Z3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOyB9CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9y
TGVuZ3RoKCk7IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsg
aW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY29weUhlYWRlckZyb21EdXJpbmdHQyhjb25zdCBBcnJheVN0b3Jh
Z2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAuY29weUZyb20ob3RoZXIubV9z
cGFyc2VNYXApOworICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOworICAg
ICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5kZXgg
PSBvdGhlci5tX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisgICAg
fQorICAgIAorICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3NwYXJzZU1hcCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAgICAKKyAg
ICBXcml0ZUJhcnJpZXI8U3BhcnNlQXJyYXlWYWx1ZU1hcD4gbV9zcGFyc2VNYXA7CisgICAgdW5z
aWduZWQgbV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNp
ZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90
IGZvciBhbGlnbm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25J
bmRleDsKKyAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1
cm4gQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBudW1WYWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1faW5kZXhCaWFzKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgc3BhcnNlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9zcGFyc2VNYXApOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBz
aXplRm9yKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBBcnJheVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseV9o
CisjZGVmaW5lIEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2lu
Y2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRv
cjsKK3N0cnVjdCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkgeyB9
IC8vIE5vdCBpbnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0
b3RhbFNpemUoc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID8gaGFzSW5k
ZXhpbmdIZWFkZXIgOiB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgPT0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNp
dHkgKyBwcm9wZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyAoaGFzSW5k
ZXhpbmdIZWFkZXIgPyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIDogMCkgKyBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2
b2lkKiBiYXNlLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBh
Y2l0eSArIDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5k
ZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hl
YWRlcigpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsg
cmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpIHsgcmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVy
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRl
KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwg
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAg
ICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRl
cjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRl
cigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJv
cGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCkt
PnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdl
KiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigp
OyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgp
IHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikp
OyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0
b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJh
c2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIFRoZSBidXR0ZXJmbHkgcmVh
bGxvY2F0aW9uIG1ldGhvZHMgcGVyZm9ybSB0aGUgcmVhbGxvY2F0aW9uIGl0c2VsZiBidXQgZG8g
bm90IGNoYW5nZSBhbnkKKyAgICAvLyBvZiB0aGUgbWV0YS1kYXRhIHRvIHJlZmxlY3QgdGhhdCB0
aGUgcmVhbGxvY2F0aW9uIG9jY3VycmVkLiBOb3RlIHRoYXQgdGhpcyBzZXQgb2YKKyAgICAvLyBt
ZXRob2RzIGlzIG5vdCBleGhhdXN0aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxh
dGUgYWxsIHBvc3NpYmxlIGFsbG9jYXRpb24KKyAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAt
IHRoZXJlIGFyZSBjb2RlIHBhdGhzIHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGlu
ZworICAgIC8vIGRpcmVjdGx5IGludG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgorICAgIEJ1
dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBz
aXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3
UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFkSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcywgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0
aGF0IHByZUNhcGFjaXR5IGlzIHplcm8sIGFuZCBhc3NlcnRzIGFzIG11Y2guCisgICAgQnV0dGVy
Zmx5KiBncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJl
c2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9s
ZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMs
IHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFy
cmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2Fw
YWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMg
dGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFzIGFu
IGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBCdXR0ZXJmbHkqIHNoaWZ0KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5l
TWV0aG9kc19oCisjZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3Bl
cnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIHNpemVfdCBzaXplID0gdG90
YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShzaXplLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVy
Zmx5OjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJ
bmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
CisgICAgICAgIGdsb2JhbERhdGEsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJ
bmRleGluZ0hlYWRlcikKKyAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4
aW5nSGVhZGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYg
dmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQor
eworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxs
b2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLAorICAgICAgICBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW5saW5lIHZvaWQqIEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICByZXR1cm4gYmFzZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBC
dXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4g
b2xkUHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBtZW1jcHkoCisgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9w
ZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2Fw
YWNpdHksCisgICAgICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAg
IHJldHVybiBncm93UHJvcGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAor
ICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAg
ICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0
dXJlKSwgbmV3UHJvcGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRl
cmZseTo6Z3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBy
ZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0
dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNp
dHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCkt
PnByZUNhcGFjaXR5KG9sZFN0cnVjdHVyZSkpOworICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0
dXJlLCBoYWRJbmRleGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlD
YXBhY2l0eSk7CisgICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVl
LCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlD
YXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5Umln
aHQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6
ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJy
YXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBv
bGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3Vs
dCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVj
aCBtb3JlIGVmZmljaWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAorICAgIC8vIG5v
dCB0aGUgY2FwYWNpdHkuCisgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgp
IC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eUNhcGFjaXR5OworICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCisgICAgICAg
IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xk
SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVy
dHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKSk7CisgICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBh
Y2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpOworICAgIHJldHVybiByZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAg
ICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0
dXJlKSwgbmV3UHJlQ2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6dW5zaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7
CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICBBU1NFUlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBh
Y2l0eShzdHJ1Y3R1cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJs
eSBiZSB3aXNlIHRvIHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4g
d2hpY2gKKyAgICAvLyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBu
ZWVkIHRoZSBleHRyYSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3Zp
bmcgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhy
b3VnaHB1dCBvZiBtZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9m
IGNhbGxpbmcgaXQuIEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0
bworICAgIC8vIGlubGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJn
dW1lbnQgaXMgbGlrZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkg
b24gdGhlIGNvbXBpbGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIg
YXJndW1lbnRzIChzaW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5k
IGNvdWxkIGNhdXNlIHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgor
ICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNp
dHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsK
KyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAt
IG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0
dGVyZmx5OjpzaGlmdChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMp
Cit7CisgICAgQVNTRVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFi
b3ZlLgorICAgIG1lbW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSArIG51bWJlck9mU2xvdHMsCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJv
cGVydHlDYXBhY2l0eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5
Q2FwYWNpdHkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KDApKTsKKyAgICByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3Jh
Z2UoKSArIG51bWJlck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQg
KCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgICAgIEdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIg
Z2V0UHJvcGVydHlOYW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVj
ayMjbWVtYmVyIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93
blByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0lu
c3RhbmNlLCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5n
SGVhZGVyX2gKKyNkZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlT
dG9yYWdlLmgiCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBCdXR0ZXJmbHk7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBT
dHJ1Y3R1cmU7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7
CitwdWJsaWM6CisgICAgLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0
aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorICAgIC8v
IHRoZXJlIGlzIG5vIHJpc2sgb2Ygb3ZlcmZsb3cuCisgICAgZW51bSB7IG1heGltdW1MZW5ndGgg
PSAweDEwMDAwMDAwIH07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4
aW5nSGVhZGVyKCkgeyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSk7IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGlj
TGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX3B1Ymxp
Y0xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX3ZlY3Rvckxlbmd0aCk7
IH0KKyAgICAKKyAgICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9wdWJsaWNMZW5ndGgo
MCkKKyAgICAgICAgLCBtX3ZlY3Rvckxlbmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dWludDMyX3QgdmVjdG9yTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JMZW5ndGg7IH0K
KyAgICAKKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50MzJfdCBsZW5ndGgpCisgICAgewor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX3ZlY3Rv
ckxlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgeyByZXR1cm4gbV9wdWJsaWNMZW5ndGg7IH0KKyAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1
aW50MzJfdCBhdXhXb3JkKSB7IG1fcHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQorICAgIAorICAg
IHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVy
Zmx5KSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJbmRleGluZ0hlYWRlciog
ZnJvbShjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2Uq
IGFycmF5U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PElu
ZGV4aW5nSGVhZGVyKj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBJbmRleGluZ0hlYWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3Jh
Z2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KHByb3BlcnR5U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBw
cm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0
b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisg
ICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxCdXR0ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNl
IG1ldGhvZHMgYXJlIG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90
IGJlCisgICAgLy8gdXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNp
emVfdCBwcmVDYXBhY2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoU3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisgICAgCisgICAgdWludDMyX3QgbV9wdWJsaWNMZW5n
dGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlw
ZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNs
eSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KKyAgICB1aW50MzJfdCBtX3ZlY3Rvckxl
bmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUg
YWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUu
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVm
aW5lIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJJbmRleGluZ0hl
YWRlci5oIgorI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJl
Q2FwYWNpdHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKwor
aW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9y
TGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJ
bmRleGluZ1R5cGVfaAorI2RlZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3Rpbmcg
dGhlIHByZXNlbmNlIG9mIGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SXNBcnJheSAgICAgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SGFzQXJyYXlTdG9yYWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBmbGFncyBmb3Ig
dHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CisvLyBt
YXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhh
dCB0aGlzIG9iamVjdCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5ICAgICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZTsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8
IEhhc0FycmF5U3RvcmFnZTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDE1OworCisv
LyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCitp
bmxpbmUgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihJbmRleGluZ1R5cGUgdHlwZSkKK3sKKyAgICBy
ZXR1cm4gISEodHlwZSAmIEhhc0FycmF5U3RvcmFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSW5kZXhpbmdUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFt
ZSogY2EKICAgICAgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwKICAgICAgICAgY2FsbEZyYW1l
LT5zY29wZSgpCiAgICAgKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNh
cHR1cmVkQXJncyhtYXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlv
bkV4ZWN1dGFibGUtPmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYo
ZmFsc2UpCkBAIC03MiwxMiArNzIsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKICAgICAvLyBObyBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxs
IGluIHRoZSBSZWdpc3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkg
PSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdl
IHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFy
ZWdpc3RlckFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBl
bmQoYml0d2lzZV9jYXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdp
c3RlckFycmF5U2l6ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0
ZXJBcnJheSksIHRoaXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmpl
Y3QtPm1fcmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVu
Y2hlY2tlZCk7CisgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJh
eTsKICAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2Jq
ZWN0LT5yZWdpc3Rlck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2Jq
ZWN0LCBzaW5jZSBpdCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzNiw3ICsxMzYsNyBAQCBp
bmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsK
IApAQCAtMTUxLDggKzE1MSw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEoKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRo
ZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMK
LSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxl
bWVudGF0aW9uIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI3
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lz
dGVyQXJyYXlTaXplKCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMo
KTsKIAotICAgICAgICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5k
ZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVz
IGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0
eVN0b3JhZ2UgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVy
cywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBv
ZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAg
ICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnMgOiAzMDsKICAgICAgICAgYm9vbCBtX2lzVG9ybk9m
ZiA6IDE7CkBAIC0xNjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZvciAo
aW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwogCi0gICAgICAgIG1fcmVn
aXN0ZXJBcnJheS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAg
IG1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIG1fcmVnaXN0ZXJzID0g
cmVnaXN0ZXJzOwogICAgICAgICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3Au
Y29tKQogICoKQEAgLTI0LDEzICsyNCwxNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2lu
Y2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVycm9yLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2lu
Y2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlByb3BlcnR5
TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsNDgw
ICs0OSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNB
cnJheSk7CiBBU1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3Zl
cnZpZXcgb2YgSlNBcnJheQotLy8KLS8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1h
eSBiZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxh
ciBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCi0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAg
KiBBIHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGgg
bm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJl
cHJlc2VudGFibGUKLS8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1
ZSBpcyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhp
cyBpcyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNp
Z25lZCAzMi1iaXQKLS8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2Vz
IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8v
IEFsbCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBh
cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGksCi0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
LCBhcmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8v
IHN0b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxs
IGJlIGhhbmRsZWQgaW4gdGhlIGZvbGxvd2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hl
cmUgKGkgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQg
aW4gdGhlIHN0b3JhZ2UgdmVjdG9yLAotLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3Bh
cnNlTW9kZSBpbiB3aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8v
ICAgKiBXaGVyZSAoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRo
ZSBzdG9yYWdlIHZlY3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhl
IGRlbnNpdHkgb2YKLS8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0
b3IgKGEgdmVjdG9yIGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRl
bnNpdHlNdWx0aXBsaWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8g
ICAqIFdoZXJlIChNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRF
WCkgdGhlIHZhbHVlIHdpbGwgYWx3YXlzIGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2Ug
YXJyYXkuCi0KLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgg
aXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBi
ZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3Vj
aCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4g
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSAr
Ci0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3Qg
YmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNk
ZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4
RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2
YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0
aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2Vl
IDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRF
WCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gMSkKLS8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90
IGFuIGFycmF5IGluZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFY
X0FSUkFZX0lOREVYIDB4RkZGRkZGRkVVCi0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4g
aXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQot
Ly8gZm9yIGFuIGFycmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGgg
KGUuZy4gYSA9IG5ldyBBcnJheSgxMjMpKQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAg
ICAKLS8vIFRoZSB1cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5n
dGggYXJyYXkgd2hlbiB0aGUgZmlyc3QgZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJ
UlNUX1ZFQ1RPUl9HUk9XIDRVCi0KLS8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVj
dG9yIGFuZCB3aGVuIHRvIHVzZSBhIHNwYXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGlj
ZXMgdW5kZXIgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4K
LS8vIFdoZW4gaW5kaWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUg
aW52b2x2ZWQsIHdlIHVzZSBhIHZlY3RvcgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4g
SWYgbW9yZSBzcGFyc2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluRGVuc2l0eU11bHRpcGxpZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJh
eTo6c19pbmZvID0geyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBz
aXplIG9mIHRoZSBsYXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0v
LyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0
IGFycmF5IGZyb20gc2l6ZSAwLgotLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0
YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFz
dEFycmF5U2l6ZSA9IDA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBs
ZW5ndGggPD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVs
dGlwbGllciA8PSBudW1WYWx1ZXM7Ci19Ci0KLXN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKHRocm93RXhjZXB0aW9uKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwobWVzc2FnZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJB
WV9DT05TSVNURU5DWQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENv
bnNpc3RlbmN5Q2hlY2tUeXBlKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgpCiB7Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsK
LSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0Vf
VkVDVE9SX0xFTjsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6
ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNp
emUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0
aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAg
ICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRy
dWUsIEluZGV4aW5nSGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9y
YWdlLT5zZXRMZW5ndGgoaW5pdGlhbExlbmd0aCk7CisgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVu
Z3RoKDApOworICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICBzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5jbGVhcigpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwog
I2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uID0gZmFsc2U7CisgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4
ID0gMDsKKyAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKICNlbmRp
ZgotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlG
aW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3Ig
bGVuZ3RocyBsYXJnZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYg
KGluaXRpYWxMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExl
bmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUg
PSBzdG9yYWdlU2l6ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3Jh
Z2UgPSAwOwotICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0
aWFsU3RvcmFnZVNpemUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAg
ICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAg
ICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9s
ZW5ndGggPSBpbml0aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rv
ckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVu
Z3RoOwotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxp
emF0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMg
ZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3Qu
Ci12b2lkIEpTQXJyYXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0
LT5kZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNp
Z25lZCBpKQotewotICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0
aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQg
PSBtX21hcC5hZGQoaSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFj
aXR5KCk7Ci0gICAgaWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAg
ICBIZWFwOjpoZWFwKGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1f
cmVwb3J0ZWRDYXBhY2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pKSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5Owot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZh
bHVlTWFwOjpwdXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQs
IHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVu
Y29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlz
IG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBo
YXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYm
ICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRv
cik7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMg
JiBBY2Nlc3NvcikpIHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkg
ewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRl
RXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAg
QVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIg
PSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0
dGVyKSB7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0
YShzZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAg
IGFyZ3MuYXBwZW5kKHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBhcnJheSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKLXsKLSAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZp
bmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8g
SW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhl
IGFycmF5IGlzIG5vdAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0
aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKG1vZGUgIT0gUHV0
RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+
aXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50
cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYg
c2xvdCkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNT
RVJUKHZhbHVlKTsKLQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7
Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7
Ci0gICAgaWYgKCFnZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQot
Ci1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKSBjb25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpn
ZXQoKSwgYXR0cmlidXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6
OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFs
dWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAo
TElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVy
KCk7Ci0gICAgaWYgKCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0g
ICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBj
YWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlM
aXN0KCkpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFy
c2VNb2RlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBC
YXNlOjpnZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQg
SlNBcnJheTo6YWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewot
ICAgIG1fc3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9i
YWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0Fy
cmF5OjpkZWFsbG9jYXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1h
cDsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRp
Y3Rpb25hcnlNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3Bh
cnNlTWFwKGdsb2JhbERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAg
IH0KLQotICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bWFwLT5zZXRTcGFyc2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBh
bHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBj
YW4gd3JpdGUsCi0gICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5l
ZWQgdG8gc2V0IHRoZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRk
KHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
LSAgICB9Ci0KLSAgICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdl
KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHko
bmV3U3RvcmFnZSwgbV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0g
ICAgbV9pbmRleEJpYXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBK
U0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZERlc2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBl
bnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVl
KCkpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vz
c29yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAg
ICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0g
ZGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3Jp
cHRvci5nZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAg
ICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9
IGRlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2Ny
aXB0b3Iuc2V0dGVyT2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9
IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAg
ICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0g
ICAgICAgIGlmIChzZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKSAmIH5SZWFkT25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChk
ZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpOwotfQotCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZp
bmVPd25OdW1lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAg
IEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkp
IHsKLSAgICAgICAgLy8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0
eSB0byBhIHJlZ3VsYXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1p
c3RpY2FsbHkgYXNzdW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXkn
bGwgZGVmYXVsdCB0byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVy
dHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9t
IHRoZWlyIGN1cnJlbnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blBy
b3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVu
dGVyaW5nICdTcGFyc2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVz
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVz
Y3JpcHRvci52YWx1ZSgpLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhy
b3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKLSAgICAgICAgfQotCi0gICAgICAg
IGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVCht
YXApOwotCi0gICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBu
YW1lIFAuCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+
YWRkKHRoaXMsIGluZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhl
IHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAg
IC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0
aGVuIFJlamVjdC4KLSAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5z
aWJsZSBpcyB0cnVlLCB0aGVuCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5p
dGVyYXRvcik7Ci0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rl
c2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNy
ZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBP
IHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25m
aWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkg
RGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2Vu
dCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0
eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVz
YyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBv
d24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9z
ZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBh
dHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhl
IHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJp
YnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8g
aXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVu
dHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBl
bnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBt
X3N0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGlu
ZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJu
IHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVy
biB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5k
IHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRo
ZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUg
U2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJl
bnQ7Ci0gICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlz
RW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSB0aGVuCi0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7
Ci0gICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBv
ZiBEZXNjIGlzIHRydWUuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNl
bnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3Vy
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8v
IDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVz
ZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJl
IHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlw
dG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3Jp
cHRvci5lbnVtZXJhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93
RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2Yg
dW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5l
cmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBp
cyByZXF1aXJlZC4KLSAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7
Ci0gICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElz
RGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAg
ICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNj
cmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
dGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZv
ciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYg
SXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3Bl
cnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3Bl
cnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVz
IG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3Vy
YWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2Yg
dGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZh
dWx0IHZhbHVlcy4KLSAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVy
dHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0
YSBwcm9wZXJ0eS4KLSAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMg
b2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVt
ZXJhYmxlXV0KLSAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0
aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAg
ICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5p
c0RhdGFEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFE
ZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRy
dWUsIHRoZW4KLSAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZp
ZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBp
cyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAg
ICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAg
ICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVj
dCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1
ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAg
ICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlw
dG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1
ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0
cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQu
Z2V0dGVyUHJlc2VudCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAg
IC8vIDExLiBFbHNlLCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxl
XV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBp
ZiB0aGUgW1tTZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNj
LltbU2V0XV0sIGN1cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYg
KGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3Vy
cmVudC5zZXR0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVj
dCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUo
RGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAg
IGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9
IGN1cnJlbnQuZ2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFu
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQg
aXMgcHJlc2VudCwgc2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRo
ZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQu
Ci0gICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50
KTsKLSAgICAvLyAxMy4gUmV0dXJuIHRydWUuCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGJ1dHRlcmZseTsKIH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3Rh
dGUqIGV4ZWMsIGJvb2wgd3JpdGFibGUpCkBAIC01MjcsOSArNzQsOSBAQCB2b2lkIEpTQXJyYXk6
OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkg
fHwgd3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeU1vZGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3Bh
cnNlVmFsdWVNYXA7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9yYWdl
KCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0TGVu
Z3RoSXNSZWFkT25seSgpOwogfQpAQCAtNjMwLDM4ICsxNzcsMTAgQEAgYm9vbCBKU0FycmF5Ojpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdAogICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNj
LltbVmFsdWVdXSB0byBpbmRleCArIDEuCiAgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1
bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBh
c3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMg
Y2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUu
Ci0gICAgICAgIHJldHVybiBhcnJheS0+ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGlu
ZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpT
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotfQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2U7Ci0KLSAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAg
ICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYg
KHZhbHVlKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBh
cnJheS0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0
aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xv
dCk7CisgICAgcmV0dXJuIGFycmF5LT5KU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0KIAog
Ym9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTY3MiwxMCArMTkxLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
Ci0gICAgICAgIHJldHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGksIHNsb3QpOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApAQCAt
Njg3LDI2ICsyMDIsNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
IHsKLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlW
YWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAg
ICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQt
PnNlY29uZC5nZXQoZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKIH0KIApAQCAtNzE0LDExICsyMDksNiBAQCBib29sIEpTQXJyYXk6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXRC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2
YWx1ZS50b1VJbnQzMihleGVjKTsKQEAgLTczMywxOTYgKzIyMyw5IEBAIHZvaWQgSlNBcnJheTo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQKICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTQXJyYXk6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5j
eSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdl
OwotCi0gICAgLy8gRmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICBpZiAoaSA8
IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0
aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBs
ZW5ndGgpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLQotICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwotICAgICAgICB0aGlzT2JqZWN0
LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBI
YW5kbGUgMl4zMi0xIC0gdGhpcyBpcyBub3QgYW4gYXJyYXkgaW5kZXggKHNlZSBFUzUuMSAxNS40
KSwgYW5kIGlzIHRyZWF0ZWQgYXMgYSByZWd1bGFyIHByb3BlcnR5LgotICAgIGlmIChVTkxJS0VM
WShpID4gTUFYX0FSUkFZX0lOREVYKSkgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChz
aG91bGRUaHJvdyk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlz
T2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBjYWxs
IHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGguCi0gICAgdGhpc09iamVjdC0+cHV0QnlJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFy
cmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNT
RVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRF
WCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBo
YW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgot
ICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBl
eHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNy
ZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAg
ICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwg
YmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAg
ICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAx
KSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBp
dCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgot
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRv
IGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFs
dWUuCi0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
ICAgIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9o
aWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAg
ICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAx
OwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBX
ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50
IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJz
ZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2Us
IG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1
ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdl
IGFmdGVyaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgot
ICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IG51bVZhbHVlc0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUg
bWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1h
cCgpOwotCi0gICAgLy8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYg
KCF2YWx1ZVNsb3QpCi0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAg
ICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0Fy
cmF5OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQotewotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8v
IGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBj
dXJyZW50IHZlY3Rvci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNT
RVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwOwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50
bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAv
LyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQg
ZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NF
UlQoaXNFeHRlbnNpYmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYg
bmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBp
dCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRv
IGdyb3cgdGhlIHZlY3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZl
Y3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSBy
ZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5k
IHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlKTsKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0
ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1h
cChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwot
ICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUp
OwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7
Ci0gICAgICAgIC8vIFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qg
d3JpdGFibGUuCi0gICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVj
dCkgewotICAgICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAg
aWYgKCFpc0V4dGVuc2libGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5l
IHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9
Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxl
bmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hl
Y2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwg
Y29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVj
dG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5z
aWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBt
YXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hG
b3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5n
dGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXRE
aXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotCi0gICAgLy8gUmVyZWFkIG1fc3Rv
cmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rv
ci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20g
dGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFy
c2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9y
LgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAg
IGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9
IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC05MzAsMzUgKzIzMyw2IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiBjZWwKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQotewotICAg
IEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNP
YmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVY
KQotICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAg
aWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBp
ZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAg
ICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1
ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+
ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAg
ICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCog
YSwgY29uc3Qgdm9pZCogYikKIHsKICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCo+KGEpOwpAQCAtOTY2LDEyNyArMjQwLDI2IEBAIHN0YXRpYyBpbnQgY29tcGFy
ZUtleXNGb3JRU29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIp
OwogfQogCi12b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxs
aW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdl
cgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2Ug
bmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5
IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0g
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhp
c09iamVjdC0+bV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ld
KQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
KSk7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmpl
Y3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwot
ICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgp
OwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBE
b250RW51bSkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGl0LT5maXJzdCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigp
LCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7
Ci0gICAgfQogCiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAK
LSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5Ojpn
ZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQo
ZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2ln
bmVkIGluY3JlYXNlZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1f
c3RvcmFnZS0+bV9sZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBt
YXhJbml0TGVuZ3RoKQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwot
ICAgIGVsc2UgaWYgKCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
bWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAv
LyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExl
bmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAg
Ly8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsK
LSAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4K
LSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3Ro
ID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVh
c2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihp
bmNyZWFzZWRMZW5ndGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5j
cmVhc2VkTGVuZ3RoLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0Fy
cmF5OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIG5ld0xlbmd0aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkg
aW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3Qg
bW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0
b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRv
IGl0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVj
dG9yTGVuZ3RoOwotICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVu
c2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwot
Ci0gICAgLy8gRmFzdCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNh
c2VzIGEgcmVhbGxvYyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2luZGV4Qmlhcykp
IHsKLSAgICAgICAgdm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAg
ICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFn
ZSwgc3RvcmFnZVNpemUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3Ro
KSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3Rv
cmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNo
YXIqPihuZXdTdG9yYWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdT
dG9yYWdlOwotICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAg
ICAgbV92ZWN0b3JMZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2Yg
dGhlIHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBh
cnJheSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFz
ID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAg
IC8vIENhbGN1bGF0ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUg
cHJlLWNhcGFjaXR5LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rv
ckxlbmd0aCArIG5ld0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdT
dG9yYWdlQ2FwYWNpdHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAvLyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxs
IG5ldmVyIGV4Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3Zl
Y3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1f
dmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5k
ZXhCaWFzOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFn
ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNl
KSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIg
JiBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2Us
IHN0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUg
b2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxs
b2NCYXNlID0gbmV3QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9y
LCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50
KQogewotICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBm
YXN0IHBhdGguCi0gICAgQVNTRVJUKGNvdW50ID4gbV9pbmRleEJpYXMpOworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ug
c2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNv
dW50ID4gc3RvcmFnZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdh
dGhlciA0IGtleSBtZXRyaWNzOgpAQCAtMTA5NSw4ICsyNjgsOCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFNsb3dDYXNlKEpTR2xvCiAgICAgLy8gICogY3VycmVudENhcGFjaXR5IC0gd2hh
dCBpcyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNh
cGFjaXR5LgogICAgIC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2Ug
bGlrZSB0byBncm93IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxl
bmd0aC4KIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNl
ZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAg
ICBBU1NFUlQodXNlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
ICAgICAvLyBDaGVjayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGlu
IGFuIG92ZXJmbG93LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTExMDQsOCArMjc3LDggQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVp
cmVkVmVjdG9yTGVuZ3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChy
ZXF1aXJlZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAv
LyBUaGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4
Y2VlZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIIC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJy
ZW50Q2FwYWNpdHkgPSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0
b3JhZ2UtPm1faW5kZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBj
YWxjdWxhdGlvbiBvZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUg
cmFuZ2Ugb2YgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVk
Q2FwYWNpdHkgPSBtaW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9S
X0xFTiwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCkBAIC0xMTE2LDEwICsyODksMTEg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVk
IG5ld1N0b3JhZ2VDYXBhY2l0eTsKICAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5
IGlzIHN1ZmZpY2llbnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2Vl
cCB1c2luZyBpdC4KICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYm
IGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxl
bmd0aCkpIHsKLSAgICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7Cisg
ICAgICAgIG5ld0FsbG9jQmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNp
emUoZGVzaXJlZENhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIHNpemVfdCBuZXdT
aXplID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOworICAgICAgICBpZiAoIWdsb2Jh
bERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRl
c2lyZWRDYXBhY2l0eTsKICAgICB9CkBAIC0xMTMyLDQ1ICszMDYsNDAgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vIElmIGl0IGRpZCwgd2UgY2FsY3Vs
YXRlIHRoZSBhbW91bnQgdGhhdCB3aWxsIHJlbWFpbiBiYXNlZCBvbiBhbiBhdG9taWMgZGVjYXkg
LSBsZWF2ZSB0aGUKICAgICAvLyB2ZWN0b3Igd2l0aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0
IGhhZCBwcmV2aW91c2x5LgogICAgIHVuc2lnbmVkIHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYg
KGxlbmd0aCA8IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKSB7CiAgICAgICAgIC8vIEF0b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBh
Y2l0eSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBw
b3N0Q2FwYWNpdHkgPSBtaW4oKG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9y
YWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIC8vIElmIHdlJ3Jl
IG1vdmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2Fw
YWNpdHkgaXMgYmVpbmcgcmVkdWNlZC4KLSAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBz
dG9yYWdlLT5tX2FsbG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxl
bmd0aCk7Ci0gICAgfQotCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0
aCArIHBvc3RDYXBhY2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAt
IG1fdmVjdG9yTGVuZ3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFy
cmF5U3RvcmFnZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3
QWxsb2NCYXNlKSArIG1faW5kZXhCaWFzKTsKLQotICAgIC8vIFN0ZXAgNDoKLSAgICAvLyBDb3B5
IGFycmF5IGRhdGEgLyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0
LWNhcGFjaXR5ICYgZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCi0KLSAgICAvLyBJZiB0aGlzIGlz
IGJlaW5nIG1vdmVkIHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJl
IGFsd2F5cyBzaGlmdGluZyBkYXRhCi0gICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+
IG1faW5kZXhCaWFzKS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhl
YWRlci4KLSAgICBtZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0
aCk7Ci0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQot
ICAgIC8vIEFyZSB3ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3
QWxsb2NCYXNlICE9IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0
aGUgb2xkIGFsbG9jYXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdl
LT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWlu
KChzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFj
aXR5IC0gcmVxdWlyZWRWZWN0b3JMZW5ndGgpOworICAgICAgICAvLyBJZiB3ZSdyZSBtb3Zpbmcg
Y29udGVudHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlz
IGJlaW5nIHJlZHVjZWQuCisgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5
LT5iYXNlKHN0cnVjdHVyZSgpKSB8fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSAtIGxlbmd0aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0
aCA9IHJlcXVpcmVkVmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5l
d0luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jh
c2UsIG5ld0luZGV4QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgbWVtbW92ZShu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5t
X3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92
ZShuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBw
cm9wZXJ0eVNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKDApKTsKKyAgICAKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0
b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9
IG5ld0J1dHRlcmZseTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0Nv
bnNpc3RlbmN5KCk7CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVu
Z3RoIGlzIHJlYWQgb25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50
ZXIgdGhlIGZvbGxvd2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwg
bV9zcGFyc2VWYWx1ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9y
YWdlLT5tX3NwYXJzZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0g
bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBz
dG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5n
dGggaXMgbm90IHdyaXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTE5Nyw3ICszNjYsNyBAQCBib29s
IEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwpAQCAtMTIwNiwxNCArMzc1LDE0IEBA
IGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgICAg
ICAgICAgICAgbWFwLT5yZW1vdmUoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewog
ICAgICAgICAvLyBEZWxldGUgcHJvcGVydGllcyBmcm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wg
aGFkVmFsdWUgPSB2YWx1ZVNsb3Q7CkBAIC0xMjIyLDUzICszOTEsNjUgQEAgYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3Rv
cmFnZS0+bV9sZW5ndGggPSBuZXdMZW5ndGg7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xl
bmd0aCk7CiAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgp
OwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlm
ICghbGVuZ3RoKSB7Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcikpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAg
ICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgaWYgKGluZGV4
IDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3Qp
IHsKLSAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAg
ICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAgICAgICAgICAgIHZhbHVl
U2xvdC5jbGVhcigpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7CisgICAg
ICAgIGlmIChpbmRleCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4
XTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICAtLXN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdmFsdWVTbG90LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKLSAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAgICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5z
ZXRMZW5ndGgoaW5kZXgpOworICAgICAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgfQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4K
LSAgICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2Fs
bCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4
IGFuZCB0cnVlLgotICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGlu
ZGV4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlVuYWJs
ZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8v
IENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMg
aW5keCBhbmQgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywg
ZXhlYywgaW5kZXgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxl
IHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgICAgICB9CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBz
ZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4K
KyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwg
dGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIs
IGluZHgsIGFuZCB0cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAg
Ly8gUmV0dXJuIGVsZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBl
bGVtZW50OwogfQogCiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdp
dGggdHdvIHNtYWxsIGRpZmZlcmVuY2VzLgpAQCAtMTI3Niw2MyArNDU3LDc3IEBAIEpTVmFsdWUg
SlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkg
b2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2Ug
ZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFs
d2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxl
bmd0aCkgewotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGggKyAxOwotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeSgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlh
bEFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAg
ICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9w
ZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdl
LT5tX2xlbmd0aCA9PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAg
ICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0g
ICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5
IGxlbmd0aCIpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIEZhc3QgY2Fz
ZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgp
OworICAgICAgICBpZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgdmFsdWUpOworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEp
OworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEg
c3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBp
ZiAoVU5MSUtFTFkoc3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAg
ICAgICBtZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0
aCgpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3Rl
cCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KIAotICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUs
IHRydWUpOwotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUg
c2FtZSBhcyBwdXRJbmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9y
YWdlKTsKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwg
dW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgCi0gICAg
dW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5IGNv
bnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAv
LyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChv
bGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUo
KSkKKyAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwg
aW5TcGFyc2VJbmRleGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KCFvbGRMZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291
bnQ7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAg
ICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5n
dGgsICh1bnNpZ25lZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3Vu
dCA9IG1pbih2ZWN0b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAg
ICBtX3ZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50
OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3
QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jh
c2VTdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3Jh
Z2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7
Ci0KLSAgICAgICAgICAgIG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBpZiAodmVjdG9y
TGVuZ3RoKSB7CisgICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChz
dHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTM0MSw1OSArNTM2LDMw
IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgdW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAg
IAogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBj
b3VudCkKIHsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29u
dGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8v
IHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxl
bmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQor
ICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdl
LT5pblNwYXJzZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW5k
ZXhCaWFzID49IGNvdW50KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAgICAg
ICBjaGFyKiBuZXdCYXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2Up
IC0gY291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVtbW92
ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBtX3N0
b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFn
ZSk7Ci0gICAgICAgIG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdlLT5t
X2luZGV4QmlhcyA+PSBjb3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzIC09IGNvdW50OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xv
d0Nhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFy
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJl
RmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0
aG91dFNldHRpbmdGbGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09i
amVjdC0+bV9zdG9yYWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0
aGlzT2JqZWN0LT5sZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3Jh
Z2UtPm1fYWxsb2NCYXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+
bV92ZWN0b3JMZW5ndGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVj
dG9yLT5zbG90KCksIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAo
YmFzZVN0b3JhZ2UgIT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJy
YXlTdG9yYWdlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1Zh
bHVlKSAqIHRoaXNPYmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJz
ZVZhbHVlTWFwKQotICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0
YXRpYyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lk
KiBiKQogewogICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+
YXNOdW1iZXIoKTsKQEAgLTE0MTAsMTEyICs1NzYsMTM3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5
U3RyaW5nUGFpckZvclFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29u
c3QgQ2FsbERhdGEmIGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwot
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCghaW5T
cGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlm
IChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKQorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBib29sIGFsbFZh
bHVlc0FyZU51bWJlcnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTs7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0
KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6ZSA9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ld
LmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAgIHJl
dHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3Qs
IHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBkb24n
dCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZp
c2libGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2Yg
ZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3Is
IHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFT
b3J0KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29u
c2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICgh
YWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFy
aXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQot
ICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRo
ZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0
aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5t
X3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1i
ZXJzRm9yUVNvcnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVj
ayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNT
RVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlm
IChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3Jp
cHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1
cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRl
cmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhv
dWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVz
LCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3Vz
dG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3
aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9u
IGluY29uc2lzdGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVhcDo6
aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUu
aXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAg
ICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYg
dmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2
ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBp
KyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJp
bmdJbmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3Ry
aW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQu
IFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAg
ICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0
KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVu
c2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0Lgor
ICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcg
aXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBv
cmFyeQorICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBj
cmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0
IHJldHVybgorICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMs
IGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAg
ICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29y
dFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0
aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhO
b3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5p
c1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAg
ICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcg
b24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNh
bGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2
YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMp
OworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNp
bmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRv
IHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8g
dGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAo
aXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwg
dmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1Bh
aXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCks
IHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQ
YWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAg
ICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1
ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vs
c2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRv
IG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNw
ZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEg
c3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAg
ICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5v
dCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBz
cGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBh
IHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBs
ZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRo
ZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgot
ICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAg
ICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVu
Z3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
Tm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpo
ZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0Nv
bnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9y
IHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRs
ZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAg
ICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgo
KSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNl
dExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZh
bHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BU
ZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KIH0KIAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTcs
MjUzICs3ODgsMjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAK
IAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVu
Y3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0g
ICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21w
YXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBk
ZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8g
Z29vZAotICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9z
dG9yYWdlLT5tX2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFn
ZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1
c2VkVmVjdG9yTGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5z
aXplKCkgOiAwKTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8g
RGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCku
bV9leGVjID0gZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9
IGNvbXBhcmVGdW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlw
ZSA9IGNhbGxUeXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0g
JmNhbGxEYXRhOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQp
OwotCi0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJh
Y3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFi
c3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5
OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJl
IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxk
IGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUg
YnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwot
ICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhl
IGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMs
IGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsg
bnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBK
U1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAg
ICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAg
ICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVl
IHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAg
ICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVm
aW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUu
aW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4g
dG9OdW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlz
IGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisg
ICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0
b3JhZ2UtPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5t
X3NwYXJzZU1hcCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRy
ZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFi
c3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2Nv
bXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rv
cigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hl
ZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJy
YXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyBy
aWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJl
LgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92
ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVk
IG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAg
ICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdl
dCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVm
aW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlm
ICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAg
dHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVm
aW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAg
ICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFy
Z2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsK
LSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxl
bmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
KyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAg
ICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0
ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAg
ICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNl
ZFZlY3Rvckxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3Ig
KFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Cisg
ICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAg
KytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
c1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAg
ICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmlu
ZWQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5z
aXplKCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhl
IGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZv
bGxvd2luZyBtaWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJl
Y3RseS4KKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9z
dG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJl
LCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVl
KTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJl
ZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVy
OwogICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAK
KyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6
ZXJvZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3Ro
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBu
dW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFu
Z2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAg
Ly8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2
YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9y
Rm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVy
X2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7
Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5z
aWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAg
ICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1
cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAg
bV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQot
ICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpT
QXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3Ro
KTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAg
aWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkp
OworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBB
cnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVj
dG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1p
bihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1
bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAg
ICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBl
bmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3Rv
cmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFn
ZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0K
IAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0g
dGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVk
IGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5t
X3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxl
bmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOwor
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3Rv
cmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0K
IAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0g
ICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92
ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAg
ICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAw
OwotCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmlu
ZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0u
Z2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICB9CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5Ogor
ICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5p
c1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVt
VW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBz
dG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8
fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51
bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7
Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJy
YXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAg
ICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAo
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAg
aWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2Nh
dGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5l
d1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5
Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQot
ICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVj
aykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51
bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0
b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVu
Z3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNr
KQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFz
aCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVz
SW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0
Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRW
ZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAg
ICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdl
dCgpKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOwor
ICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5n
dGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8g
YWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0g
aWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVy
LgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdV
c2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAg
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25T
cGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNl
SW5kZXhNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAg
ICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwor
ICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5j
eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAg
ICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsK
LQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VW
YWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2Ut
Pm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7
Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0
b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3Bh
cnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0
IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQog
Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAv
KgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtMjEsMTQyICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUg
SlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEpTQXJyYXk7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZW51bSBQ
dXREaXJlY3RJbmRleE1vZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1dERpcmVj
dEluZGV4U2hvdWxkTm90VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsKLQotICAg
IHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7
Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAg
U3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUg
Z2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVy
dHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNv
bnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZh
bHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVu
dHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAg
ICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAg
IExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAg
ICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJl
c3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAg
ICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHko
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9
IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdz
ID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMg
b2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWdu
ZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChF
eGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9k
ZSk7Ci0gICAgICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAg
aXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAg
ICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUg
cmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsg
bV9tYXAucmVtb3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1f
bWFwLnJlbW92ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0
ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7
IHJldHVybiBtX21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93
IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgTWFwIG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3Qg
bV9yZXBvcnRlZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0
aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2lu
dHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50
aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0
cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRo
b2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVm
b3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hp
ZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2
YWlsYWJsZSBieSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMg
KiBzaXplb2YoSlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5z
aWduZWQgbV9sZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAg
ICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxv
Y0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAg
S2VlcGluZyB0aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20g
dGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAg
Ly8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAg
ICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1f
aW5Db21wYWN0SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRk
aW5nOwotI2VuZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsK
LQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7
IH0KLSAgICB9OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAg
ICAgICAgICAsIG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDAp
CisgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpT
Tm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAg
IHsKICAgICAgICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6
ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVi
bGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBz
dGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgg
PSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZh
c3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5LDI2ICs1Nywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVj
dDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWlu
IGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVk
LgotICAgICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9u
bHkgcHJvcGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFz
IHRoZSBtb2RlICh0aGUgZGVmYXVsdCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMg
YSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZp
Z3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dERp
cmVjdEluZGV4TW9kZSBtb2RlID0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAg
ICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgbW9kZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAg
ICAgICAgIC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJl
IGEgUmVnRXhwTWF0Y2hBcnJheS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwg
dW5zaWduZWQsIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIwMiwxNDIgKzc1
LDg2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBp
KSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsg
fQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9y
YWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0
SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAg
IHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3Rv
cmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAg
ICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0
b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9
IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxp
emVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAg
ICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5n
IHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3Rv
cmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgs
Ci0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0
aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFn
ZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgot
ICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdM
ZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0
aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xl
bmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGlu
aXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0
aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAg
ICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAg
ICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQog
ICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVy
Jik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSos
IHVpbnQzMl90IGxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0
aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgc2l6ZV90IHN0
b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhX
cml0YWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAh
bWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0gICAgICAg
IHZvaWQgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAgICBib29sIGRl
ZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWxsb2NhdGVTcGFy
c2VNYXAoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwogCi0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0RGlyZWN0
SW5kZXhNb2RlKTsKLQotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAg
ICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9Owog
Ci0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNo
ZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsK
LSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9y
bWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7
IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRl
eEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5
U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8g
RklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBv
d24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFw
OworICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9i
YWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVu
Z3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmNsZWFyKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lm
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRp
b25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSAwOworI2VuZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQogCi0gICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJh
eSwgbV9pbmRleEJpYXMpOyB9Ci0gICAgfTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0
dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJy
YXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+
KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJm
bHkpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAg
IHJldHVybiBhcnJheTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRh
LmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBh
cnJheS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxM
ZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZF
Q1RPUl9MRU4sIGluaXRpYWxMZW5ndGgpOworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAK
KyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCAwKTsKKyAgICAgICAgKmJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5n
SGVhZGVyRm9yQXJyYXkoaW5pdGlhbExlbmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
c3RvcmFnZS0+bV9pbmRleEJpYXMgPSAwOworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5j
bGVhcigpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExl
bmd0aDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2lu
aXRpYWxpemF0aW9uSW5kZXggPSAwOworICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXAp
KSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJy
YXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAg
ICAgfQogCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsKQEAgLTM1NiwzMCArMTczLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2Vs
bCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAg
IGlubGluZSBib29sIGlzSlNBcnJheShKU1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYg
aXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VT
aXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxp
bWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9u
IGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFs
dWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBt
YXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1h
Y2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lO
REVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpT
QXJyYXk6OnN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAg
Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRo
YXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQot
ICAgICAgICAvLyAtIGFzIGFzc2VydGVkIGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlv
biBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0
b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRv
IGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQg
bm90IGJlIHBvc3NpYmxlLCBwcm92aWRlZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZF
Q1RPUl9MRU5HVEggaXMgY29ycmVjdGx5IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXpl
IC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNp
emUgPj0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlT
dHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24g
MTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0g
ICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdz
LmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFw
cGVuZChleGVjLT5hcmd1bWVudChpKSk7CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsg
KytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAg
ICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAg
YXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkBAIC0xMTIsOCArMTEyLDggQEAgdm9p
ZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKEV4ZQogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKIAotICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93
VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nl
c3Nvcik7Ci0gICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0
ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBw
dXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBn
bG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
IH0KIAogdm9pZCBKU0JvdW5kRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lk
IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogU3RyaW5nIEpTQ2VsbDo6Y2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjc5MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQyLDcgKzE0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gJm1fc3RydWN0dXJlOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCiAgICAgICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUo
KSB7IHJldHVybiBtX3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2
MCw2ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50
YXRpb25zIG9mIG92ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBw
dXQgaW4gdGhlaXIgTWV0aG9kVGFibGUKICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZh
bHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7
CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGlj
IFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wg
aGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3Rv
dHlwZVByb3BlcnR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBA
IGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgaWYgKHRo
aXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAg
ICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJv
ckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwor
ICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
CiAgICAgICAgICAgICB9CkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZQogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxl
KCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
dXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI4
NCw3ICsyODQsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAg
ICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsK
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRE
aXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAt
MzAzLDcgKzMwMyw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8K
ICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkg
ewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAg
ICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0
QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0
ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9u
dEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBA
IC0zMTYsNyArMzE2LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
bwogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0
aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOCw3
ICszMjgsNyBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAg
ICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5j
dGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0zOTYs
MTQgKzM5NiwxNCBAQCBib29sIEpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqCiAg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkp
IHsKICAgICAgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAg
dGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4
ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1
cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNr
ID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1
ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhl
YywgdGhpc09iamVjdCkpOwogICAgIH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0
YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKSkKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
PnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0g
fCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNz
b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dU
eXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vz
c29yKTsKICAgICAgICAgICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAg
ICB9CiAgICAgICAgIHZhbHVlQ2hlY2sgPSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1
ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZl
Q2FsbGVyRnJvbVZNQ29kZShleGVjLCB0aGlzT2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Niw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURv
bnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NiArNTUsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2Fj
aGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgi
CiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
QEAgLTIxMyw2ICsyMTQsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwCiAgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBTaGFyZWRTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHN0cnVjdHVyZUNoYWluU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0
dXJlQ2hhaW46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzcGFy
c2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLnNldCgqdGhpcywgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAgd3RmVGhyZWFkRGF0
YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJs
ZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZTsKKyAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZTsKIAogICAgICAgICBJ
ZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmll
cnMqIHByb3BlcnR5TmFtZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3Rv
CiAgICAgR2V0dGVyU2V0dGVyKiBwcm90b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUo
ZXhlYyk7CiAgICAgcHJvdG9BY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJv
dG9HZXR0ZXIpKTsKICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1
bmNQcm90b1NldHRlcikpOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJv
dG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOworICAgIG1fb2JqZWN0UHJv
dG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5k
ZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBt
X2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAg
ICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU05h
bWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNOdWxs
KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDggKzUyMSw4IEBAIGJvb2wgU3Ry
aW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICBpZiAobV9pc0FycmF5KSB7CiAg
ICAgICAgIC8vIEdldCB0aGUgdmFsdWUuCiAgICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAg
IGlmIChtX2lzSlNBcnJheSAmJiBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXgo
aW5kZXgpKQotICAgICAgICAgICAgdmFsdWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0
SW5kZXgoaW5kZXgpOworICAgICAgICBpZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVj
dC5nZXQoKSktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICB2YWx1ZSA9
IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG1fb2JqZWN0LmdldCgpKTsK
ICAgICAgICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0KCksIGV4ZWMsIGluZGV4LCBzbG90KSkKQEAgLTY4Nyw4
ICs2ODcsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAg
ICAgICAgICAgICAgICAgIGluZGV4U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzSlNB
cnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgICAg
ICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgICAgICAgICAgICAg
aWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkp
CisgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGlu
ZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVy
dHlTbG90IHNsb3Q7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheS0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChhcnJheSwgbV9leGVjLCBpbmRleCwgc2xvdCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIw
MDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAo
QykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0y
NCwxMCArMjQsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5j
bHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxUaGlz
LmgiCkBAIC0zOCwxMiArNDAsMTkgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIK
KyNpbmNsdWRlICJSZWplY3QuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAorLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRl
ciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcworLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZv
ciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRo
aXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZp
bmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwq
IGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5ICs5NSw4MSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlz
aXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNT
RVJUKHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CisgICAgQVNTRVJUKGJ1dHRl
cmZseSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUo
KTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0
ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQ
cm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0g
ICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3Rv
cmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFz
ZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0
ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3Vy
cmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3Qg
cHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAg
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikp
IHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnBy
ZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3Qg
Y2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3Ro
ZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24o
dmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJr
IGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVu
dFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVT
dG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXpl
IC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0lu
ZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7
CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5n
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6
ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4K
KyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQg
SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKQEAgLTEyMiw5ICsxODMsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxp
bmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9i
amVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKQEAgLTE0Miw5ICsyMDMsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRP
ZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHks
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVj
dCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEw
ICsyMjIsNTAgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogICAg
IHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3Jl
IGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQg
aXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0
eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkK
KyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsK
KyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkg
Pj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQo
KSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAt
PmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAg
ICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNN
QSA4LjYuMi4yCkBAIC0xNzQsNiArMjc1LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVh
cCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7
CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAg
IAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
IHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5p
c1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBp
ZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWlu
CiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzQzLDE0NSBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAg
CisgICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFtZV07CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8g
VXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAg
ICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgeworICAgICAgICAgICAgbGVuZ3RoID0gcHJv
cGVydHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwor
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVs
c2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRo
aXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKKworICAgIGlmICghbWFwKQor
ICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gc3RvcmFnZTsKKworICAgIG1h
cC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0
ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8v
IFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0
byBjaGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZh
dWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAg
ICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBt
YXApOworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworfQor
Cit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5B
cnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgb2xkVHlwZSA9
PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwK
KyAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIGlmICgh
bmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFycmF5U3RvcmFnZSogcmVzdWx0
ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChs
ZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAg
cmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IDA7CisgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICByZXN1bHQtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAg
cmVzdWx0LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjcmVhdGVB
cnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1
cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlz
dHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIGNyZWF0ZUFycmF5
U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5z
ZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMjY5LDEwICs1
MTMsMTggQEAgYm9vbCBKU09iamVjdDo6YWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdAogICAgIHJl
dHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmFsbG93c0FjY2Vz
c0Zyb20oZ2xvYmFsT2JqZWN0LCBleGVjKTsKIH0KIAotdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0
QWNjZXNzb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCh2
YWx1ZS5pc0dldHRlclNldHRlcigpICYmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKIAorICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4LCB2YWx1ZSwgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAg
IHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3Qo
dmFsdWUpKTsKIApAQCAtMzA0LDYgKzU1NiwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAg
IHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAg
IGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlz
T2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCAr
NTg4LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHBy
b3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAg
ICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNo
ICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYg
KHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAg
ICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRl
cmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RG
b3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERv
bnREZWxldGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBtYXAtPnJlbW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCkBAIC00NjUsNiArNzU2LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0
aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisg
ICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVy
IGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3Ig
bGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNo
IGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0
eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1f
dmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNh
cGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51
bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQ
cm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1v
ZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVj
dHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzg1MSw3IEBAIHZvaWQgSlNPYmpl
Y3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4
dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXko
dGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFs
RGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAg
IGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0
cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpKSk7CiB9CkBAIC01NzMsMTEgKzkwOCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJl
Y3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lk
IEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09i
amVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNH
ZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmpl
Y3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNl
dCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnko
KSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJG
dW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Qu
c2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9u
KTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTM4LDUyNyBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0
OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9w
ZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVj
dDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5
KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVz
Y3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUp
OworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAo
ZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAo
b2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJ
bk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAg
ICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlk
aW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAg
ICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRl
clByZXNlbnQoKSkKKyAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0
KCk7CisgICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSkKKyAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Cisg
ICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0
ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVj
dCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpCisgICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwor
CisgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShl
eGVjKTsKKyAgICAgICAgaWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0
ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAg
ICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7
CisKKyAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNj
ZXNzb3IpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRy
aWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBp
biBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZG
RkZGRkYpOworCisgICAgaWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8v
IEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFy
IGFycmF5CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3Vt
ZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8g
ZmFsc2UKKyAgICAgICAgLy8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0
cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3Ry
dWUnCisgICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVz
ZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2Rl
JykuCisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCAw
LCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgIH0KKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgQVNTRVJUKG1hcCk7CisK
KyAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4K
KyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhp
cywgaW5kZXgpOworICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUg
b2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCisgICAgLy8gMy4g
SWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVq
ZWN0LgorICAgIC8vIDQuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlz
IHRydWUsIHRoZW4KKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgaWYgKCFp
c0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9y
KTsKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJs
ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRv
cihEZXNjKSBvciBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFu
IG93biBkYXRhIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2Ug
W1tWYWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJs
ZV1dIGF0dHJpYnV0ZSB2YWx1ZXMKKyAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJ
ZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUg
YXR0cmlidXRlIG9mIHRoZSBuZXdseQorICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNl
dCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3Qg
YmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nl
c3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCisgICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0
XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0
ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQorICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUg
b2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9m
IHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5CisgICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVm
YXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KKworICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKKyAgICAgICAgZW50cnlJbk1h
cC0+Z2V0KGRlZmF1bHRzKTsKKworICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBl
bnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7CisgICAgICAgIGlmIChpbmRleCA+PSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxk
IGluIERlc2MgaXMgYWJzZW50LgorICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVs
ZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxk
IGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAo
OS4xMikuCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7CisgICAgZW50cnlJbk1hcC0+
Z2V0KGN1cnJlbnQpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9y
LmVxdWFsVG8oZXhlYywgY3VycmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
Ny4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVu
CisgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgIC8vIDcuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNv
bmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2Vw
dGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUg
W1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJh
YmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9u
IG9mIGVhY2ggb3RoZXIuCisgICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50
KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7CisgICAgfQorCisgICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBp
cyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAo
IWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7CisgICAgICAgIC8vIDkuIEVsc2Us
IGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykg
aGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgorICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFE
ZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAg
ICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlLgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJy
ZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0
IE8gZnJvbSBhCisgICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHBy
b3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJv
cGVydHkncworICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxl
XV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0
ZXMgdG8KKyAgICAgICAgICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAg
Ly8gOS5jLiBFbHNlLCBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZy
b20gYW4gYWNjZXNzb3IgcHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgorICAgICAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5
J3MgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KKyAgICAgICAgICAgIC8vIGF0
dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRh
RGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAg
ICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCisgICAgICAgICAgICAvLyAxMC5h
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVu
CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3Jp
dGFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndy
aXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAg
ICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2Yg
RGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tW
YWx1ZV1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
ICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRh
YmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNl
dHRlclByZXNlbnQoKSk7CisgICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRy
dWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Us
IHRoZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBp
cyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAm
JiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAg
ICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1d
KSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50
KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDEyLiBGb3IgZWFjaCBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9u
ZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4
ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0b3IsIGN1cnJlbnQpOworICAgIC8vIDEzLiBSZXR1cm4g
dHJ1ZS4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3BhcnNlQXJyYXlWYWx1ZU1hcCogSlNPYmpl
Y3Q6OmFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNy
ZWF0ZShnbG9iYWxEYXRhKTsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUo
KSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlv
bi4KK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgaWYg
KEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCkpCisgICAg
ICAgIGFycmF5U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKK30KKwordm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRl
eCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwLmdldCgpOworICAgIAorICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2Ug
ZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkp
IHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQg
aGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4K
KyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFBy
b3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSAwOworICAgICAgICAvLyBVcGRhdGUg
bV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8g
Q2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5k
IHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8g
c3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFs
bG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVy
dHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAg
PSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1h
cC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8g
c2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNl
IHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3Jh
Z2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0ZW1wKSkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3Jh
Z2U+KHRlbXApICsgbmV3U2l6ZSArIDE7CisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vz
c2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAo
aSA+PSBsZW5ndGgpIHsKKyAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYg
bGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KKyAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpIHx8ICFpc0V4dGVuc2libGUoKSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwor
ICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0
aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51
ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291
bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBu
dW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6
ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3Rv
cihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVj
LT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpIHsKKyAgICAgICAgbWFwLT5wdXRFbnRyeShleGVjLCB0
aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRl
IG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OworCisgICAg
Ly8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxl
dGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2Ut
Pm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0b3JbaXQt
PmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2Rl
KCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3RvcmUgdGhl
IG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGdsb2JhbERh
dGEsIHRoaXMsIHZhbHVlKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAg
aWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRo
cm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7
CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBhcnJh
eVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1
dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBz
aG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJl
bnQgdmVjdG9yLgorICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIHx8IGF0
dHJpYnV0ZXMpOworICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisKKyAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKKworICAg
IC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBz
cGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFy
cmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkg
bW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5z
aWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdl
LT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2li
bGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2
ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoCisgICAgICAgICAgICAgICAgIWF0dHJpYnV0ZXMK
KyAgICAgICAgICAgICAgICAmJiAoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yKSkKKyAgICAgICAgICAgICAgICAmJiBpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7CisgICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJl
cmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQg
c3RvcmUgdG8gdGhlIHZlY3Rvci4KKyAgICAgICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxs
b2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2Nh
dGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm4gbWFw
LT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOworICAg
IH0KKworICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAg
ICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkgeworICAgICAgICAg
ICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJs
ZS4KKyAgICAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIGlm
ICghaXNFeHRlbnNpYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBt
b2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBw
cm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAgfQor
ICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNr
IHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNv
bnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3Rv
ciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2ln
bmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFw
LT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8IGF0dHJpYnV0ZXMgfHwgIWlz
RGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVh
c2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKQorICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUp
OworCisgICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlciBpbmNyZWFzZVZlY3Rvckxlbmd0aCwg
dXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCisgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgp
OworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5Owor
CisgICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFu
ZCBkZWxldGUgdGhlIG1hcC4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0
b3JhZ2UtPm1fdmVjdG9yOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2ZWN0
b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFy
c2VNb2RlKCkpOworICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOworCisgICAgLy8gU3Rv
cmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07CisgICAgaWYgKCF2YWx1ZVNsb3QpCisgICAg
ICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICB2YWx1ZVNsb3Quc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJ
bmRleE1vZGUgbW9kZSkKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheTogeworICAgICAgICBp
ZiAoaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpIHx8IGF0dHJpYnV0ZXMpCisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNB
bmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICBpZiAo
IWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgMCkgfHwgaSA+PSBNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY3Jl
YXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgCisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsg
MSwgZ2V0TmV3VmVjdG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVu
Z3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJy
YXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJl
bnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRM
ZW5ndGgpCit7CisgICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7CisKKyAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7CisgICAgdW5zaWduZWQg
bWF4SW5pdExlbmd0aCA9IHN0ZDo6bWluKGN1cnJlbnRMZW5ndGgsIDEwMDAwMFUpOworCisgICAg
aWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3RoKQorICAgICAgICBpbmNyZWFzZWRMZW5n
dGggPSBtYXhJbml0TGVuZ3RoOworICAgIGVsc2UgaWYgKCFjdXJyZW50VmVjdG9yTGVuZ3RoKQor
ICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBzdGQ6Om1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJy
YXlTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVu
dCB0bzoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEp
IC8gMjsKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVu
c2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7CisgICAgICAgIC8vIFRoaXMgZm9ybSBpcyBu
b3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9
IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYg
MSk7CisgICAgfQorCisgICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3Ro
KTsKKworICAgIGxhc3RBcnJheVNpemUgPSBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIEZJUlNU
X1ZFQ1RPUl9HUk9XKTsKKworICAgIHJldHVybiBzdGQ6Om1pbihpbmNyZWFzZWRMZW5ndGgsIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOworfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpT
T2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIAotICAg
IG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9s
ZFNpemUpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICB2ZWN0b3JMZW5ndGggPSAw
OworICAgICAgICBsZW5ndGggPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVu
Z3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0
aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJu
YWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFs
dWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMg
aGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZm
aWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOwogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0
dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdl
LT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsK
KworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBj
YXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkg
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgp
LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIGlm
ICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhl
IHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJh
eSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhCaWFz
ID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFy
cmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisg
ICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rv
ckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQordm9p
ZCBKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
IHR5cGUpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJv
KCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIXN0
b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2Up
OworICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQo
IXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9y
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAg
ICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0
aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lz
dGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5W
ZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZh
bHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZh
bHVlTWFwKSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChp
dC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrKQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlz
VW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9j
YXRlZC4KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhh
dCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5
CisgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRo
ZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93
UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXpl
KTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDY2LDQ2IEBAIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0
KQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAg
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1
ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAg
ICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02NTgsNyArMTUzMCw3IEBAIHN0YXRp
YyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgICAgICBhY2Nl
c3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5nZXR0ZXJP
YmplY3QoKSk7CiAgICAgICAgICAgICBpZiAob2xkRGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkp
CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCks
IG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwotICAgICAgICAgICAgdGFyZ2V0LT5wdXRE
aXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYWNjZXNzb3Is
IGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nv
cik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVl
IG5ld1ZhbHVlID0ganNVbmRlZmluZWQoKTsKQEAgLTY4MywxMCArMTU1NSwxOSBAQCBzdGF0aWMg
Ym9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgZWxzZSBpZiAob2xkRGVzY3Jp
cHRvci5zZXR0ZXJQcmVzZW50KCkpCiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKIAotICAgIHRhcmdl
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGFj
Y2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOworICAgIHRhcmdldC0+cHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29y
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJ
bmRleChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgdW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CisgICAgaWYgKGFzSW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBl
bHNlCisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGFzSW5kZXgsIHZhbHVlKTsKK30KKwog
Y2xhc3MgRGVmaW5lT3duUHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAgICAgRGVmaW5lT3duUHJv
cGVydHlTY29wZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC03MDQsMjYgKzE1ODUsMjYgQEAgcHJpdmF0
ZToKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBU
cmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAg
ICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHBy
b3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFy
bHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cg
bm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8g
YmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdv
cmsuCiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAg
IC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1h
bGx5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAg
ICAgIC8vIHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2Jq
ZWN0LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAg
ICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRv
IGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVz
Y3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpz
VW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERl
c2NyaXB0b3IpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlw
dG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCAr
MTYzMCw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAv
LyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMg
b2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNj
cmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlw
dG9yKSkgewotICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVz
Y3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAg
ICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTc2Miw4ICsxNjQzLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplYwogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hh
bmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIikpKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsK
KyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVu
dChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVl
IGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTY2NSw4
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQog
ICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2Ny
aXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1
cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
dGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3Io
ZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0
ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8g
Q2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBw
cm9wZXJ0eQpAQCAtODAyLDcgKzE2ODMsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dl
dHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2OTMsMzcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAg
IGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHko
dGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNl
dHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJv
cGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJ
ZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9y
YWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExl
dCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5l
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERl
c2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNj
ZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAg
ICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAg
IC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBm
YWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAg
ICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93
bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24p
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQor
Citib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpcywgZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVj
dCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1l
c3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAjZGVmaW5lIEpTT2JqZWN0
X2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgi
CisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5j
bHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0
eVNsb3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJQdXREaXJl
Y3RJbmRleE1vZGUuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKIAotI2luY2x1ZGUg
IlN0b3JhZ2VCYXJyaWVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJh
eVZhbHVlTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTc5LDYgKzg0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBY2Nlc3Nv
ciAgICAgPSAxIDw8IDUsICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKICAgICB9Owog
CisgICAgQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVf
aXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoUmVh
ZE9ubHkgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBSZWFkT25seV9pc19iZWxvd19GaXJzdElu
dGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RW51bSA8IEZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUsIERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUp
OworICAgIENPTVBJTEVfQVNTRVJUKERvbnREZWxldGUgPCBGaXJzdEludGVybmFsQXR0cmlidXRl
LCBEb250RGVsZXRlX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJ
TEVfQVNTRVJUKEZ1bmN0aW9uIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRnVuY3Rpb25faXNf
YmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoQWNjZXNz
b3IgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19GaXJzdEludGVy
bmFsQXR0cmlidXRlKTsKKwogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CiAKICAgICBjbGFzcyBK
U09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewpAQCAtOTYsNyArMTA4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0KKyAgICAg
ICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtMTIwLDE4ICsxMzIsMTk2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVj
U3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUg
cHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlz
IG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgor
ICAgICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkg
cHJvcGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRo
ZSBtb2RlICh0aGUgZGVmYXVsdCkuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBw
cm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3Vy
YWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkp
IHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgUHV0RGly
ZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEgbm9uLXRo
cm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4KKyAgICAgICAg
dm9pZCBwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlj
a2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
KCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
LmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNhblNldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
LCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkgKyAxKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6
aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIEFTU0VSVChp
ID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAgICAgICAgICAgICAgLy8g
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5p
dGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGlu
aXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA8IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdl
LT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3RoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAvLyBD
aGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9wZXJ0aWVzIGFzIHdlIHRo
aW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOworICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gc3RvcmFn
ZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0
Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+
bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpblNw
YXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAg
ICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAg
ICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdk
ZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMg
bm90IGNvbnN1bHRlZAogICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCiAg
ICAgICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQgKGFmdGVyIHRoZSBjYWxs
IHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0dHJpYnV0ZXMpCisgICAg
ICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4
LgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFs
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3QoSlNHbG9iYWxEYXRhJiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7CiAgICAgICAgIHZvaWQg
cHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7
Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgdm9pZCBwdXREaXJl
Y3RBY2Nlc3NvcihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpOwogCiAgICAgICAgIGJvb2wgcHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsKIApAQCAtMTQ3LDYgKzMz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUg
cHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgICAgICBK
U1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBO
b1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM5NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBj
b25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KLSAgICAgICAgUHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2Uu
Z2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJl
dHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFn
ZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkg
eyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICAgICAgY29u
c3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyArNDIxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVTdG9yYWdlIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVT
dG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKTsKICAgICAg
ICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlw
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTI2NSwyMSAr
NDU5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzU2VhbGVkKGdsb2JhbERh
dGEpOyB9CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKSB7
IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7IH0KICAgICAgICAgYm9v
bCBpc0V4dGVuc2libGUoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNFeHRlbnNpYmxlKCk7IH0K
KyAgICAgICAgYm9vbCBpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICFpc0V4dGVuc2libGUoKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8oKTsKKyAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNGdW5jdGlvbnNSZWlm
aWVkKCk7IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShFeGVj
U3RhdGUqIGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5U3RvcmFn
ZSBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6
ZV90IG5ld1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgUHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lkIHNldEJ1dHRlcmZseShK
U0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgdm9pZCBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5Kik7IC8vIFlvdSBwcm9i
YWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0
U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAgIHZvaWQgc2V0U3RydWN0
dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3JhZ2U7Ci0gICAgICAgIH0K
LQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJlKCktPmZsYXR0ZW5EaWN0
aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkzLDcgKzQ4OCwxNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRP
Zk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
YnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU09iamVjdCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlRE
QVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMxNiwxNCArNTIwLDc4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRvIGluc3RhbnRpYXRlIG9iamVjdHMgeW91IGxpa2Vs
eSB3YW50IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAgICAgICAvLyBUbyBjcmVhdGUgZGVyaXZl
ZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cuCi0gICAgICAg
IEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBKU09iamVjdChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5t
X2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgdm9pZCB2aXNp
dE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0b3JhZ2UsIHNpemVfdCBz
dG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBC
dXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAgIC8vIENhbGwgdGhpcyBp
ZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJh
eQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJyYXlTdG9yYWdlKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUg
c29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAgICAvLyBvYmplY3QgaXMg
aW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAgICAgICBBcnJheVN0b3Jh
Z2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVz
ZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJmb3JtIGFjdGlvbnMgdGhh
dCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmplY3QgdG8gYmUgY29udmVy
dGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhhdmUgaXQKKyAgICAgICAg
Ly8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxBcnJheVN0b3Jh
Z2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJh
eVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogY3JlYXRl
SW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIEFy
cmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisKKyAgICAgICAgZW51bSBDb25zaXN0ZW5j
eUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0b3JDb25zaXN0ZW5j
eUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lmICFDSEVDS19BUlJBWV9DT05TSVNU
RU5DWQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNo
ZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vsc2UKKyAgICAgICAgdm9p
ZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxD
b25zaXN0ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUlu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSop
OworCisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbmV3TGVuZ3RoKTsKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAo
KTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0
YSYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKQEAgLTMzNiwxNyArNjA0LDMzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGlzT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICAgICAgICAgCisgICAg
ICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9yYWdlKik7CisgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgICAgICBib29sIHB1dERpcmVjdEludGVy
bmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwg
UHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICAgICAgYm9vbCBpbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3Bl
cnR5U2xvdCYsIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBm
aW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAg
ICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNl
QXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xk
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVu
c2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1
bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKLSAg
ICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07
CkBAIC0zNzIsOCArNjU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmpl
Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSAr
NzQwLDYgQEAgaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0K
IAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsK
LSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2Up
OwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0
VHlwZTsKQEAgLTQ5MSwxOCArNzcwLDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2Jh
bFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09
IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5l
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJm
bHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9y
YWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFTU0VS
VCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7
Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0
ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MTgsOSBAQCBpbmxp
bmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0
KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0
OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAs
IG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NjgsMTcgQEAgaW5s
aW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAo
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0
dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9u
KTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZz
ZXQpOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclByb3Bl
cnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24p
KTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
Z2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAv
LyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3Bl
Y2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NjQsNyBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBB
U1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
KTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09
IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGlj
dGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEy
LDExICs5OTMsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAog
ICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9y
YWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0
T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVT
dG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAg
ICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdP
dXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgp
LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0
ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAg
dmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICsxMDExLDEzIEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAg
ICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAgICAg
IFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAgICAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1
cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAg
ICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVu
dENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAg
bmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENh
cGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3
U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5l
d0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERh
dGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0
cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJs
ZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4K
QEAgLTgwMyw5ICsxMDg0LDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFu
ZFJlYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBu
ZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2Fw
YWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNl
dEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAK
IGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlm
TmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUpCkBAIC04MzksMTEgKzExMjAsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQcm9w
ZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsK
KyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwotICAg
IHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkp
OworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgp
KTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAK
QEAgLTkzNSw2ICsxMjE2LDExIEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVnaXN0ZXI6Ondp
dGhDYWwKICAgICByZXR1cm4gcjsKIH0KIAoraW5saW5lIHNpemVfdCBvZmZzZXRJbkJ1dHRlcmZs
eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7Cit9
CisKIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHBhdGNoaW5nIGNvZGUgd2hlcmUgeW91IHdhbnQg
dG8gZW1pdCBhIGxvYWQgb3Igc3RvcmUgYW5kCiAvLyB0aGUgYmFzZSBpczoKIC8vIEZvciBpbmxp
bmUgb2Zmc2V0czogYSBwb2ludGVyIHRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdlIHBvaW50ZXIu
CkBAIC05NDIsMTQgKzEyMjgsMTQgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6
d2l0aENhbAogaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UoUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQp
KQotICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShvZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAg
IHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0
KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldElu
SW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jh
c2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChv
ZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7
CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRl
cmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzEy
NDMsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUg
aW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBp
ZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1
cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9y
YWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3
LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAogICAgIGlmIChv
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCiAg
ICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgIAorICAgIGlmIChoYXNJ
bmRleGluZ0hlYWRlcihvLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICAKICAgICBzaXplX3QgY291bnQgPSBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBvKTsKICAgICBTdHJ1Y3R1cmVDaGFpbiogc3Ry
dWN0dXJlQ2hhaW4gPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNoYWluLT5oZWFk
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQog
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkK
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0
LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlID0g
MSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3JkID0g
MSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgUHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3MgVHlwZUluZm8gewogICAgIHB1
YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgb3Zl
cnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRl
c0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgY29u
c3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QpOyB9
CisgICAgICAgIGJvb2wgaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyk7IH0KICAg
ICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVuKTsgfQotICAgICAgICBib29sIG92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyk7IH0KIAogICAg
ICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zmc2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAtNjQw
LDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIERvUGFyc2VPYmplY3RFbmRFeHByZXNzaW9u
OgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzT2JqZWN0KG9iamVjdFN0YWNrLmxh
c3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllclN0YWNrLmxh
c3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUg
aWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKGkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdElu
ZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVu
dCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2sucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgPT0g
VG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0RXhw
cmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBAIEFTU0VSVF9D
TEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0UHJvdG90eXAKIAogT2JqZWN0UHJvdG90eXBlOjpPYmpl
Y3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0dWN0dXJlKQogICAgIDog
SlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0dWN0dXJlKQotICAgICwgbV9o
YXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXModHJ1ZSkKIHsKIH0KIApAQCAtNzcsMzQgKzc2
LDYgQEAgdm9pZCBPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEpTRwogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKLXZvaWQgT2JqZWN0UHJvdG90eXBlOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBPYmplY3RQcm90b3R5
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCk7Ci0gICAgQmFz
ZTo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYg
KHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3BlcnR5
TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0aGlz
T2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNlOwotfQotCi1i
b29sIE9iamVjdFByb3RvdHlwZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgT2JqZWN0UHJvdG90
eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVjdCk7Ci0gICAg
Ym9vbCByZXN1bHQgPSBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwotCi0gICAgaWYgKHRoaXNPYmplY3Qt
Pm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3BlcnR5TmFtZS5hc0luZGV4
KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2hh
c05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICAgIE9iamVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxsKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9oYXNO
b1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCiBib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7CiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1
bmN0aW9uU2xvdDxKU05vbkZpbmFsT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdFByb3Rv
dHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5
TmFtZSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE0ICs1
MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgT2JqZWN0UHJv
dG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwotCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KLSAgICAgICAgYm9vbCBtX2hhc05vUHJvcGVy
dGllc1dpdGhVSW50MzJOYW1lczsKICAgICB9OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlu
bGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9m
ZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAg
ICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0g
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJl
c3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3Bl
cnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHV0RGlyZWN0SW5kZXhNb2RlX2gKKyNk
ZWZpbmUgUHV0RGlyZWN0SW5kZXhNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gUHV0
RGlyZWN0SW5kZXhNb2RlIHsgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0LCBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93LCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IH07CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHV0RGlyZWN0SW5kZXhNb2RlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMzcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIK
IAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJU
X0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBNYXRjaGVzQXJyYXkpOwogCiBjb25zdCBDbGFzc0lu
Zm8gUmVnRXhwTWF0Y2hlc0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTQXJyYXk6OnNfaW5m
bywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSZWdFeHBNYXRjaGVzQXJyYXkpfTsKIAorUmVn
RXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQorICAg
IDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZSgpLCBidXR0ZXJmbHkpCisgICAgLCBtX3Jlc3VsdChyZXN1bHQpCisgICAgLCBtX3N0
YXRlKFJlaWZpZWROb25lKQoreworICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlu
cHV0KTsKKyAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKK30KKwor
UmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3Vs
dCkKK3sKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVB
cnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsK
KyAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJy
YXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlu
cHV0LCByZWdFeHAsIHJlc3VsdCk7CisgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIHJldHVybiBhcnJheTsKK30KKwogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhLCBtX3JlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOwor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogfQogCiB2b2lkIFJlZ0V4cE1h
dGNoZXNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyOCAr
MjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBNYXRjaGVzQXJyYXkg
OiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwTWF0Y2hlc0Fy
cmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQot
ICAgICAgICAgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlKCkpCi0gICAgICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAg
ICAgICAgICAgICwgbV9zdGF0ZShSZWlmaWVkTm9uZSkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaW5wdXQpOwotICAgICAgICAgICAgbV9yZWdF
eHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Ci0gICAgICAgIH0KKyAgICAgICAgUmVn
RXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2JqZWN0
KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgZW51bSBSZWlm
aWVkU3RhdGUgeyBSZWlmaWVkTm9uZSwgUmVpZmllZE1hdGNoLCBSZWlmaWVkQWxsIH07CiAKICAg
ICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAgIHN0YXRp
YyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBp
bnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJy
YXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5
PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwotICAgICAgICAg
ICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKIAogICAg
ICAgICBKU1N0cmluZyogbGVmdENvbnRleHQoRXhlY1N0YXRlKik7CiAgICAgICAgIEpTU3RyaW5n
KiByaWdodENvbnRleHQoRXhlY1N0YXRlKik7CkBAIC01OCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTExMywxMSArMTE1LDEx
IEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4g
QmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9p
ZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVjdF9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIGJvb2wgcmVq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVz
c2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNs
dWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIFNwYXJzZUFycmF5VmFsdWVNYXA6OnNfaW5mbyA9IHsgIlNw
YXJzZUFycmF5VmFsdWVNYXAiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNwYXJzZUFy
cmF5VmFsdWVNYXApIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFs
dWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIKKyNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJs
aWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtu
b3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQor
CisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBjb25zdDsKKyAgICB2b2lk
IGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0eURlc2NyaXB0
b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKKworICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIDog
cHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5
LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAgICBOb3JtYWwg
PSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNSZWFkT25seSA9
IDIsCisgICAgfTsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKTsKKyAgICB+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpOworICAgIAorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKTsKKworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0Nl
bGw6OlN0cnVjdHVyZUZsYWdzOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3Ig
aXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgc3RhdGljIFNw
YXJzZUFycmF5VmFsdWVNYXAqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpOworICAg
IAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ZsYWdzICYgU3BhcnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNw
YXJzZU1vZGUoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPiht
X2ZsYWdzIHwgU3BhcnNlTW9kZSk7CisgICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9m
bGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7Cisg
ICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0
aGUgbWFwCisgICAgdm9pZCBwdXRFbnRyeShFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVk
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
dXREaXJlY3RJbmRleE1vZGUpOworICAgIEFkZFJlc3VsdCBhZGQoSlNPYmplY3QqLCB1bnNpZ25l
ZCk7CisgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkp
OyB9CisgICAgLy8gVGhpcyBzaG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNr
IHRoZSByZXN1bHQgb2YgdGhlIGZpbmQpLgorICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7
IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFw
LnJlbW92ZShpKTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgbWFwLgorICAgIGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9t
YXAuZW5kKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmNvbnRhaW5zKGkpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
cC5zaXplKCk7IH0KKyAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24u
CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigp
OyB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7
IH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7CisgICAgRmxhZ3MgbV9mbGFnczsKKyAgICBz
aXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVm
aW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIlNwYXJz
ZUFycmF5VmFsdWVNYXAuaCIKKworI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUg
IlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVN
YXA6OlNwYXJzZUFycmF5VmFsdWVNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDog
QmFzZShnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgLCBtX2ZsYWdzKE5vcm1hbCkKKyAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgw
KQoreworfQorCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6flNwYXJzZUFycmF5VmFsdWVN
YXAoKQoreworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsRGF0YSk7Cit9CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwKiBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNw
YXJzZUFycmF5VmFsdWVNYXA+KGdsb2JhbERhdGEuaGVhcCkpIFNwYXJzZUFycmF5VmFsdWVNYXAo
Z2xvYmFsRGF0YSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTcGFyc2VBcnJheVZhbHVl
TWFwKj4oY2VsbCktPlNwYXJzZUFycmF5VmFsdWVNYXA6On5TcGFyc2VBcnJheVZhbHVlTWFwKCk7
Cit9CisKK2lubGluZSBTdHJ1Y3R1cmUqIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU09iamVjdCogYXJyYXks
IHVuc2lnbmVkIGkpCit7CisgICAgU3BhcnNlQXJyYXlFbnRyeSBlbnRyeTsKKyAgICBlbnRyeS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworCisgICAgQWRkUmVzdWx0IHJl
c3VsdCA9IG1fbWFwLmFkZChpLCBlbnRyeSk7CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAu
Y2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7Cisg
ICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5
IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKKyAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNp
dHk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnB1dEVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEFkZFJl
c3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5
ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUg
ZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAv
LyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0
aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0
IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVz
dWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNW
YWx1ZSBhY2Nlc3NvciA9IGVudHJ5LlNwYXJzZUFycmF5RW50cnk6OkJhc2U6OmdldCgpOworICAg
IEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKKyAgICBKU09iamVjdCogc2V0dGVy
ID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKKyAgICAKKyAgICBpZiAoIXNl
dHRlcikgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwgY2Fs
bERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQo
dmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5
LCBhcmdzKTsKK30KKworaW5saW5lIGJvb2wgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RGlyZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKK3sKKyAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBpKTsKKyAgICBTcGFyc2VBcnJheUVudHJ5
JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gVG8gc2F2ZSBhIHNl
cGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAu
CisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5
LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRo
ZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCisgICAgaWYgKG1v
ZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYm
ICFhcnJheS0+aXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRv
cik7CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNo
b3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQg
aXMgbm90IGV4dGVuc2libGUuIik7CisgICAgfQorCisgICAgZW50cnkuYXR0cmlidXRlcyA9IGF0
dHJpYnV0ZXM7CisgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6
Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gQmFz
ZTo6Z2V0KCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKworICAgIGlmIChMSUtFTFkoIXZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVy
KHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRV
bmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNsb3Quc2V0R2V0dGVy
U2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAoreworICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmlidXRlcyk7Cit9CisKK2lubGluZSBKU1ZhbHVl
IFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSkg
Y29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVChy
ZXN1bHQpOworCisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0
dGVyKHJlc3VsdCktPmdldHRlcigpOworICAgIGlmICghZ2V0dGVyKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxE
YXRhKTsKKyAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
YXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJy
YXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFhdHRyaWJ1
dGVzKTsKKyAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiB0aGlzT2JqZWN0LCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiB0aGlzTWFwID0ganNDYXN0
PFNwYXJzZUFycmF5VmFsdWVNYXAqPih0aGlzT2JqZWN0KTsKKyAgICBpdGVyYXRvciBlbmQgPSB0
aGlzTWFwLT5tX21hcC5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gdGhpc01hcC0+bV9t
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQt
PnNlY29uZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJy
YXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdG9yYWdlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU3RvcmFnZUJhcnJpZXJfaAot
I2RlZmluZSBTdG9yYWdlQmFycmllcl9oCi0KLSNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLSNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5cGVkZWYgV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwotdHlwZWRlZiBjb25zdCBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKLQotY2xhc3Mg
U3RvcmFnZUJhcnJpZXIgewotcHVibGljOgotICAgIGVudW0gVW5jaGVja2VkVGFnIHsgVW5jaGVj
a2VkIH07Ci0gICAgU3RvcmFnZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0Nl
bGwqIG93bmVyLCBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHNldChn
bG9iYWxEYXRhLCBvd25lciwgc3RvcmFnZSk7Ci0gICAgfQotICAgIAotICAgIFN0b3JhZ2VCYXJy
aWVyKFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAg
ICBzZXQoc3RvcmFnZSwgVW5jaGVja2VkKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiwgSlNDZWxsKiwgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UpCi0gICAgewot
ICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dChQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAg
ICAgbV9zdG9yYWdlID0gbmV3U3RvcmFnZTsKLSAgICB9Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQot
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4oKSB7IHJldHVybiBtX3N0
b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+IG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+IG9w
ZXJhdG9yKigpIHsgcmV0dXJuICptX3N0b3JhZ2U7IH0KLSAgICBjb25zdCBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3N0b3Jh
Z2VbaV07IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiBvcGVyYXRvcltdKHNpemVf
dCBpKSB7IHJldHVybiBtX3N0b3JhZ2VbaV07IH0KLSAgICAKLSAgICBDb25zdFByb3BlcnR5U3Rv
cmFnZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBQcm9wZXJ0eVN0b3Jh
Z2UgZ2V0KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yISgpIHsg
cmV0dXJuICFtX3N0b3JhZ2U7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgUHJvcGVydHlTdG9yYWdl
IG1fc3RvcmFnZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDYgKzc4LDE3IEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGUKICAgICBKU09iamVjdDo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOwogfQogCit2b2lkIFN0cmluZ09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxTdHJpbmdPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50ZXJuYWxWYWx1
ZSgpLT5jYW5HZXRJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJv
dykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSlNPYmplY3Q6
OnB1dEJ5SW5kZXgoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OworfQorCiBib29sIFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CiAgICAgU3Ry
aW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CkBA
IC0xMzMsNiArMTQ0LDE0IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0Nl
bGwKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCit7CisgICAg
U3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KGkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSk7Cit9CisKIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3Qp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAg
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAK
QEAgLTY2LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwg
SlNTdHJpbmcqKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IEpTV3JhcHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1
cmVGbGFnczsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSopOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNh
Y2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBlSW5mbykKKyAgICAs
IG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0Pjo6
TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhpcywgcHJvdG90eXBl
KQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3Nyw3IEBAIGNvbnN0
IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVyZTo6U3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2Vs
bCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
KQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEs
IHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykKICAgICAsIG1fdHJh
bnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTE5Nyw2ICsxOTks
NyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhCiBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0cnVjdHVyZSogcHJl
dmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBlSW5mbygpKQorICAg
ICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZpb3VzLT5zdG9yZWRQ
cm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2NsYXNzSW5mbykKICAg
ICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAgLTI1
MSw2ICsyNTQsOCBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKCiAK
ICAgICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5zaXplKCkgLSAyOyBpID49IDA7IC0t
aSkgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOworICAgICAgICBpZiAoIXN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5tX2F0
dHJpYnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMu
Z2V0KCkpOwogICAgICAgICBtX3Byb3BlcnR5VGFibGUtPmFkZChlbnRyeSk7CiAgICAgfQpAQCAt
NTAyLDYgKzUwNywzOCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNU
CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQoreworICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOworICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAgICAKKyAgICBp
ZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkgeworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFu
c2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGF0dHJpYnV0ZXMpOworICAgICAgICBB
U1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkg
PT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9wcmV2aW91cy5zZXQoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblBy
ZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4aW5nVHlwZSA9IGlu
ZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCisgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZpb3VzKQorICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsK
KyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFs
RGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9CisKIC8vIEluIGZ1
dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9vbCBTdHJ1Y3R1cmU6
OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVkZSAiQ2xhc3NJbmZv
LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgsNyArNjksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogCi0gICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyopOwor
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0lu
Zm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0xMDAsNiArMTAxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5vblByb3BlcnR5VHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24p
OwogCiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIGJvb2wg
aXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1fdHlwZUluZm87IH0K
ICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmpl
Y3QoKTsgfQogCisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
aW5nVHlwZTsgfQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVj
dCk7IH0KQEAgLTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdU
eXBlT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCkBA
IC0zNjMsNyArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwg
SW5kZXhpbmdUeXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsKICAg
ICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwogCkBAIC00
MTYsNiArNDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAgICAgICAgIFR5cGVJ
bmZvIG1fdHlwZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKICAg
ICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmpl
Y3Q7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlwZTsKQEAgLTQ0Nyw3
ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hhc0dldHRlclNldHRl
clByb3BlcnRpZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRl
clByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wgbV9oYXNOb25FbnVt
ZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlc0luUHJl
dmlvdXMgOiA3OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogMjI7
CiAgICAgICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50IDogMjsKICAg
ICAgICAgdW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAgICAgIHVuc2lnbmVk
IG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxpbmUgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGluZSBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUp
OwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVh
cCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUlu
Zm8sIGNsYXNzSW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUo
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8s
IGluZGV4aW5nVHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVmaW5lIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRl
ICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3Mg
SlNDZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgRmlyc3RJ
bnRlcm5hbEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRv
bid0IGhhdmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCisKKy8vIFN1cHBvcnQgZm9y
IGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBw
cm9wZXJ0aWVzLgorLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUgc3RyaW5nIHBvcnRp
b24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KK2VudW0gTm9uUHJvcGVydHlUcmFuc2l0aW9uIHsK
KyAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZQorfTsKKworaW5saW5lIHVuc2lnbmVkIHRvQXR0cmli
dXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gdHJh
bnNpdGlvbiArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7Cit9CisKK2lubGluZSBJbmRleGluZ1R5
cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNl
IEFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlwZSB8IEhhc0FycmF5
U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1NpbmdsZVNsb3RGbGFn
ID0gMTsKIApAQCAtNDQsNyArNjksMTAgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
IHsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25l
ZD4gS2V5OwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IHAuc2Vjb25kOworICAgICAgICAgICAgaWYgKHAuZmly
c3QpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHAuZmlyc3QtPmV4aXN0aW5nSGFzaCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvanMxXzYvQXJyYXkvcmVncmVzcy0zMDQ4MjguanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvanMxXzYvQXJy
YXkvcmVncmVzcy0zMDQ4MjguanMJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHJlcG9ydENvbXBhcmUoZXhwZWN0LCBhY3R1YWws
IHN1bW1hcnkgKyAKIAogLy8gcmV2ZXJzZQogdmFsdWUgID0gJzEyMyc7Ci1leHBlY3QgPSAnMTIz
JzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkg
cHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5j
YWxsKHZhbHVlKSArICcnOwpAQCAtNzMsNyArNzMsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwg
YWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHNvcnQKIHZhbHVlICA9ICdjYmEnOwotZXhwZWN0ID0g
J2NiYSc7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRv
bmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNvcnQu
Y2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTExNCw3ICsxMTQsNyBAQCByZXBvcnRDb21wYXJlKCdhYmMn
LCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHVuc2hpZnQKIHZhbHVlICA9ICdkZWYnOwotZXhw
ZWN0ID0gNjsKK2V4cGVjdCA9ICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVh
ZG9ubHkgcHJvcGVydHkuIjsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUudW5z
aGlmdC5jYWxsKHZhbHVlLCAnYScsICdiJywgJ2MnKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCByZXBv
cnRDb21wYXJlKCdkZWYnLCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHNoaWZ0CiB2YWx1ZSAg
PSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHku
JzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkg
cHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc2hpZnQuY2Fs
bCh2YWx1ZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUs
IHN1bW1hcnkgKyAnOgogCiAvLyBzcGxpY2UKIHZhbHVlICA9ICdhYmMnOwotZXhwZWN0ID0gJ1R5
cGVFcnJvcjogVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4nOworZXhwZWN0ID0gJ1R5cGVFcnJv
cjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAg
IGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh2YWx1ZSwgMSwgMSkgKyAnJzsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODAwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTA5LTA5ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHByb3Bl
cnR5IGJ1dHRlcmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MTkzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlYWNoIHRoZSBET00gdGhhdCB0byBpbnRlcmNlcHQgZ2V0L3B1dCBvbiBpbmRleGVk
IHByb3BlcnRpZXMsIHlvdSBub3cgaGF2ZQorICAgICAgICB0byBvdmVycmlkZSBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4IGFuZCBwdXRCeUluZGV4LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBi
ZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4gT25lIHRlc3Qgd2FzIHJlYmFzZWQgYmVjYXVzZSBpbmRl
eGVkCisgICAgICAgIHByb3BlcnR5IGl0ZXJhdGlvbiBvcmRlciBub3cgbWF0Y2hlcyBvdGhlciBl
bmdpbmVzIChpbmRleGVkIHByb3BlcnRpZXMgYWx3YXlzCisgICAgICAgIGNvbWUgZmlyc3QpLgor
CisgICAgICAgICogYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBcnJheVZhbHVlOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNCbG9i
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
V2Via2l0TGluZURhc2gpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0RPTVN0cmluZ0xpc3QpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpwdXRCeUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmg6Cisg
ICAgICAgIChKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxh
dGVDb250ZXh0TWVudUl0ZW1zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0b3Jh
Z2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJTb2NrZXRDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Njcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAg
ICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpSdW50aW1lQXJyYXkpOgor
ICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgIChKU0M6OlJ1bnRpbWVB
cnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFJ1bnRpbWVBcnJheSk6CisKIDIwMTIt
MDktMDkgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEJ1aWxkIEZpeC4gIDxyZGFyOi8vcHJvYmxlbS8xMjI2MDg5Mz4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMTAgKzczLDExIEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBpbmRleCwgRGljdGkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KG1f
dmFsdWUpOwotICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkKKyAgICAvLyBGSVhN
RTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShpbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTVmFsdWUgaW5k
ZXhlZFZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICBKU1ZhbHVlIGluZGV4ZWRW
YWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgIGlmIChpbmRleGVkVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCAhaW5kZXhlZFZhbHVlLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0Jsb2JDb25zdAogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgo
aSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9k
ZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjEwCisgICAgICAg
IEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAjaWYgRU5BQkxFKEJM
T0IpCiAgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8pKQog
ICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChjb250ZXh0LCB0b0FycmF5QnVmZmVyKGl0
ZW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw5IEBAIHZvaWQgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFdlYmsKIAogICAgIERhc2hBcnJheSBkYXNoOwog
ICAgIEpTQXJyYXkqIHZhbHVlQXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKKyAgICAvLyBGSVhNRTog
V2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
YWx1ZUFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGVsZW0gPSB2YWx1ZUFy
cmF5LT5nZXRJbmRleChpKS50b0Zsb2F0KGV4ZWMpOworICAgICAgICBmbG9hdCBlbGVtID0gdmFs
dWVBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvRmxvYXQoZXhlYyk7CiAgICAgICAgIGlmIChl
bGVtIDw9IDAgfHwgIWlzZmluaXRlKGVsZW0pKQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1
c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDkg
QEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0b0RPTVN0cmluZ0xpcwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3Ry
aW5nTGlzdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBXaGF0IGlm
IHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1NjEwCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5s
ZW5ndGgoKTsgKytpKQotICAgICAgICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4
KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIHN0cmluZ0xpc3QtPmFw
cGVuZChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAKICAgICByZXR1cm4gc3RyaW5nTGlzdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmlu
Z01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDExIEBAIGJvb2wgSlNE
T01TdHJpbmdNYXA6OmRlbGV0ZVByb3BlcnR5KEpTQ2UKICAgICByZXR1cm4gIWVjOwogfQogCiti
b29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBkZWxldGVQcm9w
ZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KSk7Cit9CisKIGJv
b2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JikKIHsKICAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxMiArMTYwLDEyIEBA
IGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICAvLyBpcyBhbGxv
d2VkLgogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgYm9vbCBhbGxvd3NBY2Nlc3MgPSBz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSwgZXJy
b3JNZXNzYWdlKTsKLQorICAgIAogICAgIC8vIExvb2sgZm9yIG92ZXJyaWRlcyBiZWZvcmUgbG9v
a2luZyBhdCBhbnkgb2Ygb3VyIG93biBwcm9wZXJ0aWVzLCBidXQgaWdub3JlIG92ZXJyaWRlcyBj
b21wbGV0ZWx5CiAgICAgLy8gaWYgdGhpcyBpcyBjcm9zcy1kb21haW4gYWNjZXNzLgogICAgIGlm
IChhbGxvd3NBY2Nlc3MgJiYgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LQorICAgIAogICAgIC8vIFdlIG5lZWQgdGhpcyBjb2RlIGhlcmUgYmVjYXVzZSBvdGhlcndpc2Ug
SlNET01XaW5kb3dCYXNlIHdpbGwgc3RvcCB0aGUgc2VhcmNoIGJlZm9yZSB3ZSBldmVuIGdldCB0
byB0aGUKICAgICAvLyBwcm90b3R5cGUgZHVlIHRvIHRoZSBibGFua2V0IHNhbWUgb3JpZ2luIChz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KSBjaGVjayBhdCB0aGUgZW5kIG9mIGdldE93blBy
b3BlcnR5U2xvdC4KICAgICAvLyBBbHNvLCBpdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGltcGxl
bWVudGF0aW9uIHN0cmFpZ2h0IG91dCBvZiB0aGUgRE9NV2luZG93IHByb3RvdHlwZSByZWdhcmRs
ZXNzIG9mCkBAIC0yNjksNiArMjY5LDgyIEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5U2xvdChKU0MKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNET01XaW5kb3c6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNET01XaW5kb3cqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICAKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhdmUgYSBtZXNzYWdlIGhlcmUgdGhhdCBleHBsYWlucyB3aHkgdGhlIHByb3BlcnR5IGFjY2Vz
cy9mdW5jdGlvbiBjYWxsIHdhcworICAgICAgICAvLyBub3QgYWxsb3dlZC4gCisgICAgICAgIHNs
b3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgZm9yIGNyb3NzLWRvbWFpbiBhY2Nlc3MgaGVyZSB3aXRob3V0IHBy
aW50aW5nIHRoZSBnZW5lcmljIHdhcm5pbmcgbWVzc2FnZQorICAgIC8vIGJlY2F1c2Ugd2UgYWx3
YXlzIGFsbG93IGFjY2VzcyB0byBzb21lIGZ1bmN0aW9uLCBqdXN0IGRpZmZlcmVudCBvbmVzIGRl
cGVuZGluZyB3aGV0aGVyIGFjY2VzcworICAgIC8vIGlzIGFsbG93ZWQuCisgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKKyAgICBib29sIGFsbG93c0FjY2VzcyA9IHNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLCBlcnJvck1lc3NhZ2UpOworCisgICAg
Ly8gTG9vayBmb3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0IGFueSBvZiBvdXIgb3duIHBy
b3BlcnRpZXMsIGJ1dCBpZ25vcmUgb3ZlcnJpZGVzIGNvbXBsZXRlbHkKKyAgICAvLyBpZiB0aGlz
IGlzIGNyb3NzLWRvbWFpbiBhY2Nlc3MuCisgICAgaWYgKGFsbG93c0FjY2VzcyAmJiBKU0dsb2Jh
bE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRl
eCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKyAgICAKKyAgICAv
LyBDaGVjayBmb3IgY2hpbGQgZnJhbWVzIGJ5IG5hbWUgYmVmb3JlIGJ1aWx0LWluIHByb3BlcnRp
ZXMgdG8KKyAgICAvLyBtYXRjaCBNb3ppbGxhLiBUaGlzIGRvZXMgbm90IG1hdGNoIElFLCBidXQg
c29tZSBzaXRlcyBlbmQgdXAKKyAgICAvLyBuYW1pbmcgZnJhbWVzIHRoaW5ncyB0aGF0IGNvbmZs
aWN0IHdpdGggd2luZG93IHByb3BlcnRpZXMgdGhhdAorICAgIC8vIGFyZSBpbiBNb3ogYnV0IG5v
dCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCisgICAgLy8g
aXQgdGhlIE1veiB3YXkuCisgICAgaWYgKHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJl
ZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUp
KSkgeworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVy
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIERvIHByb3RvdHlw
ZSBsb29rdXAgZWFybHkgc28gdGhhdCBmdW5jdGlvbnMgYW5kIGF0dHJpYnV0ZXMgaW4gdGhlIHBy
b3RvdHlwZSBjYW4gaGF2ZQorICAgIC8vIHByZWNlZGVuY2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5h
bWUgZ2V0dGVycy4gIAorICAgIEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5wcm90b3R5cGUo
KTsKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkgeworICAgICAgICBpZiAoYXNPYmplY3QocHJv
dG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKSB7CisgICAgICAgICAgICBp
ZiAoIWFsbG93c0FjY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnByaW50RXJy
b3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgc2xvdC5zZXRVbmRlZmlu
ZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gRklYTUU6IFNlYXJjaCB0aGUgd2hvbGUgZnJhbWUgaGllcmFyY2h5
IHNvbWV3aGVyZSBhcm91bmQgaGVyZS4KKyAgICAvLyBXZSBuZWVkIHRvIHRlc3QgdGhlIGNvcnJl
Y3QgcHJpb3JpdHkgb3JkZXIuCisKKyAgICAvLyBhbGxvdyB3aW5kb3dbMV0gb3IgcGFyZW50WzFd
IGV0Yy4gKCM1Njk4MykKKyAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1l
KCktPnRyZWUoKS0+c2NvcGVkQ2hpbGRDb3VudCgpKSB7CisgICAgICAgIEFTU0VSVChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOworICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICghYWxsb3dzQWNjZXNzKSB7CisgICAgICAgIHRoaXNPYmplY3QtPnBy
aW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEFsbG93IHNob3J0Y3V0
cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICAgICAgQXRvbWlj
U3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUpOworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPihkb2N1bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQcm9wZXJ0eU5hbWUp
IHx8IGRvY3VtZW50LT5oYXNFbGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5TmFtZSkpKSB7Cisg
ICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0ZW1HZXR0ZXIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwg
c2xvdCk7Cit9CisKIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU0RPTVdpbmRvdyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkBAIC0zNjIsNiArNDM4
LDI1IEBAIHZvaWQgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWMKICAgICAgICAg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwog
fQogCit2b2lkIEpTRE9NV2luZG93OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykK
K3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNl
bGwpOworICAgIGlmICghdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpOworCisgICAgLy8gT3B0aW1pemF0aW9uOiBhY2Nlc3MgSmF2YVNjcmlw
dCBnbG9iYWwgdmFyaWFibGVzIGRpcmVjdGx5IGJlZm9yZSBpbnZvbHZpbmcgdGhlIERPTS4KKyAg
ICBpZiAodGhpc09iamVjdC0+SlNHbG9iYWxPYmplY3Q6Omhhc093blByb3BlcnR5Rm9yV3JpdGUo
ZXhlYywgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAg
ICAgICAgICBKU0dsb2JhbE9iamVjdDo6cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRl
eCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMs
IHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIEJhc2U6OnB1dEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKIGJvb2wgSlNET01XaW5k
b3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CkBAIC0zNzEsNiArNDY2LDE1IEBAIGJvb2wgSlNET01X
aW5kb3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCoKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0RPTVdp
bmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5n
IHByb3BlcnRpZXMgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0
LT5pbXBsKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCiB2
b2lkIEpTRE9NV2luZG93OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9N
V2luZG93Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NiArOTcsMTIgQEAgYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eVNsbwogICAg
IHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCitib29sIEpTRE9NV2luZG93U2hlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT53aW5k
b3coKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwogYm9vbCBKU0RPTVdp
bmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsKQEAgLTEwOSw2ICsxMTUsMTIgQEAgdm9p
ZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXQoSlNDZWxsKiBjZWxsLAogICAgIHRoaXNPYmplY3QtPndp
bmRvdygpLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit2b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0RPTVdpbmRv
d1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsKKyAg
ICB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzT2Jq
ZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
fQorCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEpTRE9NV2luZG93U2hlbGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkBAIC0xMjcsNiAr
MTM5LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6ZGVsZXRlUHJvcGVydHkoSlMKICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29sIEpT
RE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpTRE9NV2luZG93U2hl
bGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpOworICAgIHJl
dHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCiB2
b2lkIEpTRE9NV2luZG93U2hlbGw6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksMTAgKzc5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIHVuc2lnbmVkLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0
YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHB1dERpcmVjdFZpcnR1YWwoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSk7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NSw2ICsxNTUsMTUgQEAgYm9vbCBKU0hpc3Rvcnk6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogYwogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwogfQogCitib29sIEpTSGlzdG9yeTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7
CisgICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSGlzdG9yeSo+KGNlbGwpOwor
ICAgIC8vIE9ubHkgYWxsb3cgZGVsZXRpbmcgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4K
KyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVjLCB0aGlzT2JqZWN0LT5pbXBs
KCktPmZyYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQor
CiB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0hpc3RvcnkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNI
aXN0b3J5Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksOCBAQCBKU1ZhbHVl
IEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KEV4CiBzdGF0aWMgdm9pZCBwb3B1bGF0ZUNv
bnRleHRNZW51SXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgQ29udGV4dE1l
bnUmIG1lbnUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBKU09iamVjdCogaXRlbSA9IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRl
eChpKSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBpbiBzcGFyc2Ug
bW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjEwCisgICAg
ICAgIEpTT2JqZWN0KiBpdGVtID0gYXNPYmplY3QoYXJyYXktPmdldEluZGV4UXVpY2tseShpKSk7
CiAgICAgICAgIEpTVmFsdWUgbGFiZWwgPSBpdGVtLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAibGFiZWwiKSk7CiAgICAgICAgIEpTVmFsdWUgdHlwZSA9IGl0ZW0tPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsICJ0eXBlIikpOwogICAgICAgICBKU1ZhbHVlIGlkID0gaXRlbS0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgImlkIikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjEsNiArMTYxLDE1IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0xvY2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihj
ZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBv
cmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgdGhpc09iamVj
dC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBC
YXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwogdm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTTG9jYXRpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDExIEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
IGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworfQorCiB2b2lkIEpTU3RvcmFnZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBK
U1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdlKj4ob2JqZWN0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29j
a2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBwcm90b2NvbHM7CiAgICAgICAgICAgICBKU0FycmF5KiBwcm90b2NvbHNBcnJheSA9IGFzQXJy
YXkocHJvdG9jb2xzVmFsdWUpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHByb3RvY29sc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IHByb3RvY29sID0gcHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkg
aXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTYxMAorICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5
LT5nZXRJbmRleFF1aWNrbHkoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHByb3Rv
Y29scy5hcHBlbmQocHJvdG9jb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDgg
QEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbgogICAgICAgICAgICAg
SlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFy
cmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUg
YXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5n
ZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBlbGVtZW50VmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIGVsZW1lbnQs
IG1heERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAg
ICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIGlm
IChhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAg
aW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4ID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRTcGFyc2VJbmRleChhcnJheSwgaW5kZXgsIGhh
c0luZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNzc3
LDIzICs3NzcsMjUgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAkaW1wbEluY2x1ZGVzeyIk
e2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNDdXN0b21IZWFkZXIifSAmJiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tUHV0RnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21OYW1lZFNldHRlciJ9KTsKIAotICAgIG15ICRoYXNHZXR0ZXIgPSAkbnVtQXR0cmli
dXRlcyA+IDAKLSAgICAgICAgICAgICAgICAgfHwgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQotICAgICAgICAgICAgICAgICB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9
Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUdldE93blByb3BlcnR5U2xvdCJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKKyAgICBteSAkaGFzQ29tcGxleEdl
dHRlciA9CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRH
ZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1l
cmljSW5kZXhlZEdldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVk
R2V0dGVyIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tTmFtZWRHZXR0ZXIifTsKKyAgICAKKyAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0
ZXMgPiAwIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0
b3IifSB8fCAkaGFzQ29tcGxleEdldHRlcjsKIAogICAgICMgR2V0dGVycwogICAgIGlmICgkaGFz
R2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
biIpIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIi
fSkgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVy
In07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgKCRoYXNDb21wbGV4
R2V0dGVyKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blBy
b3BlcnR5U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifTsKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvckRlbGVn
YXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3Rv
bUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifTsKICAgICAgICAgJHN0cnVjdHVyZUZs
YWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCJ9ID0gMTsKKyAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCiAgICAgIyBDaGVjayBpZiB3ZSBo
YXZlIGFueSB3cml0YWJsZSBwcm9wZXJ0aWVzCkBAIC04MDQsMTUgKzgwNiwxNyBAQCBzdWIgR2Vu
ZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIG15ICRoYXNTZXR0ZXIgPSAkaGFz
UmVhZFdyaXRlUHJvcGVydGllcwotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9Ci0gICAgICAgICAgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn0KLSAg
ICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
SW5kZXhlZFNldHRlciJ9OworICAgIG15ICRoYXNDb21wbGV4U2V0dGVyID0KKyAgICAgICAgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifQorICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9
CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4
ZWRTZXR0ZXIifTsKKyAgICAgICAgCisgICAgbXkgJGhhc1NldHRlciA9ICRoYXNSZWFkV3JpdGVQ
cm9wZXJ0aWVzIHx8ICRoYXNDb21wbGV4U2V0dGVyOwogCiAgICAgIyBHZXR0ZXJzCiAgICAgaWYg
KCRoYXNTZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21JbmRleGVkU2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xu
IikgaWYgKCRoYXNDb21wbGV4U2V0dGVyKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBib29sIHB1dERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn07CiAgICAgfQogCkBAIC04
NDgsNiArODUyLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIEN1c3RvbSBkZWxldGVQ
cm9wZXJ0eSBmdW5jdGlvbgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bURlbGV0ZVByb3BlcnR5In07CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bURlbGV0ZVByb3BlcnR5In07CiAKICAgICAjIEN1c3RvbSBnZXRQcm9wZXJ0eU5hbWVzIGZ1bmN0
aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdp
bmRvdyIpIHsKQEAgLTE3NDEsMjEgKzE3NDYsNzkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdl
dHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVk
R2V0dGVyIn0pCi0gICAgICAgICAgICAgICAgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KVxuIik7CisgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TnVtZXJpY0luZGV4ZWRHZXR0ZXIifQorICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifQorICAgICAgICAgICAgICAgIHx8ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5k
RGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtj
bGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NO
YW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAocHJvcGVydHlOYW1lIDwgc3RhdGlj
X2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xu
Iik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVt
ZXJpY0luZGV4ZWRHZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJv
cGVydHlOYW1lKSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKworICAgICAg
ICAgICAgIyBUaGlzIGF0dGVtcHRzIHRvIHNpbmsgdGhlIHNvbWV3aGF0IGV4cGVuc2l2ZSBpbnQt
dG8tc3RyaW5nIGNvbnZlcnNpb24gdGhhdCBoYXBwZW5zIHdoZW4gd2UgY3JlYXRlIFByb3BlcnR5
TmFtZQorICAgICAgICAgICAgIyB0byB0aGUgcG9pbnQgd2hlcmUgd2UgYWN0dWFsbHkgbmVlZCBp
dC4gSW4gcGFydGljdWxhciwgd2hlbiB3ZSBnZW5lcmF0ZSB0aGlzIG1ldGhvZCBmb3IgY2xhc3Nl
cyB0aGF0IGNhbgorICAgICAgICAgICAgIyBhdHRlbXB0IHRoZWlyIGluZGV4ZWQgZ2V0dGVyIGZp
cnN0LCB3ZSB0cnkgdG8gZW5zdXJlIHRoYXQgaWYgdGhhdCBnZXR0ZXIgc3VjY2VlZHMgdGhlbiB3
ZSBkb24ndCBwYXkgZm9yIHRoZQorICAgICAgICAgICAgIyBjcmVhdGlvbiBvZiB0aGUgUHJvcGVy
dHlOYW1lLgorICAgICAgICAgICAgbXkgJGdlbmVyYXRlZFByb3BlcnR5TmFtZSA9IDA7CisgICAg
ICAgICAgICBteSAkcHJvcGVydHlOYW1lR2VuZXJhdGlvbiA9IHN1YiB7CisgICAgICAgICAgICAg
ICAgaWYgKCRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAkZ2VuZXJhdGVkUHJvcGVydHlOYW1lID0g
MTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG15ICRtYW51YWxM
b29rdXBHZXR0ZXJHZW5lcmF0aW9uID0gc3ViIHsKKyAgICAgICAgICAgICAgICBteSAkcmVxdWly
ZXNNYW51YWxMb29rdXAgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVk
R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIi
fTsKKyAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3VwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNvbnN0IEhhc2hFbnRyeSogZW50
cnkgPSAke2NsYXNzTmFtZX1UYWJsZS5lbnRyeShleGVjLCBwcm9wZXJ0eU5hbWUpO1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChlbnRyeSkge1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIoKSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVl
O1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9
ICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9
KSB7CisgICAgICAgICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9uKCk7CisgICAgICAg
ICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpO1xuIik7CisKKyAgICAgICAgICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifSkgeworICAgICAg
ICAgICAgICAgIGlmIChJbmRleEdldHRlclJldHVybnNTdHJpbmdzKCRpbXBsQ2xhc3NOYW1lKSkg
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW5kZXgg
PD0gTUFYX0FSUkFZX0lOREVYKSB7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW5kZXggPCBzdGF0
aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSktPmxlbmd0aCgpKSB7
XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNPYmplY3QtPmluZGV4
R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVk
R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRH
ZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChjYW5HZXRJdGVtc0Zv
ck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBs
KCkpLCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+bmFt
ZUdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaCJ9ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdl
dHRlciJ9KSB7CisgICAgICAgICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9uKCk7Cisg
ICAgICAgICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifSkg
eworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eVNsb3REZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4
LCBzbG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwog
ICAgICAgICB9CiAKQEAgLTE5NDYsMTYgKzIwMDksMzAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6
cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1xuIik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbClcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdylcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIntcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5k
ZXhlZFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSB7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBVTlVTRURfUEFSQU0oc2hv
dWxkVGhyb3cpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgaW5kZXgsIHZhbHVlKTtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21OYW1lZFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNP
YmplY3QtPnB1dERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpKVxuIik7
CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBp
bmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1l
QXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZKU0FycmF5OjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogCiBSdW50aW1lQXJyYXk6OlJ1
bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDog
SlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6IEpTQXJyYXkoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX2FycmF5KDApCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTczLDEzICs3MywxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5KTsKICAg
ICB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYs
IEJpbmRpbmdzOjpBcnJheSopOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNBcnJheTo6U3RydWN0dXJlRmxhZ3M7CiAKIHBy
aXZhdGU6CiAgICAgUnVudGltZUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTI4MDAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgcHJvcGVydHkgYnV0dGVyZmxpZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTMzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZ5IHRo
ZSB0ZXN0IHRvIGluZGljYXRlIHRoYXQgaXRlcmF0aW5nIG92ZXIgcHJvcGVydGllcyBub3cgcmV0
dXJucworICAgICAgICBpbmRleGVkIHByb3BlcnRpZXMgZmlyc3QuIFRoaXMgaXMgYSBiZWhhdmlv
ciBjaGFuZ2UgdGhhdCBtYWtlcyB1cyBtb3JlCisgICAgICAgIGNvbXBsaWFudCB3aXRoIG90aGVy
IGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL0pTT04tc3Ry
aW5naWZ5LmpzOgorCiAyMDEyLTA5LTA5ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29n
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMjc5MzYpOiBNdWx0aXBsZSBhY2Nlc3Np
YmlsaXR5IHRlc3RzIGZhaWxpbmcgb24gTGlvbgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMJKHJldmlzaW9uIDEyNzkzNikKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgZnVuY3Rpb24gY3JlYXRlVGVzdHMoKSB7CiAgICAgICAg
IGpzb25PYmplY3Quc3RyaW5naWZ5KHthOiJhIiwgYjoiYiIsIGM6ImMiLCAzOiAiZCIsIDI6ICJl
IiwgMTogImYifSwgcmVwbGFjZUZ1bmMpOwogICAgICAgICByZXR1cm4gcmVwbGFjZVRyYWNrZXI7
CiAgICAgfSk7Ci0gICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBlY3RlZCA9ICcoc3Ry
aW5nKXsiYSI6ImEiLCJiIjoiYiIsImMiOiJjIiwiMyI6ImQiLCIyIjoiZSIsIjEiOiJmIn07YShz
dHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7MyhzdHJpbmcpImQiOzIoc3RyaW5n
KSJlIjsxKHN0cmluZykiZiI7JzsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVj
dGVkID0gJyhzdHJpbmcpeyIxIjoiZiIsIjIiOiJlIiwiMyI6ImQiLCJhIjoiYSIsImIiOiJiIiwi
YyI6ImMifTsxKHN0cmluZykiZiI7MihzdHJpbmcpImUiOzMoc3RyaW5nKSJkIjthKHN0cmluZyki
YSI7YihzdHJpbmcpImIiO2Moc3RyaW5nKSJjIjsnOwogICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9u
KGpzb25PYmplY3QpewogICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAgICB2YXIgYXJyYXkg
PSBbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7Y291bnQrKzsgYXJyYXlbMF09J2EnOyBhcnJheVsxXT0n
Yyc7IGFycmF5WzJdPSdiJzsgcmV0dXJuICdhJ319XTsK
</data>
<flag name="commit-queue"
          id="174315"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163019</attachid>
            <date>2012-09-09 16:11:08 -0700</date>
            <delta_ts>2012-09-09 17:39:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>butterflies_patch_37.diff</filename>
            <type>text/plain</type>
            <size>517942</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3MyBA
QAorMjAxMi0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEpTQyBvYmplY3Qg
bW9kZWwuIFByZXZpb3VzbHksIGFsbCBvYmplY3RzIGhhZCBmYXN0IGxvb2t1cCBmb3IKKyAgICAg
ICAgbmFtZWQgcHJvcGVydGllcy4gSW50ZWdlciBpbmRleGVkIHByb3BlcnRpZXMgd2VyZSBvbmx5
IGZhc3QgaWYgeW91IHVzZWQgYQorICAgICAgICBKU0FycmF5LiBXaXRoIHRoaXMgY2hhbmdlLCBh
bGwgb2JqZWN0cyBoYXZlIGZhc3QgaW5kZXhlZCBwcm9wZXJ0aWVzLiBUaGlzIGlzCisgICAgICAg
IGFjY29tcGxpc2hlZCB3aXRob3V0IGFueSBzcGFjZSBvdmVyaGVhZCBieSB1c2luZyBhIGJpZGly
ZWN0aW9uYWwgb2JqZWN0IGxheW91dCwKKyAgICAgICAgYWthIGJ1dHRlcmZsaWVzLiBFYWNoIEpT
T2JqZWN0IGhhcyBhIG1fYnV0dGVyZmx5IHBvaW50ZXIgd2hlcmUgcHJldmlvdXNseSBpdAorICAg
ICAgICBoYWQgYSBtX291dE9mTGluZVN0b3JhZ2UgcG9pbnRlci4gVG8gdGhlIGxlZnQgb2YgdGhl
IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgbV9idXR0ZXJmbHksIHdlIHBsYWNlIGFs
bCBuYW1lZCBvdXQtb2YtbGluZSBwcm9wZXJ0aWVzLiBUbyB0aGUgcmlnaHQsIHdlIHBsYWNlCisg
ICAgICAgIGFsbCBpbmRleGVkIHByb3BlcnRpZXMgYWxvbmcgd2l0aCBpbmRleGluZyBtZXRhLWRh
dGEuIFRob3VnaCwgc29tZSBpbmRleGluZworICAgICAgICBtZXRhLWRhdGEgaXMgcGxhY2VkIGlu
IHRoZSA4LWJ5dGUgd29yZCBpbW1lZGlhdGVseSBsZWZ0IG9mIHRoZSBwb2ludGVkLXRvCisgICAg
ICAgIGxvY2F0aW9uOyB0aGlzIGlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgaW5kZXhpbmcgbWV0
YS1kYXRhIGJlaW5nIHNtYWxsIGVub3VnaAorICAgICAgICBpbiB0aGUgY29tbW9uIGNhc2UgdGhh
dCBtX2J1dHRlcmZseSBhbHdheXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbmRleGVkCisgICAgICAg
IHByb3BlcnR5LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZSBuZXV0cmFs
LCBleGNlcHQgb24gdGVzdHMgdGhhdCB1c2UgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uCisgICAgICAg
IHBsYWluIG9iamVjdHMsIHdoZXJlIHRoZSBzcGVlZC11cCBpcyBpbiBleGNlc3Mgb2YgYW4gb3Jk
ZXIgb2YgbWFnbml0dWRlLgorICAgICAgICAKKyAgICAgICAgT25lIG5vdGFibGUgYXNwZWN0IG9m
IHdoYXQgdGhpcyBjaGFuZ2UgYnJpbmdzIGlzIHRoYXQgaXQgYWxsb3dzIGluZGV4aW5nCisgICAg
ICAgIHN0b3JhZ2UgdG8gbW9ycGggb3ZlciB0aW1lLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVz
ZWQgdG8gYWxsb3cgYWxsIG5vbi1hcnJheQorICAgICAgICBvYmplY3RzIHRvIHN0YXJ0IG91dCB3
aXRob3V0IGFueSBpbmRleGVkIHN0b3JhZ2UuIEJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvcgorICAg
ICAgICBzb21lIGtpbmRzIG9mIGFycmF5IHR5cGUgaW5mZXJlbmNlIGluIHRoZSBmdXR1cmUuCisK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDYWxsYmFja09i
amVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBB
UEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkamFjZW5jeUxpc3Q6OkFkamFjZW5jeUxpc3QpOgorICAgICAgICAoQWRqYWNlbmN5TGlz
dCk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZnJvbU9ic2VydmVkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlQWxyZWFkeUNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVXNlc0J1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRz
TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZv
cm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnB1dEJ5VmFsKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRC
eUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAg
ICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6
OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fs
bE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRz
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAgICAgICAoSlND
OjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pv
aW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5o
OgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjppblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
c2l6ZUZvcik6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1
cmluZ0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNp
emVBcnJheSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6Cisg
ICAgICAgIChNZXRob2RUYWJsZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjp2ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRQ
dWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNh
cGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAg
KiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6
SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnRlYXJPZmYpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpjcmVh
dGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxl
dGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmlzTGVu
Z3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpib3Vu
ZEZ1bmN0aW9uQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
Lmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpI
b2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlh
bGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlhbGl6YXRp
b24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFyc2VJbmRleGluZ01vZGUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhpbmdTaG91bGRCZVNwYXJzZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojph
cnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JaZXJv
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlND
OjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5CdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlND
OjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jh
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86OmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8pOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgIChPYmplY3RQcm90
b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpT
Qzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9QdXRE
aXJlY3RJbmRleE1vZGUuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0Fy
cmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVz
QXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAg
ICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVqZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVu
dHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVNYXApOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZv
dW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToK
KyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
On5TcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpkZXN0cm95KToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICog
cnVudGltZS9TdG9yYWdlQmFycmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoU3RyaW5nT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTo6SGFzaDo6aGFzaCk6CisgICAgICAgICogdGVzdHMvbW96aWxsYS9qczFfNi9BcnJh
eS9yZWdyZXNzLTMwNDgyOC5qczoKKwogMjAxMi0wOS0wOSAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHRoZSBTdHJpbmcgaW5pdGlhbGl6YXRp
b24gb24gdGhlIGZ1bmN0aW9uIHNpZGUgb2YgU3RyaW5nOjpudW1iZXIoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1
LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAKKyAgICBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCiAgICAgcnVu
dGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKICAgICBydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAogICAgIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
NTMsOCArNDUzLDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludGVnZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcCBc
CkBAIC00NjMsNiArNDY1LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaCBcCkBAIC01MDcsNiArNTExLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAgXApAQCAtNjExLDcgKzYxOCw5IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
T2Zmc2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGUuaCBcCkBAIC02MjgsMTEgKzYzNywxNCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ0NvdW50ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVy
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2
YWxBY3RpdmF0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwIFwKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAogICAgIHJ1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCisgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cCBcCiAgICAgcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXAogICAgIHJ1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL1N0cmluZ09iamVjdC5jcHAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBQ
YXJlbnQ6Om1ldGhvZFRhYmxlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFz
SW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hh
c0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC0xNzgsNiArMTc4LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTg3LDcgKzE4OCw3IEBAIHByaXZhdGU6CiAKICAgICBz
dGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUgcHJvdG8pOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDYgKzE4MywxMiBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
cmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgogSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRl
ZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKICAgICBjb25zdCBKU0NhbGxiYWNrT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwpAQCAt
NDQ5LDcgKzQ1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoK
IH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwog
ICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZXhlYyk7CkBAIC00ODQsNyArNDkwLDcg
QEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBybwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIFBhcmVudDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAog
I2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRl
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNiArNTE0LDU4
IEBACiAJCQlOYW1lPSJydW50aW1lIgogCQkJPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcUmVqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1l
dGhvZHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccnVudGltZVxBcnJheVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQ
cm9wZXJ0eVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQdXREaXJlY3RJbmRleE1vZGUuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxCdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQnV0dGVyZmx5LmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdIZWFkZXJJ
bmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEFycmF5Q29u
dmVudGlvbnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXEFyZ0xpc3QuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsOCBAQAogCQkwRjBCODNCNTE0QkNGODYyMDA4ODVCNEYgLyog
TWV0aG9kQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExpbmtJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYw
QjgzQjcxNEJDRjhFMTAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCNjE0QkNGOERGMDA4ODVC
NEYgLyogR2xvYmFsUmVzb2x2ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRl
eE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjBDRDRDNDE1RjZCNkJC
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAv
KiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYx
NUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE4OCw2ICsxOTAsMTcgQEAKIAkJMEZCNTQ2
NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0Njgw
MDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdC
MTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0
MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNGRDYwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCN0YzOTUxNUVE
OEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJh
eUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEExNUVEOEUz
ODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdG
MzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyog
QnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVFRDhFMzgw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklu
bGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlEMTVFRDhFNDYw
MEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RTE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZD
N0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01NjYsNyArNTc5LDYgQEAKIAkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENB
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3NDhEMDA3
MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07Ci0JCUE3
ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkw
IC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFC
OThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFEMTY2MjIw
MDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tl
ci5oICovOyB9OwogCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi87IH07
CkBAIC04MjksNiArODQxLDggQEAKIAkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8qIE1ldGhv
ZENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RD
YWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzQjYxNEJD
RjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdsb2JhbFJlc29sdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRl
Y29kZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwRkM0
NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTQ1LDYgKzk1OSwxNyBAQAogCQkwRkI1NDY3ODE0RjVDNDY4MDAy
QzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1
dHRlcmZseUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZC
N0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhG
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5kZXhpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUzODAwRjE2
N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
RkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1
MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzM5LDcgKzEzNjQsNiBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkg
LyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZD
NTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8qIFN0b3Jh
Z2VCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VCYXJy
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFDRDYwMDE5
RTkxMiAvKiBKU09iamVjdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNPYmplY3RSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjAxNyw2ICsyMDQxLDIwIEBACiAJCTdFRjZFMEJCMEVCN0ExRUMw
MDc5QUZBRiAvKiBydW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1h
cC5jcHAgKi8sCisJCQkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4
TW9kZS5oICovLAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRp
b25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5o
ICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLywKKwkJ
CQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICov
LAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovLAor
CQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmgg
Ki8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICov
LAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKKwkJCQkwRkI3
RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovLAorCQkJCTBG
QjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9k
cy5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAq
LywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJD
MjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjIwMiw3ICsy
MjQwLDYgQEAKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAg
Ki8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAot
CQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovLAogCQkJ
CUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8s
CiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmgg
Ki8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNw
cCAqLywKQEAgLTI3NTIsNyArMjc4OSw2IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJF
RjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBp
biBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFy
cmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0
cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
MjkwMSw2ICsyOTM3LDE4IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTElu
dE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8q
IEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3
QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOTYxNUVE
OEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0Yz
OTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
N0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIxNUVEOEU0
NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUMx
NUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAw
MzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTAyLDYg
KzM1NTAsNyBAQAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNX
aXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMw
IC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hlcmUgZWFj
aCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4uCisvLyBU
aGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNvIDMyIGJp
dHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAorICAgICgx
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9kZXMgYXJy
YXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICByZXR1cm4g
SXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5OworICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQogCiBjbGFz
cyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE1LDcgKzE3MTUsOSBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
MCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+dW5k
ZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJbmRleCgp
ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MiwxMSArODUyLDExIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkpTQXJyYXk6CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2Ug
T1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTE2LDEwICs5MTYsMTAgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgog
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9k
ZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmls
dGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQxLDcgKzEzNDEsNyBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xMzU5
LDggKzEzNTksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIC8v
IFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cuIFdlIG1h
eSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5IG1vZGUg
c3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBTaXplID0g
MyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGphY2VuY3lM
aXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9raW5kKGtp
bmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2RlIGZyb21P
YnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAgY2FzZSAw
OgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNBcnJheToK
LSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcyA6IEFy
cmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtl
U2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDog
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Ig
d2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUg
YXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9t
CkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZh
bHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNTdHJpbmdT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNlIE5PTl9B
UlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6
c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1Nw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9yY2VFeGl0
IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwotICAgIGNh
c2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0FycmF5T3V0
T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJu
ICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRz
OgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7
CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVy
biAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVtIE1vZGUg
ewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBob3cgdG8g
ZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4KICAgICBH
ZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRPZkJvdW5k
cywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCisgICAg
QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAgIEludDhB
cnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2RlIHsKIH07
CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50
cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCisvLyBp
cyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2Zm
IGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBp
biB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJS
QVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBBcnJheTo6
TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7CiAKIEFy
cmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7CkBAIC03
MSwxMSArOTgsMzAgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYsIAog
CiBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUgYm9vbCBt
b2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKIHsK
ICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJB
WV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91bmRzQWNj
ZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwyNSArMTYw
LDYgQEAgaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAgIH0KIH0K
IAotaW5saW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6Ok1vZGUg
bGVmdCwgQXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0gICAgICAg
IGxlZnQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAgICAgICBy
aWdodCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0SXNKU0Fy
cmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAgICAgc3dp
dGNoIChtb2RlKSB7CkBAIC0xNDcsNyArMTc0LDE1IEBAIGlubGluZSBib29sIG1vZGVJc1NwZWNp
ZmljKEFycmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5
OjpNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5PTl9BUlJB
WV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyArMTY4NSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlmIChpc0lu
bGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAg
IGVsc2UKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0
b3JhZ2UsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1
dHRlcmZseSwgYmFzZSk7CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAgICAgYWRk
VG9HcmFwaCgKICAgICAgICAgICAgIEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMTcsNyArMjMx
Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdl
dFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpA
QCAtMjM2OCwxMyArMjM2OCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0
eVN0b3JhZ2UsIGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRU
b0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0
b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07
CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2FzZSBHZXRQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyArMTE2MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNh
c2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihu
b2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwogICAgICAg
ICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKLSAgICAg
ICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBub2RlUHRyLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAgCkBAIC0z
NjUsNiArMzY1LDE2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAgTm9kZUlu
ZGV4IGFkZE5vZGUoY29uc3QgTm9kZSYgbm9kZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSkKKyAgICB7
CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQobm9kZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2lu
ZGV4SW5CbG9jaywgbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQorICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLnJlZigpOworICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBh
cnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBib29sICgq
c3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNob3VsZEdl
bmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhhcnJh
eU1vZGUpKTsKQEAgLTM4MSwxNSArMzkxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBpZiAoc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihhcnJheSk7Ci0g
ICAgICAgIE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJh
eSk7Ci0gICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkKLSAgICAgICAgICAgIGdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UucmVmKCk7Ci0gICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7Ci0gICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsKICAgICAg
ICAgCi0gICAgICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXg7CisgICAg
ICAgIGlmIChtb2RlVXNlc0J1dHRlcmZseShhcnJheU1vZGUpKQorICAgICAgICAgICAgcmV0dXJu
IGFkZE5vZGUoTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBz
aG91bGRHZW5lcmF0ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlv
bihFZGdlIGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDczLDcgKzQ3Myw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAg
ICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0
T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBA
IHN0cnVjdCBPcEluZm8gewogc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFy
QXJnIH07CiAgICAgCisgICAgTm9kZSgpIHsgfQorICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAgTm9kZShO
b2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2Rl
KQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQaGFudG9t
UHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAg
bWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9l
c05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0
b3JhZ2UpIFwKKyAgICBtYWNybyhHZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAg
ICAgbWFjcm8oQ2hlY2tBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0
QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRz
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkRGR09TUkV4aXQuaCIKQEAgLTIyNiwxNCArMjI3LDE0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBw
dXRCeVZhbChFeGVjU3RhdGUqIGUKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFs
RGF0YSwgZXhlYyk7CiAgICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICBpZiAoYXJy
YXktPmNhblNldEluZGV4KGluZGV4KSkgewotICAgICAgICAgICAgYXJyYXktPnNldEluZGV4KGds
b2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7
CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAg
ICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgICAgICBv
YmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChh
cnJheSwgZXhlYywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOworICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0cmljdCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0MSwxMSArMzQyLDEyIEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgLy8gRklYTUU6IHRoZSBKSVQgdXNl
ZCB0byBoYW5kbGUgdGhlc2UgaW4gY29tcGlsZWQgY29kZSEKLSAgICBpZiAoaXNKU0FycmF5KGJh
c2UpICYmIGFzQXJyYXkoYmFzZSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc0FycmF5KGJhc2UpLT5nZXRJbmRleChpbmRleCkpOworICAgIGlm
IChiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dChiYXNlKTsKKyAgICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpKTsKKyAgICB9CiAKLSAgICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNlZCB0byBy
ZWxpbmsgdGhpcyB0byBhbiBvcHRpbWl6ZWQgZm9ybSEKICAgICBpZiAoaXNKU1N0cmluZyhiYXNl
KSAmJiBhc1N0cmluZyhiYXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5nKGJhc2UpLT5nZXRJbmRleChleGVjLCBpbmRleCkpOwog
CkBAIC01NDgsMTUgKzU1MCwxNSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywgSlNWYWx1
ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKLXZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5
LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChp
bmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4
IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+
Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwg
ZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAg
ICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIGFy
cmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtNTY1LDE1ICs1NjcsMTUgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBp
bmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAotdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
QmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJy
YXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKICAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaWYgaW5k
ZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQoIWFycmF5
LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGFycmF5
LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKKyAg
ICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAg
IGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTEyNzUsMjAgKzEyNzcsMjkgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVTdAogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHZv
aWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCAmcmVzdWx0KSkKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAr
IDEpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVy
Zmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IG5l
d1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJl
c3VsdCkgKyAxKSArIG5ld1NpemU7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5nbG9iYWxE
YXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7Cisg
ICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAogZG91Ymxl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFU
SU9OICgqU19ERkdPcGVyCiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERG
R19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19E
RkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJ
T04gKCpWX0RGR09wZXJhdGlvbl9FQVpKKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVl
KTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7CiB0eXBl
ZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMDYsOCArMTA2
LDEwIEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5cGVkZWYg
dm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9p
ZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9O
ICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsK
K3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZvaWQqLCBz
aXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMp
KEV4ZWNTdGF0ZSosIHNpemVfdCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNh
bGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21w
bGV4IHRvIEpJVC4KIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOwpAQCAtMTQwLDggKzE0Miw4IEBAIHZvaWQgREZHX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENl
bGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90
IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmlj
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKQEAgLTE4Nyw2ICsxODksOCBAQCBzaXpl
X3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwg
c2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFMOwogCiAv
LyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXll
ZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9t
IG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJv
dmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDEyICsxOTksMTIgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YgogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1
YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdlKCksIHJl
c3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0dGVyZmx5
QWRkcmVzcygpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBv
ZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5C
dXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFn
R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjU0LDEzICsyNTQs
MTAgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgICAgIAogICAgICAgICBz
dHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
KTsKICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQpAQCAtNDI3LDcgKzQyNCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhl
Y1N0YXQKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2Vsc2UKQEAgLTQ3Nyw3ICs0
NzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAg
ICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBy
ZXN1bHRHUFIpOwogI2Vsc2UKQEAgLTY4NSwxNyArNjgyLDE3IEBAIHN0YXRpYyB2b2lkIGVtaXRQ
dXRSZXBsYWNlU3R1YigKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNl
dEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkp
OwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpIHsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zm
c2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBz
dHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC04MzQsNyAr
ODMxLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXpl
b2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2Ny
YXRjaEdQUjMpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIz
KTsKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChz
dHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwogICAgICAgICAgICAgc3R1
YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVt
YWluaW5nKTsKQEAgLTg0OCw3ICs4NDUsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlv
blN0dWIoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBzdHViSml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAgc2NyYXRjaEdQUjFIYXNTdG9y
YWdlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTg1OCw4ICs4NTUsOCBAQCBzdGF0aWMgdm9pZCBlbWl0
UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hHUFIxSGFz
U3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3Jh
dGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0KICNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSB7CkBAIC04NjcsOSArODY0LDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdl
KQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKKyAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0
dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9m
ZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgICAgICAgICAgCkBA
IC0xMDI0LDYgKzEwMjEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVj
U3RhdAogICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxsb2MsIGFu
ZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFnZS4KKyAg
ICAgICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0gc3RydWN0
dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTI3OTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVj
dHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKLSAgICBKSVRDb21waWxl
cjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IG1faml0LmNvbnZl
cnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAg
SklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBt
X2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRXaXRoUGF0Y2ggPSBtX2ppdC5s
b2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxD
b21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBhY3RBZGRy
ZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFBheWxvYWRHUFIpOwogICAgIApAQCAtNTY1LDcgKzU2NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAogICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9h
ZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vz
cywgc2NyYXRjaEdQUik7CiAKLSAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwg
cHJvcGVydHlTdG9yYWdlTG9hZCA9IG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExh
YmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdTdG9yZVdp
dGhQYXRjaCA9IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlVGFnR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsMzIgcGF5bG9hZFN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2godmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KSk7CiAKQEAgLTI1NTQsNyArMjU1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCBy
ZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OiB7CisgICAgICAgIGNhc2Ug
SU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI1NjMsMTQgKzI1
NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5
IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgotICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwg
d2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IGl0J3Mgc29tZSBraW5kIG9mIGFycmF5LCBhdCB0
aGlzIHBvaW50LgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwpA
QCAtMjU4MiwxMiArMjU3NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MygpKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwog
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogCiAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NywxMyArMjU5MSw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAKLSAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFp
bmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tp
cCB0aGUgY2hlY2suCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCBpdCdzIHNvbWUga2lu
ZCBvZiBhcnJheSwgYXQgdGhpcyBwb2ludC4KICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAKICAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZXN1bHRUYWdSZWcpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1f
aml0LmJyYW5jaDMyKApAQCAtMjcxMiw4ICsyNzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsK
KyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CkBAIC0yNzQxLDggKzI3MzAsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9u
ZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFy
cmF5OjpKU0FycmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJy
YXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNB
Y2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNzU1LDkgKzI3NDQs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlIHdlIG1p
Z2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwotICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsKIAogICAg
ICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAtMjc2Nyw3
ICsyNzU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSkpOwogICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0g
QXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYgKCFpc0luQm91bmRz
QWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjg5NywxOCArMjg4Niwx
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0
aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1
c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZl
KSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0
aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIApAQCAtMjkzMywxOSArMjky
MiwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwogICAgICAgICBz
ZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHZhbHVlUGF5bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICBzZXRVbmRl
ZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7CiAgICAg
ICAgIApAQCAtMzU4NywxNCArMzU3NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6IHsKKyAgICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM5
NTQsNyArMzk0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlc05vdE1hdGNoID0gbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7
CiAKICAgICAgICAgLy8gRmFzdCBjYXNlCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZl
SW5mbywgb2Zmc2V0KSksIHJlc29sdmVJbmZvR1BSKTsKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NF
UlQpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9HUFIsIFRydXN0
ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTI3OTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNh
Y2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1
cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpD
b252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQu
Y29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRy
ZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0
R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFi
ZWwoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRC
eUlkKENvZGVPCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAgSklUQ29t
cGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQotICAgICAg
ICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgp
OwpAQCAtMjU4NCw4ICsyNTg0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEFy
cmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsK
KyAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0Lmdwcigp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGls
ZDMoKSk7CkBAIC0yNTk3LDI3ICsyNjE1LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2
ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2YgYXJyYXks
Ci0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OkpTQXJyYXkpCi0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBv
dXRPZkJvdW5kcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OkpTQXJyYXkpCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBob2xlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xl
KTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGhvbGUpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjcwMyw2ICsyNzEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkgbm90IGJl
IG5lY2Vzc2FyeSBmb3Igc29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZlIHRvCisg
ICAgICAgIC8vIGtlZXAgaXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtlbHkgdG8g
YmUgaW4gYSByZWdpc3RlciBhbnl3YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJtIGluIGxv
Y2tpbmcgaXQgaGVyZS4KICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBj
aGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgY2hpbGQyKTsKICAgICAgICAgCkBAIC0yNzEwLDExICsyNzIzLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAotICAgICAgICAgICAg
Ly8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9jYXRlIGEg
c2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKQEAgLTI3Mzgs
OCArMjc0OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
LSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgp
KSk7CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQogICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwpAQCAt
Mjc1Miw5ICsyNzYzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251
bVZhbHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0aW5nIHRv
IGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5lZWRVcGRh
dGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3Bl
cnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0
eVJlZyk7CiAKICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmsoJm1faml0
KTsKQEAgLTI3NjMsNyArMjc3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAotICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwo
CiAgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywKQEAgLTI5
MzIsMTcgKzI5NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgbV9q
aXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcikp
KTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yOTY4LDE4ICsyOTc5LDE4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3Rv
cmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxl
bmd0aEdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAgICAgICBt
X2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAg
ICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCkBAIC0zNTY1LDE0ICszNTc2LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY29tcGls
ZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2UgR2V0QnV0dGVyZmx5
OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIAog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzkxNSw3ICszOTI2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2VuZGlmCiAgICAgICAgIG1faml0Lm5lZzMy
KHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzb2x2
ZUluZm9HUFIsIHJlc29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5k
ZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoaW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihK
U1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOSArMzE1LDMw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5nOjpzX2lu
Zm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBkdXBsaWNh
dGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVpbmcKLSAg
ICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisgICAgY2FzZSBO
T05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdw
cigpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICAg
ICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBt
X2ppdC5icmFuY2g4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CkBAIC0zMDA2LDExICszMDE3LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFP
ZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRv
ci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CkBAIC0zMTI1LDEzICszMTMxLDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUu
YXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2Fz
ZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6IHsK
KyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRSZWcpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgICAgICAK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBAIC0zMjI3
LDYgKzMyMzIsMjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSYgbm9kZSkKIHsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZl
UHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBiYXNlR1BS
KTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0zMjQ4LDEzICszMjY3LDMxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAgICAgICAg
Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2Ny
YXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIHNpemVfdCBv
bGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBuZXdT
aXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKKyAgICBBU1NFUlQobmV3U2l6
ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgIGlmIChoYXNJbmRleGluZ0hl
YWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJl
YWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIoKSwgYmFz
ZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBzdG9y
YWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkBAIC0zMjY3LDkgKzMzMDQs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogICAgICAgICAKLSAgICBzaXplX3Qgb2xk
U2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICBzaXplX3QgbmV3U2l6
ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUg
PT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgQ29waWVkQWxsb2NhdG9yKiBjb3Bp
ZWRBbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxvY2F0b3Io
KTsKICAgICAgICAgCiAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIyKTsKQEAgLTMyODAsMTMgKzMzMTQsMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LmFkZFB0cihKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKICAg
ICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hH
UFIyLCBuZXdTaXplKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXplIC8gc2l6
ZW9mKEpTVmFsdWUpKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdl
LCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBv
ZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9m
KHZvaWQqKSkgewogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9s
ZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkp
LCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAg
IAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Niw5ICsxMTU2LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9u
X0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9T
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2JqZWN0LCBU
cnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQpAQCAtMTE2Niw2ICsxMTcxLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9s
ZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMTM3Myw3ICsxMzgzLDcgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJn
Myk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9F
T1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcy
LCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKQEAgLTE0MzgsNiArMTQ0OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9TIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHNpemVfdCBhcmcyKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZH
T3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihzaXplKSk7CkBAIC0xNjc2LDcgKzE3MDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1Bh
eWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwpA
QCAtMjE2NCw3ICsyMTg5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3Jh
Z2UgcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgQ2xhc3NUeXBl
OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9CiAKICAgICAv
LyBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRvIHNjcmF0Y2gs
IHNvIGxvbmcgYXMgeW91J3JlIGZpbmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgICAg
ICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNPdmVyc2l6
ZShzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNpemVCbG9ja0Zvcih2b2lk
KiBwdHIpOwogCi0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3Qs
IHZvaWQqKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2Nh
dGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2Nh
dGVPdmVyc2l6ZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxv
Y2F0ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdp
c3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRl
QmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwg
Ym9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0
ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVy
SUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNp
emVfdCwgUmVnaXN0ZXJJRCByZXN1bHQpOworICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUJhc2lj
U3RvcmFnZShzaXplX3QsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJRCByZXN1
bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxvY2F0ZUpTRmlu
YWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3Jh
Z2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQgdmFsdWVz
UmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBSZWdpc3Rl
cklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9k
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IENsYXNzVHlwZSwgYm9vbCBkZXN0cgogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoJkNsYXNz
VHlwZTo6c19pbmZvKSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkp
KTsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UgcG9p
bnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBDbGFz
c1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2Nh
dGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgdm9pZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmpl
Y3QsIGZhbHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdpc3RlcklE
IHJlc3VsdCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVf
dCBzaXplLCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KQogewog
ICAgIENvcGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5zdG9y
YWdlQWxsb2NhdG9yKCk7CiAKQEAgLTQ0MywzNyArNDQzLDMyIEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKICAgICBzdG9yZVB0cihyZXN1bHQsICZhbGxvY2F0b3It
Pm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbmVnUHRyKHJlc3VsdCk7CiAgICAgYWRkUHRyKEFi
c29sdXRlQWRkcmVzcygmYWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgcmVzdWx0KTsK
LSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOworICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoc2l6ZSAtIG9mZnNldEZyb21CYXNlKSwgcmVzdWx0KTsKIH0KIAogaW5saW5lIHZv
aWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNp
Z25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVz
dWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFnZSA9IEpT
QXJyYXk6OnN0b3JhZ2VTaXplKGluaXRpYWxMZW5ndGgpOworICAgIHNpemVfdCBpbml0aWFsU3Rv
cmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcihpbml0aWFsTGVuZ3RoKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFja2luZyBz
dG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAgICAgLy8gZG9l
c24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAgZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0KTsKKyAgICBlbWl0
QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRleGluZ0hlYWRl
ciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwgZm9yIHRoZSBh
cnJheS4KICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIGZhbHNlPihUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSks
IGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAgLy8gU3RvcmUgYWxsIHRoZSBuZWNlc3Nh
cnkgaW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQs
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZzZXQoKSkp
OwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5ndGgpLCBB
ZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZz
ZXQoKSkpOworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Moc3RvcmFn
ZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
aW5kZXhCaWFzT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0KCkpKTsKIAog
ICAgIC8vIFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgotICAgIHN0b3Jl
UHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSk7CisgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxsUmVzdWx0
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIAotICAgIC8vIFN0b3JlIHRoZSB2ZWN0
b3IgbGVuZ3RoIGFuZCBpbmRleCBiaWFzLgotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0
aCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
LSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5
OjppbmRleEJpYXNPZmZzZXQoKSkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc3BhcnNlIHZh
bHVlIG1hcC4KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKGNlbGxSZXN1
bHQsIEpTQXJyYXk6OnNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkpKTsKLQotICAgICAgICAvLyBTdG9y
ZSB0aGUgdmFsdWVzIHdlIGhhdmUuCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVl
c1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7CkBAIC00ODUs
MTYgKzQ4MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1bnMKICAg
ICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkg
KyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvLyBaZXJvIG91dCB0
aGUgcmVtYWluaW5nIHNsb3RzLgotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA8IGlu
aXRpYWxMZW5ndGg7IGkrKykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwotI2Vs
c2UKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNlbmRpZgotICAgIH0KIH0KIAog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OCw3ICsxNjY4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aQogdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
aW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaWYgKENv
cGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkpKSB7Cisg
ICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAs
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjg3LDcgKzE2ODcsNyBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFsbG9jYXRpb24g
d291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9wZXIgc3R1YiBj
YWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGludCBsZW5ndGgg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6
aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkKKyAgICBpZiAoQ29waWVk
U3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Igc3RvcmFn
ZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4gTWFya2Vk
U3BhY2UgZm9yIGNlbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMywxMCArMjEzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
SW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVn
VDEsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNl
ZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8v
IHRhZwogICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKQEAgLTI3Miwx
MSArMjcyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDEsIGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7
CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDEsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5
OjpzX2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MiwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRk
cmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVuY29uZGl0aW9u
YWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QzKTsKICAg
ICAKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAKQEAgLTI4OCwxMCArMjg4LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICAKICAgICBlbXB0eS5s
aW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBi
cmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYnJh
bmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhy
ZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgc3Rv
cmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
OwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAgIGVuZC5s
aW5rKHRoaXMpOwpAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgoKQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsKICAgICBhZGRTbG93
Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJv
cGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7CisgICAgQ29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgRGF0
YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDEgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRy
ZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMiwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCks
IHJlZ1QwKTsgLy8gcGF5bG9hZAogICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFi
ZWwyID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDIs
IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMSk7IC8vIHRhZwogICAgIApAQCAtNDA5
LDcgKzQwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAg
ICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKICAgICAKLSAgICBD
b252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSks
IHJlZ1QxKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0g
Y29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QxKTsKICAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEgPSBzdG9y
ZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDIsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0
QnlJZERlZmF1bHRPZmZzZXQpKTsgLy8gcGF5bG9hZAogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNl
bWVudExhYmVsMiA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywgQWRkcmVz
cyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAvLyB0YWcKICAgICAKQEAgLTQ0
Myw3ICs0NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0CiB2
b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgdmFsdWVQYXlsb2FkLCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KGNhY2hlZE9mZnNldCkpCi0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpLCBiYXNlKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwogICAgIGVtaXRTdG9yZShpbmRleFJlbGF0aXZl
VG9CYXNlKGNhY2hlZE9mZnNldCksIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIGJhc2UpOwogfQog
CkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVn
aXN0ZQogICAgIH0KICAgICAKICAgICBSZWdpc3RlcklEIHRlbXAgPSByZXN1bHRQYXlsb2FkOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkpLCB0ZW1wKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgdGVtcCk7CiAgICAgZW1pdExvYWQoaW5kZXhSZWxhdGl2ZVRvQmFzZShj
YWNoZWRPZmZzZXQpLCByZXN1bHRUYWcsIHJlc3VsdFBheWxvYWQsIHRlbXApOwogfQogCkBAIC00
NjksOSArNDY5LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNPYmplYwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoYmFzZS0+YWRkcmVzc09m
T3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHRUYWcpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlc3Vs
dFRhZywgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSksIHJlc3VsdFBheWxvYWQpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlc3VsdFRhZywg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVzdWx0VGFnKTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0
VGFnKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZXN1bHRUYWcsIG9mZnNldEluQnV0dGVyZmx5KGNh
Y2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQpOworICAgIGxv
YWQzMihBZGRyZXNzKHJlc3VsdFRhZywgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02MjAsMTEgKzYyMCwxMSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQogICAgIHN0b3JlUHRyKHJlZ1QyLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJheVByb2ZpbGUo
c3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsK
ICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
JkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaDgoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAgICAgCiAgICAgLy8gQ2hlY2tz
IG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgCiAgICAgSnVtcCBmYWlsdXJlQ2Fz
ZXMyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwogICAg
IG1vdmUocmVnVDIsIHJlZ1QwKTsKQEAgLTEwMjksNyArMTAyOSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2Rl
ID09IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSksIGJhc2UpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKQEAgLTEw
NDEsNyArMTA0MSw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUK
ICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwog
I2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZP
dXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwogICAgICAgICBuZWczMihvZmZz
ZXQpOwogICAgIH0KICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpICsgKGlubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFBheWxv
YWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTAgKzExNCwxMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdl
KSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIAogICAgIGlmIChmaW5hbE9iamVjdE1v
ZGUgPT0gTWF5QmVGaW5hbCkgewogICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVz
c1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOwotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsK
ICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5rKHRoaXMp
OwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJl
Z2lzdGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgICAg
ICBuZWczMihvZmZzZXQpOwogICAgIH0KICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9m
ZnNldCk7CkBAIC0yMzksMTAgKzIzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJl
Z1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RT
ZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJy
YXlTdG9yYWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKQEAg
LTI1MiwxMCArMjUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1
ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhzdG9yZVJl
c3VsdCwgdGhpcyk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsK
IAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3Ro
T2Zmc2V0KCkpKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKICAgICBqdW1w
KCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQg
SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBQYXRjaGFibGVKdW1wIHN0
cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJl
LCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1
bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogCi0gICAg
Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9
IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QwLCBwYXRj
aEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVzdWx0KHRo
aXMpOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0
cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsK
IAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0
aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFn
ZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVudExhYmVs
ID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBw
YXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFV
RU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwpAQCAtNTA5LDggKzUwOSw4IEBAIHZvaWQgSklUOjpjb21w
aWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9m
KEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFz
ZSk7CisgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICog
b2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21waWxlIGEgbG9h
ZCBmcm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2Uu
CkBAIC01MjEsOCArNTIxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVn
aXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHQpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShjYWNo
ZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQpCkBAIC01MzIsOCArNTMyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIo
YmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpICog
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAgIGxvYWRQdHIoYmFz
ZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRP
ZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBib29sIGRpcmVjdCkKQEAgLTY2MCwxMSArNjYwLDExIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAg
c3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmlsZShzdHViSW5m
by0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlm
Ci0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJh
eTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEg
LSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlZ1Qy
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFuY2gzMihM
ZXNzVGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7CiAKICAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTcsOCArMTUxNyw4IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IKICAgICBBU1NFUlQoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFzZVZhbHVl
KTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc3RhY2tGcmFtZS5nbG9iYWxEYXRh
OwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAgYmFzZS0+c2V0T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0dGVyZmx5KGdsb2JhbERhdGEs
IGJ1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHJldHVybiBiYXNlOwogfQpAQCAtMjQz
NSw3ICsyNDM1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwog
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLQor
ICAgIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0
cmluZygpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuYXNDZWxs
KCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlwdCktPnZh
bHVlKGNhbGxGcmFtZSkpKSB7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CkBA
IC0yNTI4LDEyICsyNTI4LDEyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9i
eV92YWwKIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAg
IHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJh
eShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShi
YXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAg
ICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7Cisg
ICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2JqZWN0LT5j
YW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1
aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwgdmFsdWUs
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJhbWUsIGks
IHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBpLCB2
YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgIH0gZWxz
ZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKQEAgLTMzODgsNyArMzM4OCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXIKICAgICAgICAgYWNjZXNzb3ItPnNldEdl
dHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QoZ2V0dGVyKSk7CiAgICAgaWYg
KCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgYXNPYmplY3Qoc2V0dGVyKSk7Ci0gICAgYmFzZU9iai0+cHV0
RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuYXJnc1sx
XS5pZGVudGlmaWVyKCksIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CisgICAgYmFzZU9iai0+cHV0RGly
ZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBh
Y2Nlc3NvciwgQWNjZXNzb3IpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90
aHJvd19yZWZlcmVuY2VfZXJyb3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
OCw3ICs4NTgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAg
ICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKICAgICBMTElOVF9PUCgxKSA9IHJlc3VsdDsKLQor
ICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGJhc2VW
YWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTg3Nyw3ICs4
NzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAg
ICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwY1swXS51
Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfZ2V0X2J5X2lkX291dF9vZl9saW5l
KTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0
b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC05MzksNyArOTM5LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9i
eV9pZAogICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkg
KyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICBwY1s2XS51LnN0cnVjdHVyZS5zZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICBn
bG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpOwpAQCAtOTY3LDcgKzk2Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5k
ID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6
OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAgICAgICAg
ICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHBj
WzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMTA0NiwxMiArMTA0NiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X2J5X3ZhCiAgICAgCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkp
IHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAgICAgICBp
ZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpzQXJyYXkg
PSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2FuU2V0SW5k
ZXgoaSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0YSwgaSwg
dmFsdWUpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICAgICAgaWYg
KG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAgICAgIG9iamVjdC0+
c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGV4ZWMsIGksIHZh
bHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGksIHZhbHVl
LCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAgTExJTlRf
RU5EKCk7CiAgICAgICAgIH0KICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZXhlYywgaSwg
dmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CkBAIC0xMTI4LDcgKzEx
MjgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlCiAgICAgaWYg
KCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihnbG9i
YWxEYXRhLCBhc09iamVjdChzZXR0ZXIpKTsKICAgICBiYXNlT2JqLT5wdXREaXJlY3RBY2Nlc3Nv
cigKLSAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgZXhlYywKICAgICAgICAgZXhlYy0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKSwKICAgICAgICAgYWNjZXNzb3Is
IEFjY2Vzc29yKTsKICAgICBMTElOVF9FTkQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQ3LDIxICs5NDcsMjEgQEAgX2xs
aW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93
bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQp
CiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9y
YWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAgbG9hZHAg
SlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5k
U3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAy
KSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBs
b2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9m
IEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFn
CisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAq
IDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGJp
bHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCi0gICAg
bG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRT
dG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQKICAgICBq
bXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0
b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdl
CisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFn
ZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RBbmRTdG9y
YWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZwotICAg
IGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxvYWRpIFRh
Z09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhp
bmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCAtIHNp
emVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0s
IHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBAIC0xMjg3
LDEyICsxMjg3LDkgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgaWYgVkFMVUVfUFJPRklM
RVIKICAgICAgICAgc3RvcmVwIHQzLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVb
dDJdCiAgICAgZW5kCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCi0gICAgbG9hZHAgQ29k
ZUJsb2NrOjptX2dsb2JhbERhdGFbdDJdLCB0MgotICAgIGxvYWRwIEpTR2xvYmFsRGF0YTo6anNB
cnJheUNsYXNzSW5mb1t0Ml0sIHQyCi0gICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNzSW5mb1t0
M10sIHQyLCAub3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3JhZ2VbdDBd
LCB0MwotICAgIGJpYWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5
VmFsU2xvdworICAgIGJ0cHogU3RydWN0dXJlOjptX2luZGV4aW5nVHlwZVt0M10sIEhhc0FycmF5
U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5n
SGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxvYWRpIDRb
UENdLCB0MAogICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZzZXRbdDMs
IHQxLCA4XSwgdDIKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9m
ZnNldFt0MywgdDEsIDhdLCB0MQpAQCAtMTM3MywxMiArMTM3MCw5IEBAIF9sbGludF9vcF9wdXRf
YnlfdmFsOgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCiAgICAgICAgIHN0b3JlcCB0MywgQXJyYXlQ
cm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlW3QwXQogICAgIGVuZAotICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QwXSwgdDAK
LSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDBdLCB0MAotICAgIGJw
bmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAg
YmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0g
ICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QxXSwgdDAKKyAgICBidHB6IFN0cnVjdHVyZTo6
bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAu
b3BQdXRCeVZhbFNsb3cKICAgICBiaWVxIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZz
ZXRbdDAsIHQyLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaSAxMltQQ10sIHQzCkBAIC0xMzkwLDkgKzEzODQsOSBA
QCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBhZGRpIDEs
IEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIEFycmF5
U3RvcmFnZTo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmliIHQy
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAgc3Rv
cmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KICAg
ICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwNiwyMCArODA2
LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3Rv
cmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0
QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdwIHByb3Bl
cnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFn
ZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRB
c1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmpl
Y3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxvYWRQ
cm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3Rv
cmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVTdG9yYWdl
Q2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3Jh
Z2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVj
dDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBu
ZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFzSW50LCBw
cm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAg
SlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxp
bmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJbmRl
eGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRB
c0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cp
CkBAIC0xMTMyLDEyICsxMTMyLDkgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgaWYgVkFM
VUVfUFJPRklMRVIKICAgICAgICAgc3RvcmVwIHQzLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5T
dHJ1Y3R1cmVbdDJdCiAgICAgZW5kCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCi0gICAg
bG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDJdLCB0MgotICAgIGxvYWRwIEpTR2xvYmFs
RGF0YTo6anNBcnJheUNsYXNzSW5mb1t0Ml0sIHQyCi0gICAgYnBuZXEgU3RydWN0dXJlOjptX2Ns
YXNzSW5mb1t0M10sIHQyLCAub3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0
b3JhZ2VbdDBdLCB0MwotICAgIGJpYWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0s
IC5vcEdldEJ5VmFsU2xvdworICAgIGJ0YnogU3RydWN0dXJlOjptX2luZGV4aW5nVHlwZVt0M10s
IEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciAr
IEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwogICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjptX3ZlY3Rv
clt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAtMTIxNywx
MiArMTIxNCw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGlmIFZBTFVFX1BST0ZJTEVS
CiAgICAgICAgIHN0b3JlcCB0MywgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlW3Qw
XQogICAgIGVuZAotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVC
bG9jazo6bV9nbG9iYWxEYXRhW3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJy
YXlDbGFzc0luZm9bdDBdLCB0MAotICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNd
LCB0MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVjdG9yTGVu
Z3RoW3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3Qx
XSwgdDAKKyAgICBidGJ6IFN0cnVjdHVyZTo6bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNBcnJheVN0
b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0
MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6IEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9wUHV0QnlW
YWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEyMzMsOSAr
MTIyNyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5OgogICAg
IGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAgIGJpYiB0
MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQKKyAg
ICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0MiwgdDEK
LSAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBdCisgICAgc3RvcmVpIHQx
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3Ro
W3QwXQogICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFsU2xvdzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
MTEgQEAgZWxzZQogICAgIGNvbnN0IFBheWxvYWRPZmZzZXQgPSAwCiBlbmQKIAorIyBDb25zdGFu
dCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgorY29uc3QgSXNBcnJheSA9IDEKK2Nv
bnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2NvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQorCiAjIFR5
cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKIGNvbnN0IE9iamVjdFR5cGUgPSAx
MwpAQCAtMzQxLDcgKzM0Niw3IEBAIG1hY3JvIGFsbG9jYXRlQmFzaWNKU09iamVjdChzaXplQ2xh
c3NJbmQKICAgICAgICAgbG9hZHAgY2xhc3NJbmZvT2Zmc2V0W3NjcmF0Y2gxXSwgc2NyYXRjaDIK
ICAgICAgICAgc3RvcmVwIHNjcmF0Y2gyLCBbcmVzdWx0XQogICAgICAgICBzdG9yZXAgc3RydWN0
dXJlLCBKU0NlbGw6Om1fc3RydWN0dXJlW3Jlc3VsdF0KLSAgICAgICAgc3RvcmVwIDAsIEpTT2Jq
ZWN0OjptX291dE9mTGluZVN0b3JhZ2VbcmVzdWx0XQorICAgICAgICBzdG9yZXAgMCwgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0KICAgICBlbmQKIGVuZAogCkBAIC01MTYsNyArNTIxLDcg
QEAgbWFjcm8gd2l0aElubGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eQogZW5kCiAKIG1hY3Jv
IHdpdGhPdXRPZkxpbmVTdG9yYWdlKG9iamVjdCwgcHJvcGVydHlTdG9yYWdlLCBjb250aW51YXRp
b24pCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RdLCBwcm9w
ZXJ0eVN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0XSwgcHJv
cGVydHlTdG9yYWdlCiAgICAgIyBJbmRpY2F0ZSB0aGF0IHRoZSBwcm9wZXJ0eVN0b3JhZ2UgcmVn
aXN0ZXIgbm93IHBvaW50cyB0byB0aGUKICAgICAjIHByb3BlcnR5IHN0b3JhZ2UsIGFuZCB0aGF0
IHRoZSBvYmplY3QgcmVnaXN0ZXIgbWF5IGJlIHJldXNlZAogICAgICMgaWYgdGhlIG9iamVjdCBw
b2ludGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1
LDcgKzI1NSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAg
IHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGkpOwogfQogCiBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIApAQCAtMzA4LDcgKzMw
OCw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamUKICAgICAgICAg
Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB5ZXQgcHJlc2VudCBvbiB0aGUgb2JqZWN0LCBhbmQg
aXMgbm90IHlldCBtYXJrZWQgYXMgZGVsZXRlZCwgdGhlbiBhZGQgaXQgbm93LgogICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgaWYgKCghdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFy
Z3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkgJiYgIUpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KSkKLSAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSwgMCk7CisgICAgICAg
ICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlz
T2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSk7CiAgICAgICAgIGlmICghQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRo
cm93KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEy
NzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJyYXlDb25z
dHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAj
aW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVmaW5lIEFy
cmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLworLy8gUHJvcGVy
dGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhyZWUgbG9j
YXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KKy8vICAg
KiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBlbnRyaWVz
LgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgd2l0aCBp
ZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4gdW5zaWduZWQg
aW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FSUkFZX0lO
REVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0gdGhlIHZh
bHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdlcikgYXJlIG5v
dCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBKU09i
amVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51bWVyaWMg
aWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwKKy8vIHdo
ZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQgd2lsbCBi
ZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNwYXJzZSBt
YXAuICBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUgaGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisv
LyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAoaSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgp
IHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAg
dW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VNb2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3Bl
cnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAqIFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lO
REVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRo
ZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFy
c2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVuc2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3
b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAoYSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBh
dCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVz
IHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICogV2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9J
TkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3Rv
cmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJheS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVt
IHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0
byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8gcmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGV4aW5n
SGVhZGVyOjptYXhpbXVtTGVuZ3RoKSkKKworLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFj
cm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8v
IGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3
MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1B
WF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisv
LyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVu
IHRob3VnaCBpdCdzIGFuIGludGVnZXIuCisjZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZG
RkZFVQorCisvLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJl
ciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0
IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXko
MTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91
bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZp
cnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgorI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQor
CisvLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2Ug
YSBzcGFyc2UgbWFwLgorLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3Jl
YXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2
ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4g
dGhhdCwgd2UgdXNlIGEgbWFwLgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0
aXBsaWVyID0gODsKKworaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKK3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0g
bnVtVmFsdWVzOworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JB
cnJheSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRl
eGluZ0hlYWRlciByZXN1bHQ7CisgICAgcmVzdWx0LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
ICAgIHJlc3VsdC5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFkZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJy
YXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBpbmRleGluZ0hlYWRlckZvckFycmF5
KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFycmF5UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdCdWlsZGVyLmgiCkBAIC0xMTQs
OSArMTE2LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlwZTo6c19pbmZvID0KIEBl
bmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShl
eGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkp
IEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAg
IHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJv
dG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAotQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90
eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorQXJy
YXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICA6IEpTQXJy
YXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogewog
fQogCkBAIC0yOTIsOCArMzAyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aDsgaysrKSB7CiAg
ICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAgICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4
KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4KGspOworICAgICAg
ICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQorICAgICAgICAgICAgZWxlbWVu
dCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVjLCBrKTsKICAgICAgICAgCkBAIC00MTMsMTAg
KzQyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKIAogICAgICAgICBmb3IgKDsg
ayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChr
KSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXkt
PmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldElu
ZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVs
bCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoZWxlbWVudC50b1dURlN0
cmluZ0lubGluZShleGVjKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC02MjgsNyArNjM4LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKIAotICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19p
bmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNwYXJzZU1vZGUoKSkgeworICAgIGlmICh0aGlz
T2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmop
LT5pblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChpc051bWVyaWNDb21wYXJl
RnVuY3Rpb24oZXhlYywgY2FsbFR5cGUsIGNhbGxEYXRhKSkKICAgICAgICAgICAgIGFzQXJyYXko
dGhpc09iaiktPnNvcnROdW1lcmljKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEp
OwogICAgICAgICBlbHNlIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZU5vbmUpCkBAIC03ODgsOSAr
Nzk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwg
Y2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdl
dEluZGV4KGspKQorICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGsp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXkt
PmdldEluZGV4KGspOworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4UXVp
Y2tseShrKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwogICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCB2KTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwpAQCAtODQ2LDExICs4NTYsMTEgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2Fs
bChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdl
dEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4
UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1
bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApAQCAtOTA5LDExICs5MTksMTEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVj
LCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4
KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2ts
eShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC05NjUsMTEgKzk3NSwxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
YXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYs
IDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7
ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGsp
KSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRU
aGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFy
cmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAs
IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3Vt
ZW50KDIsIHRoaXNPYmopOwogCkBAIC0xMDE3LDExICsxMDI3LDExIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0Fy
cmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7
CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytr
KSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNh
Y2hlZENhbGwuY2FsbCgpOwpAQCAtMTA3NSw4ICsxMDg1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAyKQogICAgICAgICBydiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5
ICYmIGFycmF5LT5jYW5HZXRJbmRleCgwKSl7Ci0gICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4
KDApOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoMCkp
IHsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KDApOwogICAgICAgICBpID0g
MTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
QEAgLTEwOTcsOCArMTEwNyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcnYpOwogICAgICAgICAgICAgSlNW
YWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VMWShhcnJheS0+Y2FuR2V0SW5kZXgoaSkpKQot
ICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICBpZiAo
TElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaSkpKQorICAgICAgICAgICAgICAgIHYg
PSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51
bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJy
YXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKXsKLSAgICAgICAgcnYgPSBhcnJh
eS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSkgeworICAgICAgICBydiA9IGFycmF5LT5nZXRJ
bmRleFF1aWNrbHkobGVuZ3RoIC0gMSk7CiAgICAgICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAg
dW5zaWduZWQgaWR4ID0gbGVuZ3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDAsIHJ2KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlk
eCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5
KGlkeCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1
bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBhcnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHko
aWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlk
eCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAg
ICAgICAgICBydiA9IGNhY2hlZENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxNyArMjgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJh
eVByb3RvdHlwZSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBBcnJh
eVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgICAgICBBcnJheVBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAg
cHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMg
QXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBcnJheVByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gcHJvdG90eXBlOwotICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
QEAgLTQ3LDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVN0b3Jh
Z2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisj
ZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisj
aW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNs
dWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEg
dmFsdWVzIG9mIGFuIGFycmF5LiBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRh
aW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBieSBwb2ludGluZyB0byBtX3ZlY3Rvci4gVG8g
YWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9y
YWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuIEl0IGlzIGltcG9ydGFudCB0byBu
b3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJlZm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQg
CisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uIFRoZSBhY3R1
YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0
b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9mKEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9y
YWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToK
KyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2Fu
IG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgQnV0dGVyZmx5LgorcHVibGljOgorICAgIAor
ICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9yYWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0
YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7
IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlTdG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4o
dGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJ
bmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBm
aWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNM
ZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGlu
Z0hlYWRlcigpLT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rv
ckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9Cisg
ICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVy
KCktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOyB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoY29uc3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIG1fc3BhcnNlTWFwLmNvcHlGcm9tKG90aGVyLm1fc3BhcnNlTWFwKTsKKyAg
ICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2luZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1
ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0
aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gb3Ro
ZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBi
b29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYg
bV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVy
PFNwYXJzZUFycmF5VmFsdWVNYXA+IG1fc3BhcnNlTWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhC
aWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVzSW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBiZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50
IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWlu
dHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7CisjZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZz
ZXQoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2luZGV4Qmlhcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IHNwYXJzZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fc3BhcnNlTWFwKTsgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9y
YWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHku
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0
ZXJmbHlfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xhc3MgU2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJy
YXlTdG9yYWdlOworCitjbGFzcyBCdXR0ZXJmbHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFu
dGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA/IGhhc0luZGV4aW5nSGVhZGVyIDog
dHJ1ZSk7CisgICAgICAgIEFTU0VSVChzaXplb2YoRW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJ
bmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlD
YXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgKGhhc0luZGV4aW5nSGVhZGVyID8g
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA6IDApICsgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZseSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRK
U1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSArIHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkg
eyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRP
ZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVy
biBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0
b3JMZW5ndGgoKTsgfQorICAgIAorICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEm
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6
ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhp
bmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNv
bnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3Rv
cmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnByb3BlcnR5U3RvcmFnZSgpOyB9Cisg
ICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4g
aW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVy
biBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdlPigpOyB9CisgICAgCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgc3RhdGljIGludCBpbmRl
eE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhp
bmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNp
dHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQqIGJhc2UoU3RydWN0dXJlKik7CisgICAgCisg
ICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRpb24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFs
bG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hhbmdlIGFueQorICAgIC8vIG9mIHRoZSBtZXRh
LWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFsbG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhh
dCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMgaXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5v
dCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwgcG9zc2libGUgYWxsb2NhdGlvbgorICAgIC8v
IG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUgYXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0
ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAgLy8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlB
bGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xv
YmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3Bl
cnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90
IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBC
dXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkq
IGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9s
ZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2Vy
dHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSosIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAg
QnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVy
Zmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3UHJl
Q2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3Vt
ZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFz
IGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiwg
c2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiwg
c2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorI2RlZmlu
ZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgor
I2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9k
cy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7
CisgICAgdm9pZCogdGVtcDsKKyAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
c2l6ZSwgJnRlbXApKQorICAgICAgICBDUkFTSCgpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
ZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGlu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxE
YXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCisg
ICAgICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJl
dHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdI
ZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IGZyb21CYXNlKAorICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90
YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0
ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlDYXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNp
dHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gY3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAg
ICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5ld1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgbWVtY3B5KAorICAg
ICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAg
ICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICB0
b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFj
aXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3Bl
cnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2Fw
YWNpdHkoc3RydWN0dXJlKSwgb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhp
bmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5
Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpCit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0
eVN0b3JhZ2UoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9wZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5l
IEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJU
X1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRT
dHJ1Y3R1cmUpKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdI
ZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkp
OworICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHNp
emVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5n
SGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc2l6ZV90IG5ld1Np
emUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVT
dG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdTaXplKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAsIHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gZ3Jvd0FycmF5UmlnaHQoCisgICAgICAg
IGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNh
cGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRp
YWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBuZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQg
aWYgd2UgdXNlZCB0aGUgcHJvcGVydHkgc2l6ZSwKKyAgICAvLyBub3QgdGhlIGNhcGFjaXR5Lgor
ICAgIHZvaWQqIHRvID0gcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNp
dHk7CisgICAgdm9pZCogZnJvbSA9IHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0
eTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWluKAorICAgICAgICB0b3RhbFNpemUoMCwgcHJv
cGVydHlDYXBhY2l0eSwgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKSwKKyAgICAgICAgdG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hh
c0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIG1l
bWNweSh0bywgZnJvbSwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJ
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVy
ID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAg
ICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAgIGdsb2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIsCisgICAgICAgIGluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFj
aXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51
bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7
CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdy
aXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGly
ZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28gd2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hl
Y2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisgICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50
IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ugc28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92
ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQg
bm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysgY29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUg
bWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRoZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0
byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAvLyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0
byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRoZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UK
KyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZhcmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFw
LWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVyIGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5
LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAg
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4
aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+
YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJPZlNsb3RzKQoreworICAgIEFTU0VSVCho
YXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgdW5zaWdu
ZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAg
ICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5zaGlmdCgpLCBhYm92ZS4KKyAgICBtZW1tb3Zl
KAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJP
ZlNsb3RzLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisg
ICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlTdG9yYWdlKCkgKyBudW1iZXJPZlNs
b3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
QnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duUHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9u
UHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBHZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7
CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7
CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRl
ZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBc
CisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6
OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpoYXNJbnN0YW5jZSwgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcl9oCisjZGVmaW5l
IEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5
OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgU3RydWN0dXJlOworc3RydWN0
IEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhpbmdIZWFkZXIgeworcHVibGljOgorICAgIC8v
IERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZlY3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNp
emVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGVyZSBpcyBubyByaXNr
IG9mIG92ZXJmbG93LgorICAgIGVudW0geyBtYXhpbXVtTGVuZ3RoID0gMHgxMDAwMDAwMCB9Owor
ICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRlcikpOyB9Cisg
ICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV9wdWJsaWNMZW5ndGgpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV92ZWN0b3JMZW5ndGgpOyB9CisgICAgCisgICAgSW5k
ZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fcHVibGljTGVuZ3RoKDApCisgICAgICAgICwgbV92
ZWN0b3JMZW5ndGgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IHZlY3Rvckxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yTGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBz
ZXRWZWN0b3JMZW5ndGgodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxl
bmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgbV92ZWN0b3JMZW5ndGggPSBsZW5ndGg7
CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG1fcHVi
bGljTGVuZ3RoOyB9CisgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyBtX3B1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdI
ZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20oY29uc3QgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFy
cmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3Jh
Z2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4o
dGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3Rv
cmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25z
dFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIEFycmF5U3RvcmFnZSog
YXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEFy
cmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5
Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qg
c3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQg
b24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRlci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHko
U3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVj
dHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90IG1fcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmlu
ZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpT
QXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGgg
KGFycmF5Lmxlbmd0aCkuCisgICAgdWludDMyX3QgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5n
dGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRo
ZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgorfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAi
SW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5k
ZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFz
QXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNk
ZWZpbmUgSW5kZXhpbmdUeXBlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhf
dCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZvciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBj
YXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAg
ICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAg
ICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0
b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3Mg
eW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFk
QXJyYXlTdG9yYWdlICAgICAgICAgID0gMTY7IC8vIE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlk
IGhhdmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUgcGFzdC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxl
IGFycmF5IHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAg
ICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFy
cmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJyYXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7
CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAgICAgPSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9z
c2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIoSW5kZXhpbmdUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBI
YXNBcnJheVN0b3JhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIElu
ZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhCiAgICAgICAgIGNh
bGxGcmFtZS0+cmVnaXN0ZXJzKCksCiAgICAgICAgIGNhbGxGcmFtZS0+c2NvcGUoKQogICAgICkK
LSAgICAsIG1fcmVnaXN0ZXJBcnJheShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgMCkK
KyAgICAsIG1fcmVnaXN0ZXJBcnJheSgwKQogICAgICwgbV9udW1DYXB0dXJlZEFyZ3MobWF4KGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBmdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNv
dW50KCkpKQogICAgICwgbV9udW1DYXB0dXJlZFZhcnMoZnVuY3Rpb25FeGVjdXRhYmxlLT5jYXB0
dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1faXNUb3JuT2ZmKGZhbHNlKQpAQCAtNzIsMTIg
KzcyLDEyIEBAIHZvaWQgSlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgLy8gTm8gbmVl
ZCB0byBtYXJrIG91ciByZWdpc3RlcnMgaWYgdGhleSdyZSBzdGlsbCBpbiB0aGUgUmVnaXN0ZXJG
aWxlLgotICAgIFByb3BlcnR5U3RvcmFnZSByZWdpc3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9y
ZWdpc3RlckFycmF5LmdldCgpOworICAgIFByb3BlcnR5U3RvcmFnZSByZWdpc3RlckFycmF5ID0g
dGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5OwogICAgIGlmICghcmVnaXN0ZXJBcnJheSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKGJpdHdpc2VfY2FzdDx2
b2lkKio+KCZyZWdpc3RlckFycmF5KSwgdGhpc09iamVjdC0+cmVnaXN0ZXJBcnJheVNpemVJbkJ5
dGVzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlZ2lzdGVyQXJyYXkpLCB0aGlzT2Jq
ZWN0LT5yZWdpc3RlckFycmF5U2l6ZSgpKTsKLSAgICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJy
YXkuc2V0KHJlZ2lzdGVyQXJyYXksIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOworICAgIHRo
aXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgdGhpc09iamVj
dC0+bV9yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5ICsgdGhpc09iamVjdC0+cmVnaXN0ZXJPZmZz
ZXQoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYXJndW1lbnRzIG9iamVjdCwgc2luY2UgaXQgcG9p
bnRzIGF0IG91ciBidWZmZXIuCkBAIC0xMzYsNyArMTM2LDcgQEAgaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQWN0
aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+KG9iamVjdCk7CiAKQEAgLTE1MSw4ICsxNTEs
OCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9Ci0gICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVj
dCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMKKyAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBp
bmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzRHluYW1pY1Njb3Bl
KGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTk1LDcgKzk1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZSgpOwog
ICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCk7CiAKLSAgICAgICAgU3Rv
cmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lz
dGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91
dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIG1fcmVnaXN0
ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZh
cmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZp
bGUuCiAgICAgICAgIGludCBtX251bUNhcHR1cmVkQXJnczsKICAgICAgICAgaW50IG1fbnVtQ2Fw
dHVyZWRWYXJzIDogMzA7CiAgICAgICAgIGJvb2wgbV9pc1Rvcm5PZmYgOiAxOwpAQCAtMTY0LDcg
KzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8
IHRvOyArK2kpCiAgICAgICAgICAgICByZWdpc3RlcnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMs
IG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKIAotICAgICAgICBtX3JlZ2lzdGVyQXJyYXkuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHJlZ2lzdGVyQXJyYXkpOworICAgICAgICBtX3JlZ2lzdGVyQXJyYXkg
PSByZWdpc3RlckFycmF5OwogICAgICAgICBtX3JlZ2lzdGVycyA9IHJlZ2lzdGVyczsKICAgICAg
ICAgbV9pc1Rvcm5PZmYgPSB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC0yNCwx
MyArMjQsMTcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAKICNpbmNsdWRlICJBcnJheVByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1
dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2lu
Y2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTQ1LDQ4MCArNDksMjMgQEAgbmFtZXNw
YWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hB
U19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkK
LS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkgb2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9u
ZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICogVGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVy
dHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9m
IGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVydGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50
aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBh
cyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVyZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFu
ICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZpY2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJv
cGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUgYXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBp
bnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJyYXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9y
ZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3
aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50
ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FSUkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGlu
ZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRoZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBv
ciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRo
ZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwotLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJT
RV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZl
Y3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2gg
Y2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2
YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Ig
b3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAg
ICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWlu
ZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikg
b2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NU
T1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxs
IGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUg
ZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0
aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFn
ZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3Rv
cmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0
aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZV
ICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXpl
b2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUg
bWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcK
LS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0v
NTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5l
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEp
Ci0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBl
dmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0jZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZG
RkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9WRUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51
bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0
aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJy
YXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1JfTEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIg
Ym91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhl
IGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgotI2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0
VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1
c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBhcnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMg
Z3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2Ug
YSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMgMS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRo
YW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlN
dWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJy
YXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFjayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBh
cnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1
cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUg
MC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1Jf
R1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFS
U0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFs
dWVzOwotfQotCi1zdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93
RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIGlmICh0aHJvd0V4Y2VwdGlv
bikKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKG1lc3NhZ2UpKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQot
aW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlw
ZSkKK0J1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01v
ZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewot
fQotCi0jZW5kaWYKLQotdm9pZCBKU0FycmF5OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQot
ICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBCQVNFX1ZFQ1RPUl9MRU47Ci0gICAg
dW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxl
bmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJy
YXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1f
c3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBt
X3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlKAorICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRl
cigpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGlu
aXRpYWxMZW5ndGgpOworICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCgwKTsKKyAgICBzdG9y
YWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsK
KyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKICNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZh
bHNlOworICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgc3RvcmFn
ZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CiAjZW5kaWYKLQotICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSogSlNBcnJheTo6dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRo
YW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVjdG9yLgotICAgIGlmIChpbml0aWFsTGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNp
Z25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gbWF4KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9S
X0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5p
dGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAm
bmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3Rh
dGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2Fs
bG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExl
bmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9z
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKLQotI2lmIENIRUNL
X0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgg
PSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBj
YWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5Ojpm
aW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0
cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAgdGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJz
ZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBT
cGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
anNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVu
dHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChj
YXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJh
eSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkp
ICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwot
ICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNT
dGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7
Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
LQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMg
YWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQg
dGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRl
bnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVt
b3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5z
aWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0g
ICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlm
IChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNW
YWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6OmdldCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5p
c0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVjdCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
YWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAgICBpZiAoIXNldHRlcikgewotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0
YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1
ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFy
Z3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCi17Ci0gICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChh
cnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAg
ICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25l
IC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8g
ZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAg
IH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAwOwotICAgIGVudHJ5LnNldChleGVjLT5nbG9i
YWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2
b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0g
ICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAg
ICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgewotICAgICAgICBzbG90LnNl
dFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBn
ZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVy
KSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3Bh
cnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QK
LXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMp
OwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6
OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwotCi0gICAgaWYgKExJS0VMWSghcmVzdWx0Lmlz
R2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3Qq
IGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3VsdCktPmdldHRlcigpOwotICAgIGlmICghZ2V0
dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRD
YWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5s
aW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0K
LWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9y
IChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwotfQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRl
U3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVl
TWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZp
bmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNw
YXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3BhcnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VW
YWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7
Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRh
KTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFw
LT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9k
ZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xl
bmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVu
dHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAg
ICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgot
ICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRv
ci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJy
YXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0gICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3Rv
cmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3
U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0g
MDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3Jp
cHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlw
dG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewotICAgICAg
ICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxz
ZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQotICAgICAgICAgICAg
ZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7
Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
IHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9y
LmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVy
T2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0
KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRv
ci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRl
ck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVj
dCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNy
ZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRlcikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVy
KQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNl
dHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVy
aWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVm
aW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0g
MHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZh
c3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFy
cmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0
aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFs
c2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlz
dHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0
cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1
c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9k
ZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwg
dGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5k
ZXhTaG91bGROb3RUaHJvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnRlckRpY3Rpb25hcnlN
b2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgfQotCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBBU1NFUlQobWFwKTsKLQotICAgIC8vIDEu
IExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgotICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7
Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tF
eHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KLSAgICAvLyAzLiBJZiBjdXJyZW50
IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWplY3QuCi0gICAg
Ly8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhl
bgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJs
ZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8g
ZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9y
IElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEg
cHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBvZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0s
IFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmli
dXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1
ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUg
b2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBk
ZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIuIEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nl
c3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBjcmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3Bl
cnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2JqZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRd
XSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBh
cmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5
IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8gaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVl
LgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVlLgotCi0gICAgICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJbk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmll
cihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnRE
ZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5OwotICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVm
YXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3Jp
cHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0
aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBm
aWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkg
ZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZl
cnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBm
aWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0
aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwotICAgIGVudHJ5SW5N
YXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3Jp
cHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2Ug
dGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAvLyA3LmEu
IFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgot
ICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRv
ci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9m
IHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYg
dGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51
bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdh
dGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJl
c2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVz
YykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gICAg
aWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewotICAgICAgICAvLyA5LiBF
bHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERl
c2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KLSAgICAgICAgaWYgKGN1cnJlbnQuaXNE
YXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAg
ICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFi
bGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3Io
Y3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9i
amVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3Nv
ciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVk
IHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVt
ZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMg
YXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAg
ICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2Jq
ZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCi0gICAg
ICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQg
cHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCi0gICAgICAg
ICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBh
dHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgotICAgICAgICB9IGVsc2UgaWYgKGN1
cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50
KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCi0gICAgICAg
ICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYg
IWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0
LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBb
W1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRy
aWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8g
MTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0
aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVl
XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0s
IGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJy
ZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRo
cm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRo
ZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5n
ZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAm
JiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0gICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNB
Y2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2Mp
IGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUo
KSkgewotICAgICAgICAgICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50
LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRl
clByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJB
dHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3Bl
cnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1d
IGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3Vy
cmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDEy
LiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0
aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQg
UCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgotICAgIHB1dERlc2NyaXB0
b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7Ci0gICAgLy8gMTMuIFJl
dHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CiAK
IHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdy
aXRhYmxlKQpAQCAtNTI3LDkgKzc0LDkgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdAogICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEo
KSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7
CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5n
ZXQoKTsKICAgICBBU1NFUlQobWFwKTsKICAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsK
IH0KQEAgLTYzMCwzOCArMTc3LDEwIEBAIGJvb2wgSlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QKICAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5k
ZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJv
cGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBv
bGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMg
cmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgotICAgICAgICByZXR1cm4g
YXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhj
ZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0g
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpIHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJS
QVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkg
PCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09i
amVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpp
dGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91
bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bklu
ZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwog
ICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIHJldHVybiBh
cnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiB9CiAKIGJvb2wgSlNBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC02NzIsMTAgKzE5MSw2IEBA
IGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICByZXR1cm4g
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCBz
bG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKQEAgLTY4NywyNiArMjAyLDYgQEAg
Ym9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Ci0gICAgICAgIGlmIChp
ID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAg
ICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRo
aXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICAgICAgaWYgKGl0ICE9
IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2Ny
aXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAg
LTcxNCwxMSArMjA5LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Sgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsK
LSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZXhl
Yyk7CkBAIC03MzMsMTk2ICsyMjMsOSBAQCB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+
KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3Qg
Y2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3Zl
Y3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0lu
VmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVu
Z3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAg
ICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVTbG90LnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIDJeMzItMSAtIHRo
aXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUgRVM1LjEgMTUuNCksIGFuZCBpcyB0cmVhdGVk
IGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBpZiAoVU5MSUtFTFkoaSA+IE1BWF9BUlJBWV9J
TkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOwotICAg
ICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUsIHNsb3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlz
IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgotICAgIEFTU0VSVChpID49IG1fdmVjdG9y
TGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJl
IHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFt
YXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJheSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hv
dWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBt
YXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVw
ZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1f
bGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAg
ICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9y
LCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9yLgotICAgICAgICBpZiAoTElLRUxZKChp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAm
JiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAg
ICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3JhZ2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVu
IHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVy
dHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxv
Y2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJz
ZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxk
VGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3Ro
IGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsK
LSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAgICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUg
YXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KLSAgICAgICAgaWYgKG1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUoKSkgewotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFn
ZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1
c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4K
LSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1v
ZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9u
IGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8
ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgewotICAgICAg
ICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVj
dG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFy
cmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0
b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXRO
b25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0
b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVTbG90KQotICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6cHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVl
IHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKLXsKLSAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZh
bGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0g
ICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJB
WV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZp
cnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2Ug
bWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlz
IG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwg
YW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgp
KTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xl
bmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8g
c3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3Iu
Ci0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEs
IGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBz
aW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVj
dG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2NhdGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgcmV0dXJuIG1h
cC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBtb2RlKTsKLSAgICB9Ci0KLSAgICAv
LyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9o
aWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAg
ICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpIHsKLSAgICAgICAgICAg
IGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgU3RyaWN0TW9kZVJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVj
dEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmpl
Y3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGgg
PSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0g
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMs
IGksIHZhbHVlLCBtb2RlKTsKLQotICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFz
ZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9
IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVz
SW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUg
dmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAv
LyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkK
LSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29s
IEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTMwLDM1ICsy
MzMsNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIGlmIChpIDwgdGhpc09iamVj
dC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1
ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewot
ICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAg
IGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25k
LmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRo
aXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
CiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsK
QEAgLTk2NiwxMjcgKzI0MCwyNiBAQCBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29u
c3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0Fy
cmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVB
cnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNy
ZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQg
YXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVu
dCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9y
TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIH0KLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVl
TWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNl
cnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQotICAgICAg
ICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNp
emVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9yUVNvcnQpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3Ro
KHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0KLSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5n
dGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3Ro
LCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAg
ICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5pdExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92
ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3Ro
LCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkg
ZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3Ro
ICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVu
Z3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3RoICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMg
Zm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwgb3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNl
ZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVzaXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVk
TGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNp
cmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNpemUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBG
SVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0KLWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0
b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMgdGhlIGFycmF5IGluIGFuIGludGVybmFsbHkg
aW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBm
cm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUg
dG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVu
dGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBB
U1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JM
ZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2Fz
ZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFr
ZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9pbmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQq
IG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2UoJm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZl
Y3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1ZlY3Rvckxlbmd0aCkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJl
dF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkp
OwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAg
QVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpOwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4g
QXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAg
IHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbihtX2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3
IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9vbSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAg
ICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRl
eEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEu
aGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwg
Jm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1
bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1f
dmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5l
d1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0
b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9j
YXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7
Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3JhZ2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50
cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdl
U2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1
cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9j
QmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUg
bmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBu
b3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFT
U0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBl
bnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0g
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlT
aXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKTsKIAotICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRs
ZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAgIEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1f
aW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToKICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmlj
czoKQEAgLTEwOTUsOCArMjY4LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBhY2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQg
c2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcgYW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAg
KiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ugc2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUg
dmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWlyZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBsZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBt
aW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxlbmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0
b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhh
dCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBvc3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZl
IGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVz
ZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTA0LDggKzI3Nyw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCByZXF1aXJlZFZlY3Rvckxlbmd0aCA9
IHVzZWRWZWN0b3JMZW5ndGggKyBjb3VudDsKICAgICBBU1NFUlQocmVxdWlyZWRWZWN0b3JMZW5n
dGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7CiAgICAgLy8gVGhlIHN1bSBvZiBtX3Zl
Y3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVu
Z3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0gICAgdW5zaWduZWQgY3VycmVudENhcGFjaXR5ID0gbV92
ZWN0b3JMZW5ndGggKyBtX2luZGV4QmlhczsKKyAgICBBU1NFUlQoc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSA+PSBzdG9yYWdlLT5tX2luZGV4Qmlh
cyk7CisgICAgdW5zaWduZWQgY3VycmVudENhcGFjaXR5ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkgKyBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAgICAvLyBUaGUgY2FsY3VsYXRpb24gb2YgZGVz
aXJlZENhcGFjaXR5IHdvbid0IG92ZXJmbG93LCBkdWUgdG8gdGhlIHJhbmdlIG9mIE1BWF9TVE9S
QUdFX1ZFQ1RPUl9MRU5HVEguCiAgICAgdW5zaWduZWQgZGVzaXJlZENhcGFjaXR5ID0gbWluKE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgsIG1heChCQVNFX1ZFQ1RPUl9MRU4sIHJlcXVpcmVkVmVj
dG9yTGVuZ3RoKSA8PCAxKTsKIApAQCAtMTExNiwxMCArMjg5LDExIEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNp
dHk7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RvcmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkg
bGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhlbiBqdXN0IGtlZXAgdXNpbmcgaXQuCiAgICAg
aWYgKGN1cnJlbnRDYXBhY2l0eSA+IGRlc2lyZWRDYXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGN1cnJlbnRDYXBhY2l0eSwgcmVxdWlyZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAg
IG5ld0FsbG9jQmFzZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOworICAgICAgICBuZXdBbGxvY0Jh
c2UgPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJlKCkpOwogICAgICAgICBuZXdTdG9yYWdlQ2Fw
YWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKGRlc2lyZWRDYXBhY2l0
eSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihkZXNpcmVkQ2FwYWNpdHkpKTsKKyAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxs
b2NhdGVTdG9yYWdlKG5ld1NpemUsICZuZXdBbGxvY0Jhc2UpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CiAg
ICAgfQpAQCAtMTEzMiw0NSArMzA2LDQwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xv
d0Nhc2UoSlNHbG8KICAgICAvLyBJZiBpdCBkaWQsIHdlIGNhbGN1bGF0ZSB0aGUgYW1vdW50IHRo
YXQgd2lsbCByZW1haW4gYmFzZWQgb24gYW4gYXRvbWljIGRlY2F5IC0gbGVhdmUgdGhlCiAgICAg
Ly8gdmVjdG9yIHdpdGggaGFsZiB0aGUgcG9zdC1jYXBhY2l0eSBpdCBoYWQgcHJldmlvdXNseS4K
ICAgICB1bnNpZ25lZCBwb3N0Q2FwYWNpdHkgPSAwOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rv
ckxlbmd0aCkgeworICAgIGlmIChsZW5ndGggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewog
ICAgICAgICAvLyBBdG9taWMgZGVjYXksICsgdGhlIHBvc3QtY2FwYWNpdHkgY2Fubm90IGJlIGdy
ZWF0ZXIgdGhhbiB3aGF0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgcG9zdENhcGFjaXR5ID0gbWlu
KChtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVx
dWlyZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMg
d2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJl
ZHVjZWQuCi0gICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jh
c2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0b3JMZW5ndGggLSBsZW5ndGgpOwotICAgIH0KLQot
ICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRWZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7
Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0aDsK
LSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWlu
dGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2lu
ZGV4Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6Ci0gICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVh
ZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywgY2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUg
YW55IG9sZCBhbGxvY2F0aW9uLgotCi0gICAgLy8gSWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRo
aW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1vcnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcg
ZGF0YQotICAgIC8vIHRvIHRoZSByaWdodCAoc2luY2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFz
IHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFtcGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92
ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRWZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUo
bV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29w
eWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0gICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0
b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAgIC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9u
LCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBu
ZXdBbGxvY0Jhc2U7CisgICAgICAgIHBvc3RDYXBhY2l0eSA9IG1pbigoc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkgLSBsZW5ndGgpID4+IDEsIG5ld1N0b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgLy8gSWYgd2UncmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0
aGUgc2FtZSBhbGxvY2F0aW9uLCB0aGUgcG9zdC1jYXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgor
ICAgICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUo
KSkgfHwgcG9zdENhcGFjaXR5IDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpOwog
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rv
ckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBuZXdT
dG9yYWdlQ2FwYWNpdHkgLSBuZXdWZWN0b3JMZW5ndGg7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMs
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihK
U1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOworICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CisgICAgCisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0g
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3Vy
ZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkg
dGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28gc2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcg
J2lmJy4KLSAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXAp
OworICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXAp
OwogCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXAp
IHsKKyAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VN
YXAuZ2V0KCkpIHsKICAgICAgICAgLy8gRmFpbCBpZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJs
ZS4KICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQogICAgICAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKQEAgLTExOTcsNyArMzY2LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IG1hcC0+cmVtb3ZlKGl0KTsKQEAgLTEyMDYsMTQgKzM3NSwxNCBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVt
b3ZlKGtleXNbaV0pOwogICAgICAgICAgICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAogICAgIGlmIChuZXdMZW5ndGggPCBsZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRl
IHByb3BlcnRpZXMgZnJvbSB0aGUgdmVjdG9yLgotICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKGxlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVT
bG90OwpAQCAtMTIyMiw1MyArMzkxLDY1IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0g
bmV3TGVuZ3RoOworICAgIHN0b3JhZ2UtPnNldExlbmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
c3RvcmFnZTsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAg
ICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QXJyYXk6CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgIAorICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5z
aWduZWQgaW5kZXggPSBsZW5ndGggLSAxOwotICAgIGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3Ro
KSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+
bV92ZWN0b3JbaW5kZXhdOwotICAgICAgICBpZiAodmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAt
LXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSB2YWx1ZVNsb3QuZ2V0KCk7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoaW5kZXggPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpbmRleF07CisgICAgICAgICAgICBp
ZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yOworICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQo
KTsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdl
LT5tX2xlbmd0aCA9IGluZGV4OwotICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3Ro
V3JpdGFibGUoKSk7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsK
KyAgICAgICAgICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAot
ICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBp
bnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCi0gICAgSlNWYWx1ZSBlbGVt
ZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0g
aW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBp
ZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3Bl
cnR5LiIpKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBl
bGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdl
dChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0
ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCisg
ICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVy
dHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1l
bnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KKyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGlu
ZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJuIGVsZW1lbnQuCisgICAgICAgIGNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KLSAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
LSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRydWUpOwotICAgIC8vIFJldHVybiBlbGVtZW50
LgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8g
UHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRlbnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZm
ZXJlbmNlcy4KQEAgLTEyNzYsNjMgKzQ1Nyw3NyBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVj
U3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEg
c3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0Fy
cmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0g
ICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVu
Z3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5tX2xlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwgbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2
YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoICsgMTsKLSAgICAgICAg
KytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2Ug
QXJyYXk6IHsKKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgMCwgdmFsdWUsIHRydWUsIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCi0gICAgLy8gUHVzaGluZyB0byBh
biBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3Mg
YSByYW5nZSBlcnJvci4KLSAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZS0+bV9sZW5ndGggPT0gMHhG
RkZGRkZGRnUpKSB7Ci0gICAgICAgIG1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhl
Yywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgLy8gUGVyIEVTNS4x
IDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICBpZiAoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2
ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgorICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxl
bmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgICAgICsr
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdD
b25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVy
dHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KKyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3Jh
Z2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkgeworICAgICAgICAgICAgbWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUp
OworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0
ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQg
YXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAv
LyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXgu
CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwgdHJ1ZSwgc3RvcmFnZSk7CisgICAgICAgIGNo
ZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0K
IAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KQor
Ym9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQp
CiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5
U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0
aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2Ut
Pmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBp
cyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmlj
IGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VNb2RlKCkpCisgICAgaWYgKG9sZExl
bmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdN
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghb2xkTGVuZ3RoKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
IC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoIC09IGNvdW50OworICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgCi0gICAgaWYgKG1fdmVjdG9yTGVu
Z3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1fdmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291
bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
OworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAgICAgICAgY291bnQgPSBtaW4odmVjdG9yTGVu
Z3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAgICAKLSAgICAgICAgbV92ZWN0b3JMZW5ndGgg
LT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0aCAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFn
ZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIAotICAgICAgICBpZiAo
bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkgKyBjb3VudCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVtbW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFn
ZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotCi0gICAgICAgICAgICBt
X2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAg
ICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKICAgICAgICAgfQogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNDEsNTkgKzUzNiwzMCBAQCBib29sIEpTQXJyYXk6
OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hp
ZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZhbGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5
U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3Jh
Z2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlz
IG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMg
YWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkg
ewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3VudDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0
b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAgICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2Us
IHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAgICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3Zl
Y3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAoc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291
bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlm
dChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsKKyAg
ICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsg
Y291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hpZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOworICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpXS5jbGVhcigpOwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
ICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7
Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05vbkZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fc3RvcmFnZSkg
ewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgiWyV1XTogIiwgdGhpc09iamVjdC0+bGVuZ3Ro
KCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3Rv
cmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsK
LQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoICsg
dGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9yYWdlLT5tX3ZlY3Rvci0+c2xvdCgpLCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJhc2VTdG9yYWdlICE9IHRo
aXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRp
Y19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzT2JqZWN0
LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxs
b2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9z
dG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkKLSAgICAg
ICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVO
dW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKICAgICBkb3Vi
bGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVyKCk7CkBAIC0x
NDEwLDExMiArNTc2LDEzNyBAQCBzdGF0aWMgaW50IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29y
dChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxs
RGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNlTW9kZSgpKTsKLQotICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBBU1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2Rl
KCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFj
dEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1h
cCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0g
dHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9y
YWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVO
dW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBib29sIGFsbFZhbHVlc0Fy
ZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAgICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNv
bXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNoIGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0
aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8gYWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29y
dCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2VyIHZpc2libGUKKyAgICAgICAgLy8g
c2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZh
bHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTsKKyAgICAgICAgCisg
ICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVy
cykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFz
dCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQotICAgIC8vIGFsc28gZG9uJ3Qg
cmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHksIHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNp
YmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwg
cHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOwotCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNB
cnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUo
KSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0
Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFw
KSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmlu
Z3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBi
YXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQg
b3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEg
bGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVyLiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVz
IGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3RzIGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhv
ZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3Vs
dHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KLQot
ICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRl
ZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghaW5T
cGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRl
bXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1
ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5n
VW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOwotICAgICAgICBpc1NvcnRpbmdQcmltaXRp
dmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUo
KTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0
byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQgdmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBh
IHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVl
c1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7Ci0K
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlz
KS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3Qg
YWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhO
KSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cgTikuCi0KKyAgICAgICAgCisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVk
aW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDb252ZXJ0aW5nIEph
dmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQg
b25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgorICAgICAgICAvLyBUaGlzIGlz
IGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBh
cmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxhcmdlIHRlbXBvcmFyeQorICAgICAgICAvLyBi
dWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9i
amVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0aG9kcyB0aGF0IHJldHVybgorICAgICAgICAv
LyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2lu
ZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVudC4KKyAgICAgICAgCisgICAgICAgIFZlY3Rv
cjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwor
ICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmlu
ZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVlOworICAgICAgICAgICAgaXNTb3J0aW5n
UHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJp
bWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1
ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2Vw
dGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0g
dmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5saW5lKGV4ZWMpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3Ry
aW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQu
IFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAgICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgor
ICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkKLSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZl
VmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6
ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAg
ZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAg
ICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQorICAgICAgICAgICAgcXNvcnQodmFs
dWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21w
YXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZXJn
ZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTog
VGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBz
b3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29y
dCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAg
cXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1Bh
aXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICAvLyBGSVhNRTogVGhl
IHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0
LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBkb2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNv
cnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMgcGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAg
ICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8v
IElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5
IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxl
IHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxl
bmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0
b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQp
OwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0
YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZp
bmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1w
U29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25z
aXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAor
ICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1i
ZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAgaWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbmNyZWFzZVZl
Y3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1
ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Cisg
ICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFs
dWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29u
c2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogc3RydWN0
IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsKQEAgLTE1OTcsMjUzICs3ODgsMjU3IEBAIHN0
cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSAKIAogdm9pZCBKU0FycmF5Ojpz
b3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNh
bGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJz
ZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGlu
IHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGltdW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBp
biAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkgdXAgdG8gbm8gZ29vZAotICAgIC8vIGlmIGEg
bGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2xlbmd0aCA8
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkp
OwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsg
KG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZhbHVlTWFwLT5zaXplKCkgOiAwKTsKLQotICAg
IGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdo
IGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsK
LSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAg
IHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxEYXRhID0gJmNhbGxEYXRhOwotICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOwotCi0gICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2Fs
bCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29t
cGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVz
LmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgIEFT
U0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVz
IHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAg
Ly8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hpbGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUg
aGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVu
ZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBt
aXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxs
IG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAgICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3Jh
Z2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOwotICAgICAgICBpZiAoIXYgfHwgdi5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICB0cmVlLmluc2VydChudW1E
ZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1f
dmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAodikgewotICAgICAgICAgICAgaWYgKHYuaXNV
bmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVm
aW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQp
OwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9u
cyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAg
IAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0
IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCisgICAgICAgIC8vIGlmIGEgbGFy
Z2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPmxlbmd0aCgpIDw9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7
CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+
bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgdW5zaWduZWQgbm9k
ZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChzdG9yYWdlLT5tX3NwYXJzZU1hcCA/IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICghbm9k
ZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxB
VkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFyZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlz
IGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMg
PSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNv
bXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5
cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERh
dGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhu
b2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMp
CisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihu
ZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiks
IDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5i
ZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1h
cCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAgICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRl
ciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUgdHJlZSBoZXJlLgorICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7CisgICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5l
ZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25v
cmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRp
bmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KKyAgICAgICAgZm9yICg7IG51bURlZmlu
ZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFs
dWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgpOworICAgICAgICAgICAg
aWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2Owor
ICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURl
ZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVm
aW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdV
c2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5l
d1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVj
dG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
aXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQg
YWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQg
KyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIG5ld1Vz
ZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBpZiAobmV3VXNlZFZl
Y3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBl
bm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMuCisgICAgICAgICAgICAgICAgaWYgKChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZh
bHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICAgICAgdHJl
ZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5k
ZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwotICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICArK251bURlZmluZWQ7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5l
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24g
Y2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQor
ICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3RvciBpbmNvcnJlY3RseS4KKyAgICAgICAgCisg
ICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGludG8gbV9zdG9yYWdlLgorICAgICAgICBB
VkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0
ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7CisgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9u
b2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAgICAgKytpdGVyOwogICAgICAgICB9Ci0KLSAg
ICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOworICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVu
ZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVm
aW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVjdG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VS
VCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAg
IC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2Yg
dGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2
ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBDb3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1f
c3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0
ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAgKytpdGVyOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQg
dW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmlu
ZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFs
dWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
bmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
bV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQogCiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQg
PSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgo
KSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsr
aSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkK
LSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWlu
dDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwot
ICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9zdG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNp
Z25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7
IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYg
PSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3Rv
ciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4o
bGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVj
dG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZl
Y3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBj
YWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxG
cmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJh
eTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEFT
U0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAg
IEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBudW1EZWZp
bmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51
bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURlZmluZWQpIHsKLSAgICAgICAgSlNW
YWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlm
ICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0
aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZpbmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytu
dW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3Rvcltu
dW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAg
ICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRv
IGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9u
IGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytd
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQot
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVu
ZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwot
Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7
Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJl
dHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9p
ZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17
Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFz
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdl
KTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJU
KCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAg
IGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAg
IHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdh
cyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1E
ZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAgICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAg
ICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5l
d1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90LAorICAgICAgICAg
ICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gYnkgY2FsbGVyLgorICAgICAgICAgICAgICAg
IGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8
IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9y
W2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwogICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVz
SW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51
bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJz
ZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJz
dDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NF
UlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKLSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vj
b25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNr
KQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZp
bmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4K
LSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5o
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQy
ICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gKICNkZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNs
dWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKLSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0gICAgZW51bSBQdXREaXJlY3RJbmRleE1vZGUg
eyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhy
b3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsKLQotICAgIHN0cnVjdCBTcGFyc2VBcnJh
eUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxVbmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYg
V3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgp
IDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpT
QXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OwotICAgICAgICBKU1Zh
bHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8
dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+
IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0g
ICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAgICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkg
PSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRl
cmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0K
LSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgpCi0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9y
bWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAg
ICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
ZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VN
b2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdz
PihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGxlbmd0
aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExl
bmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldExlbmd0aElzUmVh
ZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8Rmxh
Z3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAotICAgICAg
ICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5
KiwgdW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSk7Ci0gICAgICAgIEFkZFJl
c3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNp
Z25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxk
IEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5k
KS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsg
fQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQot
Ci0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2Yg
dGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQo
KTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5
KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBPbmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBp
dGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwot
ICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5
OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFs
dWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9iamVjdCBwb2ludHMgdG8gaXQncyBjb250YWlu
ZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAg
VG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRT
dG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3JhZ2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0
YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3Jh
Z2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRp
b24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2ludGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoK
LSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkK
LSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8v
IFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUgYXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9u
dW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIg
dG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1hbGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50
ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3Iu
Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1
aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KLSAgICAgICAgdWludHB0cl90IG1faW5p
dGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6
YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRyX3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZlY3RvclsxXTsKLQotICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0lu
VmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFz
ZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAg
Y2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtl
cjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4
cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFzKDApCi0gICAgICAgICAgICAsIG1fc3RvcmFn
ZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZhbHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0
IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAgCiAgICAgcHVibGljOgotICAgICAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6
ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAv
LyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9m
IGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5LDI2ICs1NywxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAg
ICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRo
b2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQK
LSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgotICAgICAgICAvLyAgLSBp
dCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQ
dXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBtb2RlICh0aGUgZGVm
YXVsdCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0
dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRv
IHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2Rl
ID0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICAgICAgICAgIHNldEluZGV4
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgbW9k
ZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVz
ZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJh
eS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhy
b3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIwMiwxNDIgKzc1LDg2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQp
OwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7
CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92
ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVl
IGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5H
ZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkg
eyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRleChpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07
Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0
b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQot
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lkIGluaXRpYWxpemVJbmRleChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAq
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAg
ICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGlu
IHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJUKGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXph
dGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1f
bnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBj
aGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9m
IHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlv
bkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKLSNlbmRpZgotICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZv
aWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNpZ25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHBy
b3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
bmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9yYWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tf
QVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBv
ZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAg
ICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBt
YXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxB
cmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQg
Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENhbGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7
CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2Up
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VP
ZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
QXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JMZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2Jh
bERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVN
YXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclpl
cm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0
aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFi
bGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7Ci0gICAgICAgIHZvaWQgcHV0RGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJv
cGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAgICBib29sIGRlZmluZU93bk51bWVyaWNQcm9w
ZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJv
d0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWxsb2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRh
Jik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwogCi0gICAgICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlKTsKLQotICAg
ICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7
Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWdu
ZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjb21w
YWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsKKyAgICB9OwogCi0gICAgICAgIGVudW0gQ29u
c2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29u
c2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVj
ayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5n
dGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWduZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1i
ZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVmb3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAg
QXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJz
ZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBpbnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJzZVZhbHVlTWFwOworICAgIGlubGluZSBCdXR0
ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAgICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVl
LCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShpbml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdlLT5tX2luZGV4
QmlhcyA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAg
IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJ
U1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAg
ICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSAwOworI2VuZGlmCisgICAg
ICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQogCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
c3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9
Ci0gICAgfTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAg
ICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsK
LSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9i
YWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAg
aW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExl
bmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gYXJyYXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0
aWFsaXplZChnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVj
dG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0
ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgMCwgMCk7CisgICAgICAgICpidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgs
IHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAg
ICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5ndGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lT
VEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAg
ICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IHRydWU7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAogICAgIEpTQXJyYXkqIGFzQXJyYXko
SlNWYWx1ZSk7CkBAIC0zNTYsMzAgKzE3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGlu
ZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwpIHsgcmV0dXJuIGNlbGwtPmNsYXNzSW5mbygp
ID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBpbmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1
ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlzSlNBcnJheSh2LmFzQ2VsbCgpKTsgfQogCi0v
LyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFu
dCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUg
c3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFy
cmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rv
ckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZG
RkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAt
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkg
LyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUg
dG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9k
dWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3By
b2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0j
ZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0FycmF5OjpzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2
ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQodmVjdG9yTGVuZ3RoIDw9IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0IHByb3ZpZGVkICh2ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92
ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93LgotICAgICAgICBz
aXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBkZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBpbiBw
cmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSwgcHJvdmlkZWQgdGhh
dAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGNvcnJlY3RseSBkZWZp
bmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXplID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkpOwotICAgIAotICAgICAgICByZXR1cm4g
c2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1
ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Ym91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3Mt
PmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1
aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENv
dW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkBA
IC02NSw3ICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGkK
IAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoYm91
bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0
SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJn
dW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KGkp
KTsKIApAQCAtMTEyLDggKzExMiw4IEBAIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVh
dGlvbihFeGUKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5n
dGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKLSAgICBwdXREaXJl
Y3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwg
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwotICAgIHB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciwgZ2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Cisg
ICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciwg
Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplYwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKIFN0cmluZyBKU0NlbGw6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAg
ICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1
Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxp
ZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNjAsNiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRp
YyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3OTM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3Bl
cnR5U2xvdChKU0NlCiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVj
dEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
dXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMjU1LDcgKzI1
NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAg
aWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0g
ICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMs
IHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0yODQsNyArMjg0LDcgQEAgYm9vbCBKU0Z1bmN0aW9u
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVj
dXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAg
ICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlO
YW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTMwMyw3ICszMDMsNyBAQCBib29sIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4
ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
QmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JH
ZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMzE2LDcgKzMxNiw3IEBAIGJvb2wgSlNGdW5j
dGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpT
RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAg
aWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlvbigpICYmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQotICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBzbG90KQpAQCAtMzk2LDE0ICszOTYsMTQgQEAgYm9vbCBKU0Z1bmN0aW9u
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iagogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICBpZiAodGhpc09iamVjdC0+anNF
eGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIUJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250
RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RB
Y2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAg
ICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2Ft
ZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0
cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2Ug
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAg
ICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihl
eGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAg
IHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBE
b250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gQmFz
ZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRl
c2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBl
eGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09i
amVjdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAgICBz
dGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51
bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlz
aW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJQYXJzZXJB
cmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0
LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC0yMTMsNiArMjE0LDcgQEAgSlNHbG9iYWxE
YXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQo
KnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzdHJ1Y3R1cmVDaGFp
blN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQo
KnRoaXMsIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxl
KGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0NCw2ICsyNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gcmVnRXhwU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzaGFyZWRT
eW1ib2xUYWJsZVN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJl
Q2hhaW5TdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNwYXJzZUFycmF5VmFs
dWVNYXBTdHJ1Y3R1cmU7CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFi
bGU7CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIEdldHRlclNldHRlciogcHJvdG9BY2Nl
c3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogICAgIHByb3RvQWNjZXNzb3ItPnNl
dEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlz
LCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvR2V0dGVyKSk7CiAgICAgcHJvdG9BY2Nlc3Nv
ci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKLSAgICBtX29iamVj
dFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8
IERvbnRFbnVtKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3Nvciwg
QWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJl
KCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyMSw4ICs1MjEsOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgaWYgKG1faXNBcnJheSkgewogICAgICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAg
ICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBpZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheSht
X29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgIHZhbHVlID0g
YXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldEluZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG1f
aXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5jYW5HZXRJbmRleFF1aWNrbHko
aW5kZXgpKQorICAgICAgICAgICAgdmFsdWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0
SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdChtX29iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIW1fb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBl
eGVjLCBpbmRleCwgc2xvdCkpCkBAIC02ODcsOCArNjg3LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJ
bmRleChpbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5k
ZXgoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5
LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBpblZhbHVl
ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShpbmRleCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJyYXktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
YXJyYXksIG1fZXhlYywgaW5kZXgsIHNsb3QpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Vi
a2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsMTAgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsVGhpcy5oIgpAQCAtMzgsMTIgKzQwLDE5IEBACiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2lu
Y2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVk
ZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhl
IHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIgaXQgd2FzIGdyb3duLiBXZSB1c2UgdGhpcwor
Ly8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4
dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25z
dGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxh
c3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwq
IGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsK
QEAgLTg2LDI5ICs5NSw4MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5h
bWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZM
aW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRvciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2Us
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXpl
X3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJUKHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9y
YWdlU2l6ZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZseSk7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkg
PSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkp
OwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9
IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFnZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9mU3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3Bl
cnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwot
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2Ug
KyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50
VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9y
YWdlIC0gMTsKKyAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6
Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChV
TkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAg
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigp
LT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0
b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9y
LmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkg
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5p
bml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24odmlzaXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAg
ICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBz
dG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1j
dXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwogICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAg
ICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9yYWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdl
QmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSwgc3RvcmFnZVNpemUpOworICAgICAgICAK
KyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAgICAg
Km5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFy
cmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygq
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50
U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQor
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdC
dXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4K
KyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJr
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTEyMiw5ICsxODMsOSBAQCB2b2lkIEpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2Up
Ci0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9y
YWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmlu
YWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1
dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2Fz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTE0Miw5ICsyMDMsOSBAQCB2b2lk
IEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3Jh
Z2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBz
dG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmlu
YWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1
dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpKTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6
ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVj
dCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2Uo
KSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsyMjIsNTAgQEAgU3RyaW5nIEpTT2JqZWN0Ojpj
bGFzc05hbWUoY29uc3QgSlNPYmplYwogICAgIHJldHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAK
LWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAg
IC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4
ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9u
ZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGlu
ZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAg
ICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQg
IT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xv
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkBAIC0xNzQsNiArMjc1LDEzIEBA
IHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFs
dWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJz
dC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0
dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0y
MzUsOSArMzQzLDE0NSBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
CiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJ
bmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisgICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFt
ZSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoICh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9y
W3Byb3BlcnR5TmFtZV07CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0
aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBkYXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5W
ZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkg
eworICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVydHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAg
ICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIAorICAgICAgICB2YWx1
ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOworICAgICAg
ICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRo
aXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1h
cC5nZXQoKTsKKworICAgIGlmICghbWFwKQorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAg
ICByZXR1cm4gc3RvcmFnZTsKKworICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5z
aWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9y
YWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50
cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAg
IC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9y
LT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShn
bG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAg
ICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKDApOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtYXApOworICAgIAorICAgIHJldHVybiBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworfQorCit2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAo
c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2Jh
bERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4
aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VS
VF9VTlVTRUQob2xkVHlwZSwgb2xkVHlwZSA9PSBOb25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5
KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KHZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgp
OworICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9y
TGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVzdWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOwor
ICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisgICAgcmVzdWx0LT5tX2luZGV4
QmlhcyA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICByZXN1bHQtPm1faW5p
dGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgcmVzdWx0LT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uID0gMDsKKyNlbmRpZgorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRl
QXJyYXlTdG9yYWdlKTsKKyAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5
LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0FycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQoreworICAgIHJldHVybiBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFT
RV9WRUNUT1JfTEVOKTsKK30KKworQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlT
dG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoZ2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFy
cmF5OiB7CisgICAgICAgIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChn
bG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVy
biBhcnJheVN0b3JhZ2UoKTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQpAQCAtMjY5LDEwICs1MTMsMTggQEAgYm9vbCBKU09iamVjdDo6YWxsb3dz
QWNjZXNzRnJvbShFeGVjU3RhdAogICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPmFsbG93c0FjY2Vzc0Zyb20oZ2xvYmFsT2JqZWN0LCBleGVjKTsKIH0K
IAotdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpICYmIChhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7
CisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4LCB2YWx1ZSwgYXR0cmlidXRlcywg
UHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKwogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZp
bmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRl
cywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKIApAQCAtMzA0LDYgKzU1NiwxMCBA
QCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlmICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0Zv
ckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTg4LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRo
aXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVj
dCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIAorICAgIGlmIChp
ID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1f
dmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlU2xvdCkgeworICAgICAgICAgICAgICAg
IHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAgICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAg
ICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBtYXAtPnJlbW92ZShpdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNh
bGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBv
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00NjUsNiArNzU2LDUxIEBAIHZv
aWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
KyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUg
dGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlO
YW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMg
aW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVy
ZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZm
ZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVj
dC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAg
ICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0g
c3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsK
KyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+
c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGtleXMu
YXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5l
bmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xh
c3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAt
NTE1LDggKzg1MSw3IEBAIHZvaWQgSlNPYmplY3Q6OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IK
IAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhpcykpCi0gICAgICAgIGFzQXJyYXkodGhpcykt
PmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlmIChpc0V4dGVuc2libGUoKSkKICAgICAgICAg
c2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFu
c2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpKSk7CiB9CkBAIC01NzMsMTEgKzkwOCwxMSBA
QCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3QoSlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRp
b24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNP
YmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+
Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJT
ZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkpLT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAo
IXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVh
YmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9j
YXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBn
ZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5z
ZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsKICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTM4
LDUyOCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0OjpjcmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0
dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRP
ZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQorICAgICAgICAg
ICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52
YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBk
ZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5B
Y2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAgICAv
LyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbi4KKyAgICBpZiAoZGVz
Y3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0
ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAg
ICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBlbHNlIGlm
IChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0
ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpOworICAgICAgICBKU09iamVjdCogc2V0
dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAg
ICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBp
ZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgc2V0
dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0
ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChn
ZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5N
YXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJy
ZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5OworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRy
eUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJl
bnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERlZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAhPSAweEZGRkZGRkZGKTsKKworICAgIGlmICgh
aW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1
dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQorICAgICAgICAvLyBG
SVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVz
IGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhv
d2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVz
IHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0
ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdp
dGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgorICAgICAgICBpZiAoIWRl
c2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQ
dXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7
CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRp
Y3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOworICAgIEFTU0VSVChtYXApOworCisgICAgLy8gMS4gTGV0IGN1cnJl
bnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFy
c2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisg
ICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAgIC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZp
bmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBj
dXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYg
KHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAg
ICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJv
cGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVz
Y3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQor
ICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJs
ZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVz
CisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0
dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3
bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFs
dWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3Bl
cnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQg
UCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1l
cmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmli
ZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVs
ZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBw
cm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAg
IC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1
bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERv
bnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisK
KyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRv
ciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4K
KyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3Vy
cyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29t
cGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5
RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBp
ZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJl
bnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgorICAgIGlmICghY3VycmVudC5j
b25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmln
dXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxk
IG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJy
ZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAg
ICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVy
YWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFi
bGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgIH0KKworICAg
IC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0
aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJp
Y0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9y
KGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3Vs
dHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2Ny
aXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwg
aWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAg
ICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNj
ZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAg
ICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBj
b252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQorICAgICAgICAg
ICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhl
IGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAg
IC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNl
dCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAv
LyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVy
dCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3Bl
cnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlz
dGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0g
YW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmlidXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVl
cy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlm
IElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJl
IGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAgLy8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJh
YmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFj
dXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJyZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBj
dXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgorICAgICAgICAgICAgICAgIC8vIDEwLmEuaWku
MS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
U2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJyZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisg
ICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMs
IGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hh
bmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMgYWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYg
Y3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3VycmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAg
ICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNzb3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJ
c0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMS5pLiBS
ZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZh
bHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1NldF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIo
KSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBv
ZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMS5p
aS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNh
bWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQuW1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAg
ICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0
dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0
ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9yIGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERl
c2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1
dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRo
ZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNj
cmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4gUmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAqIEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGUoZ2xvYmFsRGF0YSk7Cisg
ICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCgpCit7CisgICAgaWYgKEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlID0g
YXJyYXlTdG9yYWdlT3JaZXJvKCkpCisgICAgICAgIGFycmF5U3RvcmFnZS0+bV9zcGFyc2VNYXAu
Y2xlYXIoKTsKK30KKwordm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBz
aG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJl
bnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJU
KGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIAorICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOworICAgIAorICAgIC8vIEZp
cnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2Ug
bWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlz
IG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwg
YW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgp
KTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBzdG9yYWdlLT5zZXRM
ZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8g
c3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3Iu
CisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEs
IGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBz
aW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVj
dG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2Ug
YSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYg
YWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVj
LT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVcGRh
dGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2Ut
Pmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBn
cm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICBpZiAo
bWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggPSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+
c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisgICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2lu
ZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAg
ICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUg
aXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZh
aWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFp
c0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBt
YXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNl
VmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0g
YXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZh
bHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8g
dGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFs
dWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7
CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZh
bHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZh
bHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworfQorCit2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0
b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAg
IFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSAwOworICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNl
IEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpIHsKKyAgICAg
ICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJE
aWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBp
ID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRU
aHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDApKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxl
bmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Citib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERh
dGEoKTsKIAotICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0ND
J3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVu
bmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0ZW1wKSkKKyAgICAvLyBpIHNob3VsZCBiZSBh
IHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3Iu
CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7
CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKworICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpOworCisgICAgLy8gRmlyc3Qs
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAu
CisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90
IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQg
Y3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOwor
ICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBp
ZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0
aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGls
bCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAg
ICAgICAgaWYgKExJS0VMWSgKKyAgICAgICAgICAgICAgICAhYXR0cmlidXRlcworICAgICAgICAg
ICAgICAgICYmIChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpKQorICAgICAgICAgICAgICAgICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2Jh
bERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3Rv
cmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0
aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9y
IGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNw
YXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUlu
ZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVj
dChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgfQorCisgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+PSBsZW5ndGgpIHsKKyAgICAgICAgaWYgKG1v
ZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KSB7CisgICAgICAgICAgICAvLyBQcm9o
aWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgorICAgICAg
ICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgaWYgKCFpc0V4dGVu
c2libGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAgICAgICB9CisgICAgICAgIGxl
bmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9
CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3
ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRv
IHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJl
IHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFs
dWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsK
KyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgYXR0cmlidXRlcyB8fCAhaXNEZW5zZUVub3Vn
aEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1
dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisKKyAgICAv
LyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9u
dW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBD
b3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0
aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFw
LT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmly
c3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7
CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3
IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBt
b2RlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRz
aWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5E
RVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVybiBwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRhKSk7CisgICAgICAgIGlmICghaXNEZW5zZUVu
b3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdW
ZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3RvciA9IDE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2Uo
KSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxl
bmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sK
KyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsK
KworICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVu
Z3RoID0gc3RkOjptaW4oY3VycmVudExlbmd0aCwgMTAwMDAwVSk7CisKKyAgICBpZiAoZGVzaXJl
ZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IG1heElu
aXRMZW5ndGg7CisgICAgZWxzZSBpZiAoIWN1cnJlbnRWZWN0b3JMZW5ndGgpCisgICAgICAgIGlu
Y3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4KGRlc2lyZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOwor
ICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1hdGljYWxseSBlcXVpdmFsZW50IHRvOgorICAg
ICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAg
ICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNyZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2Vp
bChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAgLy8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0
byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExl
bmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9
CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49IGRlc2lyZWRMZW5ndGgpOworCisgICAg
bGFzdEFycmF5U2l6ZSA9IHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dS
T1cpOworCisgICAgcmV0dXJuIHN0ZDo6bWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6Omdl
dE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKQoreworICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aDsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgCisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNh
c2UgQXJyYXk6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGgg
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwotICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9
IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBuZXdTaXplICsgMTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9y
TGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgpOworfQorCitib29sIEpTT2JqZWN0OjppbmNy
ZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xl
bmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50
ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkg
dmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAorICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxl
cnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUg
ZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWduZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9p
bmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWdu
ZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVjdG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAg
ICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBwcmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMg
YSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlmIChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jv
d0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rvckxlbmd0aCkpOworICAgICAgICBpZiAoIW5l
d0J1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJm
bHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVj
YXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVu
Z3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAx
LCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgK
KyAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAg
ICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5n
dGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVy
dHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KSAqIG9sZFNpemUpOworICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5k
ZXhCaWFzOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVO
Q1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNo
ZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZU9yWmVybygpOworICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgQVNT
RVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAgcmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsK
KyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworCisgICAg
QVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQor
ICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3BhcnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51
bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsr
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlw
ZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NF
UlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Cisg
ICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAg
IGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgpOworICAgICAgICBmb3Ig
KFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3Ry
dWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9u
U3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2Jq
ZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5l
U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQn
cyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBm
b3IgdGhlIHByb3BlcnR5CisgICAgLy8gY2FwYWNpdHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxy
ZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBv
bGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsx
NDY3LDQ2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBKU0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3RydWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxE
YXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9
PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNl
dCksIGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0
ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJy
YXk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQo
KSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
U3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsK
KyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGkpOworICAgICAgICAgICAgaWYgKGl0ID09IG1hcC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9y
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02NTgsNyAr
MTUzMSw3IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAg
ICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVz
Y3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAgICAgICAgICBpZiAob2xkRGVzY3JpcHRvci5z
ZXR0ZXJQcmVzZW50KCkpCiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVj
LT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2JqZWN0KCkpOwotICAgICAgICAg
ICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICB0YXJn
ZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJp
YnV0ZXMgfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBKU1ZhbHVlIG5ld1ZhbHVlID0ganNVbmRlZmluZWQoKTsKQEAgLTY4MywxMCArMTU1
NiwxOSBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgZWxz
ZSBpZiAob2xkRGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCiAgICAgICAgIGFjY2Vzc29yLT5z
ZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgp
KTsKIAotICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1dGVzIHwgQWNjZXNzb3IpOworICAgIHRhcmdl
dC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmli
dXRlcyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgdW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGFzSW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQorICAgICAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMsIGFzSW5kZXgs
IHZhbHVlKTsKK30KKwogY2xhc3MgRGVmaW5lT3duUHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAg
ICAgRGVmaW5lT3duUHJvcGVydHlTY29wZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC03MDQsMjYgKzE1
ODYsMjYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAK
LWJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmlu
ZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxl
dGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAg
IC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxl
dGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUp
IHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcg
dG8gbWFrZSB0aGlzIHdvcmsuCiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZSBzY29wZShleGVj
KTsKLQorICAgIAogICAgIC8vIElmIHdlIGhhdmUgYSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3Qg
cHV0IGl0IG9uIG5vcm1hbGx5CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAg
aWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVudCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1
cnJlbnQpKSB7CiAgICAgICAgIC8vIHVubGVzcyBleHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0g
ICAgICAgIGlmICghb2JqZWN0LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0
ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0
ZW5zaWJsZS4iKSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNjcmlwdG9yOwogICAgICAgICBvbGREZXNjcmlw
dG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRv
cihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRy
aWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRl
cygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5
KCkpCkBAIC03NDksOCArMTYzMSw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVzY3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcg
dGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRv
ci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0
ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1
cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywg
ZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4
ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4ICsxNjQ0LDggQEAgYm9vbCBKU09iamVjdDo6
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFu
Z2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIikpKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJl
bnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhp
cywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhl
YywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNP
dmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hh
bmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVzIG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBA
IC03ODQsOCArMTY2Niw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3Jp
cHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJy
aWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJu
IHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAg
ICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlz
dGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAyLDcgKzE2ODQsNyBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29y
ID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAo
IWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0
ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3Nvcik7CkBAIC04MTIsMTIgKzE2OTQsMzcg
QEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAgICAgICBnZXR0
ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVy
T2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBh
dHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwot
ICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3Ip
OwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhl
ZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Cisg
ICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBk
ZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24g
QSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQu
IFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2UuCisgICAgICAgIC8vIGUuIElmIGluZGV4ID49
IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRl
eCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9w
ZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9s
ZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyBy
ZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiBv
YmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwg
dGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dF
eGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlm
IChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywgaSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAj
ZGVmaW5lIEpTT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJBcnJh
eUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0
dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRp
ZmllcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNp
bmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIKICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3Qu
aCIKIAotI2luY2x1ZGUgIlN0b3JhZ2VCYXJyaWVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNs
dWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDYgKzg0LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBBY2Nlc3NvciAgICAgPSAxIDw8IDUsICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9z
ZXR0ZXIKICAgICB9OwogCisgICAgQ09NUElMRV9BU1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxB
dHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09N
UElMRV9BU1NFUlQoUmVhZE9ubHkgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBSZWFkT25seV9p
c19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250
RW51bSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50
ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKERvbnREZWxldGUgPCBGaXJzdElu
dGVybmFsQXR0cmlidXRlLCBEb250RGVsZXRlX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1
dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEZ1bmN0aW9uIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSwgRnVuY3Rpb25faXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElM
RV9BU1NFUlQoQWNjZXNzb3IgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19i
ZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKwogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7
CiAKICAgICBjbGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewpAQCAtOTYsNyArMTA4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxs
IEJhc2U7Ci0KKyAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAt
MTIwLDE4ICsxMzIsMTk2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dz
QWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAgICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0
aCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5n
dGgoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMg
c2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRob2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJv
dG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKKyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFy
ZSBub3QgY2FsbGVkLgorICAgICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5
IGFuZCByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3Qg
aXMgcGFzc2VkIGFzIHRoZSBtb2RlICh0aGUgZGVmYXVsdCkuCisgICAgICAgIC8vIFRoaXMgbWV0
aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFi
bGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCisgICAgICAgIGJvb2wgcHV0RGly
ZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXMgJiYgY2FuU2V0SW5kZXhRdWlja2x5
KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEEgbm9uLXRocm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJ
bmRleC4KKyAgICAgICAgdm9pZCBwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAorICAgICAgICBib29sIGNhbkdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6
CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7
CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5n
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRo
aXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5k
ZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJl
IGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBpbiBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgpOworICAgICAgICAg
ICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3Ig
dG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90
IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIEFTU0VSVChp
IDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0
b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGll
cyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzdG9y
YWdlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3Ro
ID09IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRp
YWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5ndGguCisgICAgICAgICAgICAgICAgQVNTRVJU
KHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdElu
aXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRp
YWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEm
KTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMgZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZl
c2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgogICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBl
IGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKICAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3Qg
Y2FsbGVkLgogICAgICAgICAvLyAgLSBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChhZnRl
ciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBleGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1
dGVzKQorICAgICAgICAvLyAgLSB0aGUgcHJvcGVydHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBi
ZSBhbiBpbmRleC4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0RGly
ZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0
YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAg
ICAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyA9IDApOwotICAgICAgICB2b2lkIHB1dERpcmVjdEFjY2Vzc29yKEpTR2xvYmFsRGF0YSYs
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZv
aWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAgICBib29sIHByb3BlcnR5SXNFbnVtZXJhYmxl
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKQEAg
LTE0Nyw2ICszMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKQEAgLTIwMyw4ICszOTQsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxp
bmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9w
ZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5l
U3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAg
ICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0
KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QKICAgICAgICAgewpAQCAtMjI3LDcgKzQyMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFn
ZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24g
KyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
b3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0g
MSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBA
IC0yNjUsMjEgKzQ1OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1NlYWxl
ZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxl
ZChnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAg
ICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5z
aWJsZSgpOyB9CisgICAgICAgIGJvb2wgaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhaXNFeHRlbnNpYmxlKCkKKyAgICAgICAgICAgICAgICB8
fCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7CisgICAgICAgIH0KIAogICAgICAgICBib29s
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVu
Y3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZvaWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JE
ZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9w
ZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9s
ZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAgICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdl
KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFnZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRC
dXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgU3RydWN0dXJlKik7CisgICAgICAg
IHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAv
LyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMuCiAgICAgICAgIAogICAgICAg
ICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHksIFN0cnVjdHVyZSopOwogICAgICAgICB2b2lk
IHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9pZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFn
ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwot
ICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5m
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0
ODgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
cHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0zMTYsMTQgKzUyMCw3
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3Rz
IHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3Jl
YXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93
LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
SlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAg
ICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgcmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGds
b2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdl
LCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RW
aXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBp
dCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFnZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndp
c2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSB8IEhhc0FycmF5U3Rv
cmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8g
cHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgLy8g
b2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclplcm8oKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBz
dG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBpZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBh
Y3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJlZCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IHRv
IGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0
CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlT
dG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAg
ICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFs
QXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOworCisgICAgICAgIGVudW0g
Q29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9y
Q29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJS
QVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29u
c2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisg
ICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBl
ID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZv
aWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJh
eVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFs
RGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJz
ZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9u
KTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChK
U0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcgKzYwNCwzMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAgICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAg
ICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSop
OworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXRE
aXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5s
aW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5
KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsK
ICAgICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3Bh
cnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYg
b2xkKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOworICAgICAgICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgs
IHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAg
ICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAK
LSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRPZkxpbmVTdG9yYWdlOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3BlcnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAg
IH07CkBAIC0zNzIsOCArNjU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAg
IHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU09i
amVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTQ1Niwx
MSArNzQwLDYgQEAgaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5hbE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsK
IH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkK
LXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3Jh
Z2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAog
ewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2Jq
ZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzcwLDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0ds
b2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgp
ID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZM
aW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9y
YWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0
ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFz
dG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFT
U0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFo
YXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0
cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJm
bHk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJmbHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTU0MCw5ICs4MTgsOSBAQCBp
bmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2Jq
ZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2Jq
ZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAg
ICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsKIH0KIApAQCAtNTkwLDE1ICs4NjgsMTcgQEAg
aW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBp
ZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVj
dHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVy
U2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0
aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChv
ZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQorICAgICAgICAgICAgZmlsbEdldHRlclBy
b3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQoKSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRp
b24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxpbmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBl
c3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwKQEAgLTY4NCw2ICs5NjQsNyBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAg
ICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNz
b3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAt
NzEyLDExICs5OTMsMTEgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFs
KAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdT
dG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93
T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBz
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVy
ZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0
b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgICAgICBzZXRC
dXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAg
ICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMwLDEzICsxMDExLDEzIEBAIGlubGluZSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7
CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAg
ICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYg
KGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAg
ICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3Vy
cmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVu
dENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwg
bmV3U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEs
IG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAgICAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2Jh
bERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5
OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNo
YWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0
ZS4KQEAgLTgwMyw5ICsxMDg0LDkgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVy
ZUFuZFJlYQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByb3BlcnR5U3RvcmFn
ZSBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoCisgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgZ2xvYmFsRGF0YSwgb2xk
Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0
T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9
CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFn
ZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUpCkBAIC04MzksMTEgKzExMjAsMTEgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQ
cm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+
cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld1N0b3JhZ2UgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgp
KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0
ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0
YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwot
ICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJl
KCkpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVy
ZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9
CiAKQEAgLTkzNSw2ICsxMjE2LDExIEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIgUmVnaXN0ZXI6
OndpdGhDYWwKICAgICByZXR1cm4gcjsKIH0KIAoraW5saW5lIHNpemVfdCBvZmZzZXRJbkJ1dHRl
cmZseShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7
Cit9CisKIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9yIHBhdGNoaW5nIGNvZGUgd2hlcmUgeW91IHdh
bnQgdG8gZW1pdCBhIGxvYWQgb3Igc3RvcmUgYW5kCiAvLyB0aGUgYmFzZSBpczoKIC8vIEZvciBp
bmxpbmUgb2Zmc2V0czogYSBwb2ludGVyIHRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdlIHBvaW50
ZXIuCkBAIC05NDIsMTQgKzEyMjgsMTQgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rl
cjo6d2l0aENhbAogaW5saW5lIHNpemVfdCBvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZz
ZXQpKQotICAgICAgICByZXR1cm4gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShvZmZzZXQpOwotICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkob2Zm
c2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNl
dEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQogCiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVU
b0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChpc091dE9mTGluZU9mZnNl
dChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1
dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcg
KzEyNDMsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxp
bmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAg
ICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICBy
ZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAogICAgIGlm
IChvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkp
CiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgIAorICAgIGlmICho
YXNJbmRleGluZ0hlYWRlcihvLT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAg
ICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICAKICAgICBzaXplX3QgY291bnQg
PSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBvKTsKICAgICBTdHJ1Y3R1cmVDaGFpbiog
c3RydWN0dXJlQ2hhaW4gPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNoYWluLT5o
ZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJv
bFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJs
ZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7
CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVy
dHkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZp
cnN0LmdldCgpKSk7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0Vmly
dHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lk
IHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5o
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
ID0gMSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3Jk
ID0gMSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgUHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5OwogCiAgICAgY2xhc3MgVHlwZUluZm8gewogICAg
IHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
b3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJy
aWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBib29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKEltcGxlbWVudHNEZWZhdWx0SGFz
SW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkg
Y29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qp
OyB9CisgICAgICAgIGJvb2wgaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyk7IH0K
ICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxkcmVuKTsgfQotICAgICAgICBib29sIG92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAgICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25z
dCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyk7IH0KIAog
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdzT2Zmc2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAt
NjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQ
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIERvUGFyc2VPYmplY3RFbmRFeHByZXNz
aW9uOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzT2JqZWN0KG9iamVjdFN0YWNr
Lmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllclN0YWNr
Lmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5h
bWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKGkgIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVj
dEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBp
ZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUg
PT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0
RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENv
bnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBAIEFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0UHJvdG90eXAKIAogT2JqZWN0UHJvdG90eXBlOjpP
YmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0dWN0dXJlKQogICAg
IDogSlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0dWN0dXJlKQotICAgICwg
bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXModHJ1ZSkKIHsKIH0KIApAQCAtNzcsMzQg
Kzc2LDYgQEAgdm9pZCBPYmplY3RQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEpTRwogICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKLXZvaWQgT2JqZWN0UHJvdG90eXBlOjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBPYmplY3RQcm90
b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCk7Ci0gICAg
QmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotCi0gICAg
aWYgKHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3Bl
cnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0
aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNlOwotfQot
Ci1ib29sIE9iamVjdFByb3RvdHlwZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgT2JqZWN0UHJv
dG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KG9iamVjdCk7Ci0g
ICAgYm9vbCByZXN1bHQgPSBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwotCi0gICAgaWYgKHRoaXNPYmpl
Y3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0aGlzT2JqZWN0LT5t
X2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIE9iamVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxsKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9o
YXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCiBib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7CiAgICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uU2xvdDxKU05vbkZpbmFsT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdFBy
b3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4oY2VsbCksIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE0
ICs1MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgT2JqZWN0
UHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwotCiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0KLSAgICAgICAgYm9vbCBtX2hhc05vUHJv
cGVydGllc1dpdGhVSW50MzJOYW1lczsKICAgICB9OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zm
c2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlPZmZzZXQuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBA
IGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0
ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsK
LSAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxp
bmVPZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0
IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJ
blJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBy
b3BlcnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3BlcnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdlOwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHV0RGlyZWN0SW5kZXhNb2RlX2gK
KyNkZWZpbmUgUHV0RGlyZWN0SW5kZXhNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0g
UHV0RGlyZWN0SW5kZXhNb2RlIHsgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0LCBQdXREaXJl
Y3RJbmRleFNob3VsZE5vdFRocm93LCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IH07CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHV0RGlyZWN0SW5kZXhNb2RlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYs
MzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXku
aCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFy
c2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBNYXRjaGVzQXJyYXkpOwogCiBjb25zdCBDbGFz
c0luZm8gUmVnRXhwTWF0Y2hlc0FycmF5OjpzX2luZm8gPSB7IkFycmF5IiwgJkpTQXJyYXk6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSZWdFeHBNYXRjaGVzQXJyYXkpfTsKIAor
UmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQor
ICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJh
eVN0cnVjdHVyZSgpLCBidXR0ZXJmbHkpCisgICAgLCBtX3Jlc3VsdChyZXN1bHQpCisgICAgLCBt
X3N0YXRlKFJlaWZpZWROb25lKQoreworICAgIG1faW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGlucHV0KTsKKyAgICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKK30K
KworUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJl
c3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVh
dGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAx
KTsKKyAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVz
QXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGlucHV0LCByZWdFeHAsIHJlc3VsdCk7CisgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgIHJldHVybiBhcnJheTsKK30KKwogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6
OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBtX3JlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEp
OworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogfQogCiB2b2lkIFJlZ0V4
cE1hdGNoZXNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hl
c0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwy
OCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHBNYXRjaGVzQXJy
YXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVnRXhwTWF0Y2hl
c0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0
KQotICAgICAgICAgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhw
TWF0Y2hlc0FycmF5U3RydWN0dXJlKCkpCi0gICAgICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkK
LSAgICAgICAgICAgICwgbV9zdGF0ZShSZWlmaWVkTm9uZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaW5wdXQpOwotICAgICAgICAgICAgbV9y
ZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ0V4cCk7Ci0gICAgICAgIH0KKyAgICAgICAg
UmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRjaFJlc3VsdCk7CiAKICAgICAgICAgZW51bSBS
ZWlmaWVkU3RhdGUgeyBSZWlmaWVkTm9uZSwgUmVpZmllZE1hdGNoLCBSZWlmaWVkQWxsIH07CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAgIHN0
YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5n
KiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgICAgICAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgICAgICBSZWdFeHBNYXRjaGVz
QXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1dCwgcmVnRXhwLCByZXN1bHQpOwotICAgICAg
ICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgcmV0
dXJuIGFycmF5OwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkq
IGNyZWF0ZShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKIAog
ICAgICAgICBKU1N0cmluZyogbGVmdENvbnRleHQoRXhlY1N0YXRlKik7CiAgICAgICAgIEpTU3Ry
aW5nKiByaWdodENvbnRleHQoRXhlY1N0YXRlKik7CkBAIC01OCw3ICs0NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTExMywxMSArMTE1
LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1
cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAot
dm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcg
KzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVjdF9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKKyNpbmNsdWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIGJvb2wg
cmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciog
bWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNp
bmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFNwYXJzZUFycmF5VmFsdWVNYXA6OnNfaW5mbyA9IHsg
IlNwYXJzZUFycmF5VmFsdWVNYXAiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNwYXJz
ZUFycmF5VmFsdWVNYXApIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5
VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIkpT
Q2VsbC5oIgorI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2Ny
aXB0b3IuaCIKKyNpbmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIKKyNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBw
dWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKKyAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxV
bmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7
IH0KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAg
dm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNj
cmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsKKworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1h
cCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Cisg
ICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlF
bnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9y
bWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9u
bHkgPSAyLAorICAgIH07CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYp
OworICAgIH5TcGFyc2VBcnJheVZhbHVlTWFwKCk7CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdz
OworCitwdWJsaWM6CisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAKKyAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlw
ZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFw
OjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAgc3RhdGljIFNwYXJzZUFycmF5VmFsdWVNYXAq
IGNyZWF0ZShKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGJv
b2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1v
ZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1f
ZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0K
KworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9m
bGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAgfQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1Jl
YWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMg
bWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcAorICAgIHZvaWQgcHV0RW50cnkoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNW
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsKKyAgICBBZGRS
ZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQpOworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWdu
ZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsgfQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VS
VCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAg
ICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9p
ZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNl
IG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVy
YXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxv
dyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgorICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFw
OworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVN
YXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVN
ZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmluZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kc19oCisKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3Qu
aCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6U3BhcnNlQXJyYXlWYWx1ZU1hcChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgOiBCYXNlKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3Bh
cnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fZmxhZ3MoTm9ybWFsKQor
ICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCit7Cit9CisKK2lubGluZSBTcGFyc2VBcnJheVZh
bHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpCit7Cit9CisKK2lubGluZSB2b2lkIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKK30KKworaW5saW5lIFNw
YXJzZUFycmF5VmFsdWVNYXAqIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3BhcnNlQXJyYXlWYWx1ZU1hcD4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3BhcnNlQXJyYXlWYWx1ZU1hcChnbG9iYWxEYXRhKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2
b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0
YXRpY19jYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAqPihjZWxsKS0+U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6flNwYXJzZUFycmF5VmFsdWVNYXAoKTsKK30KKworaW5saW5lIFN0cnVjdHVyZSogU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9
CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJh
eUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmlu
ZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAg
ICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAh
PSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVv
Zih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICBt
X3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0RW50cnkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Cisg
ICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRk
IHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhp
cyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNp
YmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3Zl
IGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJs
ZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICBpZiAoc2hv
dWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVh
ZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkgeworICAgICAgICBpZiAoZW50cnku
YXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuU3BhcnNlQXJy
YXlFbnRyeTo6QmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVy
KCkpOworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNl
dHRlcigpOworICAgIAorICAgIGlmICghc2V0dGVyKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJv
dykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVBy
b3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFy
c2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJy
YXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERp
cmVjdEluZGV4TW9kZSBtb2RlKQoreworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXks
IGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJhdGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3
YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAgICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0
aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFuZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8g
ZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNv
IHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJl
Y3QgJiYgcmVzdWx0LmlzTmV3RW50cnkgJiYgIWFycmF5LT5pc0V4dGVuc2libGUoKSkgeworICAg
ICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmlu
ZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICB9CisK
KyAgICBlbnRyeS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICBlbnRyeS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAor
eworICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOwor
CisgICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVj
dCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdl
dHRlcikgeworICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lk
IFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNv
bnN0Cit7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1
dGVzKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGFycmF5KSBjb25zdAoreworICAgIEpTVmFsdWUgcmVzdWx0ID0g
QmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBpZiAoTElLRUxZKCFyZXN1
bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBKU09i
amVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7CisgICAgaWYg
KCFnZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOworICAgIHJldHVybiBjYWxsKGV4ZWMsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworfQor
CitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOworICAgIHJldHVybiBCYXNlOjpnZXQoKTsK
K30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIHRoaXNNYXAgPSBqc0Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KHRoaXNPYmpl
Y3QpOworICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXNNYXAtPm1fbWFwLmVuZCgpOworICAgIGZvciAo
aXRlcmF0b3IgaXQgPSB0aGlzTWFwLT5tX21hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vjb25kKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFn
ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVmaW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2lu
Y2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0
eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0
UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9yYWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQgfTsKLSAgICBTdG9yYWdlQmFycmllcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9y
YWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAg
ICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIoUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVu
Y2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNldChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0
b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBV
bmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBtX3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAg
IH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
b3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsg
fQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90
IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQot
ICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBnZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0K
LQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJp
dmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9zdG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNw
cAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTcgQEAgdm9pZCBTdHJp
bmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZQogICAgIEpTT2JqZWN0OjpwdXQoY2VsbCwg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKK3ZvaWQgU3RyaW5nT2JqZWN0
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgU3RyaW5n
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KGNlbGwpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmNhbkdldEluZGV4KHByb3BlcnR5TmFtZSkp
IHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBKU09iamVjdDo6cHV0QnlJbmRleChjZWxsLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0
aHJvd0V4Y2VwdGlvbikKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKQEAgLTEzMyw2ICsxNDQsMTQgQEAgYm9vbCBTdHJpbmdP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBTdHJp
bmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaSkKK3sKKyAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFs
dWUoKS0+Y2FuR2V0SW5kZXgoaSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKK30K
Kwogdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAg
ICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTsKIApAQCAtNjYsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBKU1N0cmluZyopOwotICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVG
bGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdHJpbmdPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAgICAgfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCiAKKyNpbmNs
dWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgor
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKQorU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8p
CisgICAgLCBtX2luZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVj
dChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9i
amVjdD46Ok1heUJlTnVsbCkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHBy
b3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBA
QCBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlOjpzX2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdF
YXJseUNlbGwpCiAgICAgLCBtX3R5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbikKKyAgICAsIG1faW5kZXhpbmdUeXBlKDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9i
YWxEYXRhLCB0aGlzLCBqc051bGwoKSkKICAgICAsIG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAg
LCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcs
NiArMTk5LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3Ry
dWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1
cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0
dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8o
KSkKKyAgICAsIG1faW5kZXhpbmdUeXBlKHByZXZpb3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5KCkpCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+
c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2NsYXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0lu
Zm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcp
CkBAIC0yNTEsNiArMjU0LDggQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlN
YXAoSgogCiAgICAgZm9yIChwdHJkaWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsgaSA+
PSAwOyAtLWkpIHsKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCisgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVy
ZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblBy
ZXZpb3VzLmdldCgpKTsKICAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwogICAg
IH0KQEAgLTUwMiw2ICs1MDcsMzggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRl
bnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsK
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAg
CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3Ry
YW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAg
ICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRp
b247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5zaXRpb24tPm1fcHJldmlvdXMuc2V0KGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1
dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5
cGUgPSBpbmRleGluZ1R5cGU7CisgICAgCisgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQor
ICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPnNpemUoKSArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxl
YXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91cykK
KyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0
YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5
TWFwKCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRk
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHJldHVybiB0cmFuc2l0aW9uOworfQorCiAv
LyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2FjaGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wgU3Ry
dWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgU3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNs
YXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcgKzY5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAot
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0lu
Zm8qKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3Qg
Q2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAwLDYg
KzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFs
VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2VhbGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAg
ICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYpOwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJ
bmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygp
LmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBz
ZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9i
YWxPYmplY3QpOyB9CkBAIC0zMzQsNiArMzM4LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFz
c0luZm8pOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGlu
ZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAg
ICAgIApAQCAtMzYzLDcgKzM3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNz
SW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogICAgICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
Jik7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsK
IApAQCAtNDE2LDYgKzQyNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKIAogICAgICAg
ICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5
cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xv
YmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CkBA
IC00NDcsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAgICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gOiAxOwogICAgICAgICBib29sIG1faGFz
Tm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0
ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91
cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6
IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVudEV4dGVuc2lvbnMgOiAxOwogICAgICAgICB1
bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpAQCAtNDY1LDExICs0NzUsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKKyAgICBpbmxpbmUgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3Ry
dWN0dXJlKTsKICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxE
YXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IHR5cGVJbmZvLCBjbGFzc0luZm8pOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3Ry
dWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xh
c3NJbmZvLCBpbmRleGluZ1R5cGUpOwogICAgICAgICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogI2RlZmluZSBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAj
aW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zNyw2ICszOCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVyZTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbnMg
dGhhdCBkb24ndCBoYXZlIHRvIGRvIHdpdGggcHJvcGVydHkgYWRkaXRpb25zLgorCisvLyBTdXBw
b3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0
ZWQgdG8gcHJvcGVydGllcy4KKy8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmlu
ZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCitlbnVtIE5vblByb3BlcnR5VHJhbnNp
dGlvbiB7CisgICAgQWxsb2NhdGVBcnJheVN0b3JhZ2UKK307CisKK2lubGluZSB1bnNpZ25lZCB0
b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0
dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFsQXR0cmlidXRlOworfQorCitpbmxpbmUgSW5k
ZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Cisg
ICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBI
YXNBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBvbGRUeXBlOworICAgIH0KK30KKwogY2xhc3MgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlIHsKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgVXNpbmdTaW5nbGVT
bG90RmxhZyA9IDE7CiAKQEAgLTQ0LDcgKzY5LDEwIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSB7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwg
dW5zaWduZWQ+IEtleTsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBw
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBwLnNlY29uZDsKKyAgICAgICAgICAgIGlm
IChwLmZpcnN0KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwLmZpcnN0LT5leGlzdGluZ0hh
c2goKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pz
MV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9qczFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5q
cwkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwg
YWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHJldmVyc2UKIHZhbHVlICA9ICcxMjMnOwotZXhwZWN0
ID0gJzEyMyc7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJl
YWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnJl
dmVyc2UuY2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTczLDcgKzczLDcgQEAgcmVwb3J0Q29tcGFyZShl
eHBlY3QsIGFjdHVhbCwgc3VtbWFyeSArIAogCiAvLyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsKLWV4
cGVjdCA9ICdjYmEnOworZXhwZWN0ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0
byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlw
ZS5zb3J0LmNhbGwodmFsdWUpICsgJyc7CkBAIC0xMTQsNyArMTE0LDcgQEAgcmVwb3J0Q29tcGFy
ZSgnYWJjJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAnZGVm
JzsKLWV4cGVjdCA9IDY7CitleHBlY3QgPSAiVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWdu
IHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90
eXBlLnVuc2hpZnQuY2FsbCh2YWx1ZSwgJ2EnLCAnYicsICdjJyk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgcmVwb3J0Q29tcGFyZSgnZGVmJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzaGlmdAog
dmFsdWUgID0gJ2FiYyc7Ci1leHBlY3QgPSAnVHlwZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5Lic7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJl
YWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNo
aWZ0LmNhbGwodmFsdWUpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycs
IHZhbHVlLCBzdW1tYXJ5ICsgJzoKIAogLy8gc3BsaWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVj
dCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdU
eXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRy
eQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEsIDEp
ICsgJyc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjgwMDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NyBAQAorMjAxMi0wOS0wOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2
ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZWFjaCB0aGUgRE9NIHRoYXQgdG8gaW50ZXJjZXB0IGdldC9wdXQgb24g
aW5kZXhlZCBwcm9wZXJ0aWVzLCB5b3Ugbm93IGhhdmUKKyAgICAgICAgdG8gb3ZlcnJpZGUgZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCBhbmQgcHV0QnlJbmRleC4KKworICAgICAgICBObyBuZXcg
dGVzdHMgYmVjYXVzZSBubyBuZXcgYmVoYXZpb3IuIE9uZSB0ZXN0IHdhcyByZWJhc2VkIGJlY2F1
c2UgaW5kZXhlZAorICAgICAgICBwcm9wZXJ0eSBpdGVyYXRpb24gb3JkZXIgbm93IG1hdGNoZXMg
b3RoZXIgZW5naW5lcyAoaW5kZXhlZCBwcm9wZXJ0aWVzIGFsd2F5cworICAgICAgICBjb21lIGZp
cnN0KS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXJyYXlWYWx1ZTo6Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVj
dEpTQmxvYik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldFdlYmtpdExpbmVEYXNoKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmlu
Z0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9ET01TdHJpbmdMaXN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHV0QnlJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxs
OjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVs
bC5oOgorICAgICAgICAoSlNET01XaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSGlzdG9yeTo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xvY2F0aW9uOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0
Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViU29ja2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1RvSW5zcGVjdG9yVmFsdWUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBicmlkZ2Uv
cnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6UnVudGltZUFy
cmF5KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAoSlNDOjpS
dW50aW1lQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChSdW50aW1lQXJyYXkpOgor
CiAyMDEyLTA5LTA5ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBCdWlsZCBGaXguICA8cmRhcjovL3Byb2JsZW0vMTIyNjA4OTM+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDEwICs3MywxMSBAQCBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgs
IERpY3RpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheShtX3ZhbHVlKTsKLSAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChpbmRleCkpCisgICAg
Ly8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICBpZiAoIWFycmF5LT5jYW5H
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU1Zh
bHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgSlNWYWx1ZSBp
bmRleGVkVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICBpZiAoaW5k
ZXhlZFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWluZGV4ZWRWYWx1ZS5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcg
KzExOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCbG9iQ29uc3QKICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdl
dEluZGV4KGkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3Bh
cnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAor
ICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogI2lmIEVO
QUJMRShCTE9CKQogICAgICAgICBpZiAoaXRlbS5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19p
bmZvKSkKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLT5hcHBlbmQoY29udGV4dCwgdG9BcnJheUJ1
ZmZlcihpdGVtKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOSBAQCB2
b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJrCiAKICAgICBEYXNoQXJyYXkg
ZGFzaDsKICAgICBKU0FycmF5KiB2YWx1ZUFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgLy8g
RklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWVBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBmbG9hdCBlbGVtID0g
dmFsdWVBcnJheS0+Z2V0SW5kZXgoaSkudG9GbG9hdChleGVjKTsKKyAgICAgICAgZmxvYXQgZWxl
bSA9IHZhbHVlQXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b0Zsb2F0KGV4ZWMpOwogICAgICAg
ICBpZiAoZWxlbSA8PSAwIHx8ICFpc2Zpbml0ZShlbGVtKSkKICAgICAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdMaXN0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmlu
Z0xpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4
ICszMyw5IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdG9ET01TdHJpbmdMaXMKIAogICAg
IEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IHN0cmluZ0xpc3QgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTog
V2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheS0+bGVuZ3RoKCk7ICsraSkKLSAgICAgICAgc3RyaW5nTGlzdC0+YXBwZW5kKGFycmF5LT5n
ZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOworICAgICAgICBzdHJpbmdM
aXN0LT5hcHBlbmQoYXJyYXktPmdldEluZGV4UXVpY2tseShpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogCiAgICAgcmV0dXJuIHN0cmluZ0xpc3QucmVsZWFzZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMSBAQCBi
b29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eShKU0NlCiAgICAgcmV0dXJuICFlYzsK
IH0KIAorYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gZGVs
ZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkpOwor
fQorCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
CiB7CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTIgKzE2
MCwxMiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgLy8g
aXMgYWxsb3dlZC4KICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwogICAgIGJvb2wgYWxsb3dzQWNj
ZXNzID0gc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBs
KCksIGVycm9yTWVzc2FnZSk7Ci0KKyAgICAKICAgICAvLyBMb29rIGZvciBvdmVycmlkZXMgYmVm
b3JlIGxvb2tpbmcgYXQgYW55IG9mIG91ciBvd24gcHJvcGVydGllcywgYnV0IGlnbm9yZSBvdmVy
cmlkZXMgY29tcGxldGVseQogICAgIC8vIGlmIHRoaXMgaXMgY3Jvc3MtZG9tYWluIGFjY2Vzcy4K
ICAgICBpZiAoYWxsb3dzQWNjZXNzICYmIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KKyAgICAKICAgICAvLyBXZSBuZWVkIHRoaXMgY29kZSBoZXJlIGJlY2F1c2Ugb3Ro
ZXJ3aXNlIEpTRE9NV2luZG93QmFzZSB3aWxsIHN0b3AgdGhlIHNlYXJjaCBiZWZvcmUgd2UgZXZl
biBnZXQgdG8gdGhlCiAgICAgLy8gcHJvdG90eXBlIGR1ZSB0byB0aGUgYmxhbmtldCBzYW1lIG9y
aWdpbiAoc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdykgY2hlY2sgYXQgdGhlIGVuZCBvZiBn
ZXRPd25Qcm9wZXJ0eVNsb3QuCiAgICAgLy8gQWxzbywgaXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRo
ZSBpbXBsZW1lbnRhdGlvbiBzdHJhaWdodCBvdXQgb2YgdGhlIERPTVdpbmRvdyBwcm90b3R5cGUg
cmVnYXJkbGVzcyBvZgpAQCAtMjY5LDYgKzI2OSw4MiBAQCBib29sIEpTRE9NV2luZG93OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCitib29sIEpTRE9NV2lu
ZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRE9NV2lu
ZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CisgICAgCisgICAg
aWYgKCF0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgbWVzc2FnZSBoZXJlIHRoYXQgZXhwbGFpbnMgd2h5IHRoZSBwcm9wZXJ0
eSBhY2Nlc3MvZnVuY3Rpb24gY2FsbCB3YXMKKyAgICAgICAgLy8gbm90IGFsbG93ZWQuIAorICAg
ICAgICBzbG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBjcm9zcy1kb21haW4gYWNjZXNzIGhlcmUgd2l0
aG91dCBwcmludGluZyB0aGUgZ2VuZXJpYyB3YXJuaW5nIG1lc3NhZ2UKKyAgICAvLyBiZWNhdXNl
IHdlIGFsd2F5cyBhbGxvdyBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbiwganVzdCBkaWZmZXJlbnQg
b25lcyBkZXBlbmRpbmcgd2hldGhlciBhY2Nlc3MKKyAgICAvLyBpcyBhbGxvd2VkLgorICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBhbGxvd3NBY2Nlc3MgPSBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSwgZXJyb3JNZXNzYWdlKTsK
KworICAgIC8vIExvb2sgZm9yIG92ZXJyaWRlcyBiZWZvcmUgbG9va2luZyBhdCBhbnkgb2Ygb3Vy
IG93biBwcm9wZXJ0aWVzLCBidXQgaWdub3JlIG92ZXJyaWRlcyBjb21wbGV0ZWx5CisgICAgLy8g
aWYgdGhpcyBpcyBjcm9zcy1kb21haW4gYWNjZXNzLgorICAgIGlmIChhbGxvd3NBY2Nlc3MgJiYg
SlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhl
YywgaW5kZXgsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7CisgICAg
CisgICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZyYW1lcyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBw
cm9wZXJ0aWVzIHRvCisgICAgLy8gbWF0Y2ggTW96aWxsYS4gVGhpcyBkb2VzIG5vdCBtYXRjaCBJ
RSwgYnV0IHNvbWUgc2l0ZXMgZW5kIHVwCisgICAgLy8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhh
dCBjb25mbGljdCB3aXRoIHdpbmRvdyBwcm9wZXJ0aWVzIHRoYXQKKyAgICAvLyBhcmUgaW4gTW96
IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhhdmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwor
ICAgIC8vIGl0IHRoZSBNb3ogd2F5LgorICAgIGlmICh0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1l
KCktPnRyZWUoKS0+c2NvcGVkQ2hpbGQocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVy
dHlOYW1lKSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgY2hpbGRGcmFt
ZUdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEbyBw
cm90b3R5cGUgbG9va3VwIGVhcmx5IHNvIHRoYXQgZnVuY3Rpb25zIGFuZCBhdHRyaWJ1dGVzIGlu
IHRoZSBwcm90b3R5cGUgY2FuIGhhdmUKKyAgICAvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIGluZGV4
IGFuZCBuYW1lIGdldHRlcnMuICAKKyAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+cHJv
dG90eXBlKCk7CisgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKGFzT2Jq
ZWN0KHByb3RvKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGluZGV4LCBzbG90KSkgeworICAgICAg
ICAgICAgaWYgKCFhbGxvd3NBY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
cmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBTZWFyY2ggdGhlIHdob2xlIGZyYW1lIGhp
ZXJhcmNoeSBzb21ld2hlcmUgYXJvdW5kIGhlcmUuCisgICAgLy8gV2UgbmVlZCB0byB0ZXN0IHRo
ZSBjb3JyZWN0IHByaW9yaXR5IG9yZGVyLgorCisgICAgLy8gYWxsb3cgd2luZG93WzFdIG9yIHBh
cmVudFsxXSBldGMuICgjNTY5ODMpCisgICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpLT50cmVlKCktPnNjb3BlZENoaWxkQ291bnQoKSkgeworICAgICAgICBBU1NFUlQo
aW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKKyAgICAgICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzT2JqZWN0LCBpbmRleCwgaW5kZXhHZXR0ZXIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWFsbG93c0FjY2VzcykgeworICAgICAgICB0aGlzT2Jq
ZWN0LT5wcmludEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOworICAgICAgICBzbG90LnNldFVu
ZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBBbGxvdyBz
aG9ydGN1dHMgbGlrZSAnSW1hZ2UxJyBpbnN0ZWFkIG9mIGRvY3VtZW50LmltYWdlcy5JbWFnZTEK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPmRv
Y3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CisgICAgICAg
IEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJpbmco
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVy
dHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5hbWUp
KSkgeworICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZWRJdGVtR2V0
dGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
aW5kZXgsIHNsb3QpOworfQorCiBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01X
aW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOwpAQCAtMzYy
LDYgKzQzOCwyNSBAQCB2b2lkIEpTRE9NV2luZG93OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjCiAg
ICAgICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKIH0KIAordm9pZCBKU0RPTVdpbmRvdzo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5k
b3cqPihjZWxsKTsKKyAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsKKworICAgIC8vIE9wdGltaXphdGlvbjogYWNjZXNzIEph
dmFTY3JpcHQgZ2xvYmFsIHZhcmlhYmxlcyBkaXJlY3RseSBiZWZvcmUgaW52b2x2aW5nIHRoZSBE
T00uCisgICAgaWYgKHRoaXNPYmplY3QtPkpTR2xvYmFsT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eUZv
cldyaXRlKGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKEJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkp
KQorICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Q6OnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhl
YywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICBCYXNlOjpwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCiBib29sIEpT
RE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOwpAQCAtMzcxLDYgKzQ2NiwxNSBAQCBib29s
IEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqCiAgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wg
SlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpTRE9NV2luZG93KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CisgICAgLy8gT25seSBhbGxvdyBk
ZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhp
c09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBCYXNl
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDYgKzk3LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlT
bG8KICAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsKKyAgICByZXR1cm4gdGhpc09iamVj
dC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKIGJvb2wg
SlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkBAIC0xMDksNiArMTE1LDEy
IEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6cHV0KEpTQ2VsbCogY2VsbCwKICAgICB0aGlzT2Jq
ZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+cHV0KHRoaXNPYmplY3QtPndpbmRvdygpLCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBKU0RPTVdpbmRvd1No
ZWxsOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNE
T01XaW5kb3dTaGVsbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2Vs
bCk7CisgICAgdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
dGhpc09iamVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRo
cm93KTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXREaXJlY3RWaXJ0dWFsKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBKU0RPTVdpbmRvd1No
ZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihvYmplY3QpOwpAQCAt
MTI3LDYgKzEzOSwxMiBAQCBib29sIEpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5KEpT
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPndpbmRvdygpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAor
Ym9vbCBKU0RPTVdpbmRvd1NoZWxsOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0RPTVdp
bmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwqPihjZWxsKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDEwICs3OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNDOjpKU09iamVjdCopOwogICAgICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpOwogICAg
ICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgICAgICBzdGF0
aWMgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTUsNiArMTU1LDE1IEBAIGJvb2wgSlNIaXN0b3J5OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGMKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0hpc3Rvcnk6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lKQoreworICAgIEpTSGlzdG9yeSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0hpc3RvcnkqPihj
ZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBv
cmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhlYywgdGhpc09iamVj
dC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBC
YXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwogdm9pZCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTSGlzdG9yeSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDggQEAg
SlNWYWx1ZSBKU0luc3BlY3RvckZyb250ZW5kSG9zdDo6cG9ydChFeAogc3RhdGljIHZvaWQgcG9w
dWxhdGVDb250ZXh0TWVudUl0ZW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIENv
bnRleHRNZW51JiBtZW51KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxl
bmd0aCgpOyArK2kpIHsKLSAgICAgICAgSlNPYmplY3QqIGl0ZW0gPSBhc09iamVjdChhcnJheS0+
Z2V0SW5kZXgoaSkpOworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4g
c3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYx
MAorICAgICAgICBKU09iamVjdCogaXRlbSA9IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRleFF1aWNr
bHkoaSkpOwogICAgICAgICBKU1ZhbHVlIGxhYmVsID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgImxhYmVsIikpOwogICAgICAgICBKU1ZhbHVlIHR5cGUgPSBpdGVtLT5nZXQoZXhl
YywgSWRlbnRpZmllcihleGVjLCAidHlwZSIpKTsKICAgICAgICAgSlNWYWx1ZSBpZCA9IGl0ZW0t
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJpZCIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwxNSBAQCBib29sIEpTTG9jYXRpb246OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK2Jvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgSlNMb2NhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0
aW9uKj4oY2VsbCk7CisgICAgLy8gT25seSBhbGxvdyBkZWxldGluZyBieSBmcmFtZXMgaW4gdGhl
IHNhbWUgb3JpZ2luLgorICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKGV4ZWMsIHRo
aXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Cit9CisKIHZvaWQgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCwxMSBAQCBib29sIEpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsKiBjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNTdG9yYWdlOjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKK30KKwogdm9pZCBKU1N0b3JhZ2U6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RvcmFnZSo+KG9iamVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0
b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYlNvY2tldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldAogICAgICAgICAgICAgVmVjdG9y
PFN0cmluZz4gcHJvdG9jb2xzOwogICAgICAgICAgICAgSlNBcnJheSogcHJvdG9jb2xzQXJyYXkg
PSBhc0FycmF5KHByb3RvY29sc1ZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcm90b2NvbHNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IFN0cmluZyBwcm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhl
IGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBTdHJpbmcgcHJvdG9jb2wgPSBwcm90b2Nv
bHNBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
ICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcg
KzE0NCw4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW4KICAgICAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CiAgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1l
bnQgPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQg
aWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBh
cnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gZWxlbWVudFZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlLCBl
bGVtZW50LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDkgQEAgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5ndGhTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAg
ICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleChpbmRleCk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIGFycmF5IGlzIGluIHNwYXJzZSBtb2RlPyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU2MTAKKyAgICAgICAgICAg
ICAgICBpZiAoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gZ2V0U3BhcnNlSW5kZXgoYXJyYXksIGlu
ZGV4LCBoYXNJbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTc3NywyMyArNzc3LDI1IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgJGltcGxJbmNs
dWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgifSA9IDEgaWYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTQ3VzdG9tSGVhZGVyIn0gJiYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSk7CiAKLSAgICBteSAkaGFzR2V0dGVyID0gJG51
bUF0dHJpYnV0ZXMgPiAwCi0gICAgICAgICAgICAgICAgIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifQotICAgICAgICAgICAgICAgICB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KLSAgICAgICAgICAg
ICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRH
ZXR0ZXIifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQotICAgICAgICAgICAgICAgICB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFu
ZERlc2NyaXB0b3IifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CisgICAgbXkgJGhhc0Nv
bXBsZXhHZXR0ZXIgPQorICAgICAgICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
bmRleGVkR2V0dGVyIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifQorICAgICAgICB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFu
ZERlc2NyaXB0b3IifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOYW1lZEdldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CisgICAgCisgICAgbXkgJGhhc0dldHRlciA9ICRudW1B
dHRyaWJ1dGVzID4gMCB8fCAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENv
bnN0cnVjdG9yIn0gfHwgJGhhc0NvbXBsZXhHZXR0ZXI7CiAKICAgICAjIEdldHRlcnMKICAgICBp
ZiAoJGhhc0dldHRlcikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7XG4iKSBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdl
dHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVk
R2V0dGVyIn0pICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1l
ZEdldHRlciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICgkaGFz
Q29tcGxleEdldHRlcik7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07CiAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIn07CiAgICAgICAgICRzdHJ1
Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7CisgICAg
ICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIn0gPSAxOwogICAgIH0KIAogICAgICMgQ2hlY2sg
aWYgd2UgaGF2ZSBhbnkgd3JpdGFibGUgcHJvcGVydGllcwpAQCAtODA0LDE1ICs4MDYsMTcgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBteSAkaGFzU2V0dGVy
ID0gJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifQotICAgICAgICAgICAg
ICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRl
ciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUluZGV4ZWRTZXR0ZXIifTsKKyAgICBteSAkaGFzQ29tcGxleFNldHRlciA9CisgICAg
ICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0K
KyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRT
ZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21JbmRleGVkU2V0dGVyIn07CisgICAgICAgIAorICAgIG15ICRoYXNTZXR0ZXIgPSAkaGFzUmVh
ZFdyaXRlUHJvcGVydGllcyB8fCAkaGFzQ29tcGxleFNldHRlcjsKIAogICAgICMgR2V0dGVycwog
ICAgIGlmICgkaGFzU2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTtcbiIpIGlmICgkaGFzQ29tcGxleFNldHRlcik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgYm9vbCBwdXREZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9OwogICAgIH0K
IApAQCAtODQ4LDYgKzg1Miw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAgIyBDdXN0b20g
ZGVsZXRlUHJvcGVydHkgZnVuY3Rpb24KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21EZWxldGVQcm9wZXJ0eSJ9OwogCiAgICAgIyBDdXN0b20gZ2V0UHJvcGVydHlOYW1l
cyBmdW5jdGlvbiBleGlzdHMgb24gRE9NV2luZG93CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVx
ICJET01XaW5kb3ciKSB7CkBAIC0xNzQxLDIxICsxNzQ2LDc5IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Iklu
ZGV4ZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmlj
SW5kZXhlZEdldHRlciJ9KQotICAgICAgICAgICAgICAgICYmICEkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdClcbiIpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0KKyAgICAgICAgICAgICAgICB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0KKyAgICAgICAgICAgICAgICB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5
U2xvdEFuZERlc2NyaXB0b3IifSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJi
b29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwk
e2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHByb3BlcnR5TmFtZSA8
IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKS0+bGVuZ3Ro
KCkpIHtcbiIpOwotICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4
ZWMsIHByb3BlcnR5TmFtZSkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+aW5kZXhHZXR0ZXIpO1xuIik7CisK
KyAgICAgICAgICAgICMgVGhpcyBhdHRlbXB0cyB0byBzaW5rIHRoZSBzb21ld2hhdCBleHBlbnNp
dmUgaW50LXRvLXN0cmluZyBjb252ZXJzaW9uIHRoYXQgaGFwcGVucyB3aGVuIHdlIGNyZWF0ZSBQ
cm9wZXJ0eU5hbWUKKyAgICAgICAgICAgICMgdG8gdGhlIHBvaW50IHdoZXJlIHdlIGFjdHVhbGx5
IG5lZWQgaXQuIEluIHBhcnRpY3VsYXIsIHdoZW4gd2UgZ2VuZXJhdGUgdGhpcyBtZXRob2QgZm9y
IGNsYXNzZXMgdGhhdCBjYW4KKyAgICAgICAgICAgICMgYXR0ZW1wdCB0aGVpciBpbmRleGVkIGdl
dHRlciBmaXJzdCwgd2UgdHJ5IHRvIGVuc3VyZSB0aGF0IGlmIHRoYXQgZ2V0dGVyIHN1Y2NlZWRz
IHRoZW4gd2UgZG9uJ3QgcGF5IGZvciB0aGUKKyAgICAgICAgICAgICMgY3JlYXRpb24gb2YgdGhl
IFByb3BlcnR5TmFtZS4KKyAgICAgICAgICAgIG15ICRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUgPSAw
OworICAgICAgICAgICAgbXkgJHByb3BlcnR5TmFtZUdlbmVyYXRpb24gPSBzdWIgeworICAgICAg
ICAgICAgICAgIGlmICgkZ2VuZXJhdGVkUHJvcGVydHlOYW1lKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgJGdlbmVyYXRlZFByb3BlcnR5
TmFtZSA9IDE7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBteSAk
bWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbiA9IHN1YiB7CisgICAgICAgICAgICAgICAgbXkg
JHJlcXVpcmVzTWFudWFsTG9va3VwID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVk
R2V0dGVyIn07CisgICAgICAgICAgICAgICAgaWYgKCRyZXF1aXJlc01hbnVhbExvb2t1cCkgewor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjb25zdCBIYXNoRW50
cnkqIGVudHJ5ID0gJHtjbGFzc05hbWV9VGFibGUuZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZW50
cnkpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgZW50cnktPnByb3BlcnR5R2V0dGVyKCkpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB9XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRH
ZXR0ZXIifSAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRH
ZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwor
ICAgICAgICAgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTtcbiIpOworCisgICAgICAgICAgICBp
ZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pIHsK
KyAgICAgICAgICAgICAgICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncygkaW1wbENsYXNz
TmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkge1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGluZGV4
IDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5n
dGgoKSkge1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZh
bHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcbiIpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCB0aGlzT2JqZWN0
LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU5hbWVkR2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRp
b24oKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoY2FuR2V0
SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVj
dC0+aW1wbCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmpl
Y3QtPm5hbWVHZXR0ZXIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmgifSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
TmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlv
bigpOworICAgICAgICAgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlw
dG9yIn0pIHsKKyAgICAgICAgICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0
T3duUHJvcGVydHlTbG90RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtc
biIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBpbmRleCwgc2xvdCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKICAgICAgICAgfQogCkBAIC0xOTQ2LDE2ICsyMDA5LDMwIEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTtc
biIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0pIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIGJvb2wpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xh
c3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybjtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9IHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6cHV0QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+
KGNlbGwpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUluZGV4ZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkge1xuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgVU5VU0VEX1BB
UkFNKHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2
YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KSlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwg
ZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjb25zdCBDbGFzc0luZm8g
UnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50aW1lQXJyYXkiLCAmSlNBcnJheTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVBcnJheSkgfTsKIAogUnVudGltZUFy
cmF5OjpSdW50aW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAgOiBKU0Fy
cmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9hcnJheSgwKQog
ewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxMyArNzMsMTMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJh
eSk7CiAgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmLCBCaW5kaW5nczo6QXJyYXkqKTsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBKU0FycmF5OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdz
OwogCiBwcml2YXRlOgogICAgIFJ1bnRpbWVBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyODAwMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIHByb3BlcnR5IGJ1dHRl
cmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MTkzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
ZGlmeSB0aGUgdGVzdCB0byBpbmRpY2F0ZSB0aGF0IGl0ZXJhdGluZyBvdmVyIHByb3BlcnRpZXMg
bm93IHJldHVybnMKKyAgICAgICAgaW5kZXhlZCBwcm9wZXJ0aWVzIGZpcnN0LiBUaGlzIGlzIGEg
YmVoYXZpb3IgY2hhbmdlIHRoYXQgbWFrZXMgdXMgbW9yZQorICAgICAgICBjb21wbGlhbnQgd2l0
aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9K
U09OLXN0cmluZ2lmeS5qczoKKwogMjAxMi0wOS0wOSAgRG9taW5pYyBNYXp6b25pICA8ZG1henpv
bmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTI3OTM2KTogTXVsdGlwbGUg
YWNjZXNzaWJpbGl0eSB0ZXN0cyBmYWlsaW5nIG9uIExpb24KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9KU09OLXN0cmluZ2lmeS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzM0LDcgKzMzNCw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVRlc3RzKCkgewog
ICAgICAgICBqc29uT2JqZWN0LnN0cmluZ2lmeSh7YToiYSIsIGI6ImIiLCBjOiJjIiwgMzogImQi
LCAyOiAiZSIsIDE6ICJmIn0sIHJlcGxhY2VGdW5jKTsKICAgICAgICAgcmV0dXJuIHJlcGxhY2VU
cmFja2VyOwogICAgIH0pOwotICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uZXhwZWN0ZWQg
PSAnKHN0cmluZyl7ImEiOiJhIiwiYiI6ImIiLCJjIjoiYyIsIjMiOiJkIiwiMiI6ImUiLCIxIjoi
ZiJ9O2Eoc3RyaW5nKSJhIjtiKHN0cmluZykiYiI7YyhzdHJpbmcpImMiOzMoc3RyaW5nKSJkIjsy
KHN0cmluZykiZSI7MShzdHJpbmcpImYiOyc7CisgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAx
XS5leHBlY3RlZCA9ICcoc3RyaW5nKXsiMSI6ImYiLCIyIjoiZSIsIjMiOiJkIiwiYSI6ImEiLCJi
IjoiYiIsImMiOiJjIn07MShzdHJpbmcpImYiOzIoc3RyaW5nKSJlIjszKHN0cmluZykiZCI7YShz
dHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7JzsKICAgICByZXN1bHQucHVzaChm
dW5jdGlvbihqc29uT2JqZWN0KXsKICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgdmFy
IGFycmF5ID0gW3t0b1N0cmluZzpmdW5jdGlvbigpe2NvdW50Kys7IGFycmF5WzBdPSdhJzsgYXJy
YXlbMV09J2MnOyBhcnJheVsyXT0nYic7IHJldHVybiAnYSd9fV07Cg==
</data>
<flag name="commit-queue"
          id="174317"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163020</attachid>
            <date>2012-09-09 17:39:24 -0700</date>
            <delta_ts>2012-09-09 18:32:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>butterflies_patch_38.diff</filename>
            <type>text/plain</type>
            <size>522051</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3MyBA
QAorMjAxMi0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEpTQyBvYmplY3Qg
bW9kZWwuIFByZXZpb3VzbHksIGFsbCBvYmplY3RzIGhhZCBmYXN0IGxvb2t1cCBmb3IKKyAgICAg
ICAgbmFtZWQgcHJvcGVydGllcy4gSW50ZWdlciBpbmRleGVkIHByb3BlcnRpZXMgd2VyZSBvbmx5
IGZhc3QgaWYgeW91IHVzZWQgYQorICAgICAgICBKU0FycmF5LiBXaXRoIHRoaXMgY2hhbmdlLCBh
bGwgb2JqZWN0cyBoYXZlIGZhc3QgaW5kZXhlZCBwcm9wZXJ0aWVzLiBUaGlzIGlzCisgICAgICAg
IGFjY29tcGxpc2hlZCB3aXRob3V0IGFueSBzcGFjZSBvdmVyaGVhZCBieSB1c2luZyBhIGJpZGly
ZWN0aW9uYWwgb2JqZWN0IGxheW91dCwKKyAgICAgICAgYWthIGJ1dHRlcmZsaWVzLiBFYWNoIEpT
T2JqZWN0IGhhcyBhIG1fYnV0dGVyZmx5IHBvaW50ZXIgd2hlcmUgcHJldmlvdXNseSBpdAorICAg
ICAgICBoYWQgYSBtX291dE9mTGluZVN0b3JhZ2UgcG9pbnRlci4gVG8gdGhlIGxlZnQgb2YgdGhl
IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgbV9idXR0ZXJmbHksIHdlIHBsYWNlIGFs
bCBuYW1lZCBvdXQtb2YtbGluZSBwcm9wZXJ0aWVzLiBUbyB0aGUgcmlnaHQsIHdlIHBsYWNlCisg
ICAgICAgIGFsbCBpbmRleGVkIHByb3BlcnRpZXMgYWxvbmcgd2l0aCBpbmRleGluZyBtZXRhLWRh
dGEuIFRob3VnaCwgc29tZSBpbmRleGluZworICAgICAgICBtZXRhLWRhdGEgaXMgcGxhY2VkIGlu
IHRoZSA4LWJ5dGUgd29yZCBpbW1lZGlhdGVseSBsZWZ0IG9mIHRoZSBwb2ludGVkLXRvCisgICAg
ICAgIGxvY2F0aW9uOyB0aGlzIGlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgaW5kZXhpbmcgbWV0
YS1kYXRhIGJlaW5nIHNtYWxsIGVub3VnaAorICAgICAgICBpbiB0aGUgY29tbW9uIGNhc2UgdGhh
dCBtX2J1dHRlcmZseSBhbHdheXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbmRleGVkCisgICAgICAg
IHByb3BlcnR5LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZSBuZXV0cmFs
LCBleGNlcHQgb24gdGVzdHMgdGhhdCB1c2UgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uCisgICAgICAg
IHBsYWluIG9iamVjdHMsIHdoZXJlIHRoZSBzcGVlZC11cCBpcyBpbiBleGNlc3Mgb2YgYW4gb3Jk
ZXIgb2YgbWFnbml0dWRlLgorICAgICAgICAKKyAgICAgICAgT25lIG5vdGFibGUgYXNwZWN0IG9m
IHdoYXQgdGhpcyBjaGFuZ2UgYnJpbmdzIGlzIHRoYXQgaXQgYWxsb3dzIGluZGV4aW5nCisgICAg
ICAgIHN0b3JhZ2UgdG8gbW9ycGggb3ZlciB0aW1lLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVz
ZWQgdG8gYWxsb3cgYWxsIG5vbi1hcnJheQorICAgICAgICBvYmplY3RzIHRvIHN0YXJ0IG91dCB3
aXRob3V0IGFueSBpbmRleGVkIHN0b3JhZ2UuIEJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvcgorICAg
ICAgICBzb21lIGtpbmRzIG9mIGFycmF5IHR5cGUgaW5mZXJlbmNlIGluIHRoZSBmdXR1cmUuCisK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDYWxsYmFja09i
amVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBB
UEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVGcm9tU3RydWN0dXJlKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjdFB1dEJ5SWQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OkFkamFjZW5jeUxpc3Q6OkFkamFjZW5jeUxpc3QpOgorICAgICAgICAoQWRqYWNlbmN5TGlz
dCk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
ZnJvbU9ic2VydmVkKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlQWxyZWFkeUNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpERkc6Om1vZGVUb1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlVXNlc0J1dHRl
cmZseSk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUlzSlNBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6aXNJbkJvdW5kc0FjY2Vzcyk6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZVN1cHBvcnRz
TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldFByb3BlcnR5U3Rv
cmFnZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZv
cm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnB1dEJ5VmFsKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRC
eUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAg
ICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAoSlNDOjpERkc6
OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fs
bE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxv
Y2F0ZUJhc2ljSlNPYmplY3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAg
ICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNwYWNlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTQXJyYXkpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfbmV3X2FycmF5KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAg
ICoganNjLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRz
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmlzRGVuc2VFbm91Z2hGb3JWZWN0b3IpOgorICAgICAgICAoSlND
OjppbmRleGluZ0hlYWRlckZvckFycmF5KToKKyAgICAgICAgKEpTQzo6YmFzZUluZGV4aW5nSGVh
ZGVyRm9yQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0pv
aW4pOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTWFwKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNFdmVyeSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29tZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5o
OgorICAgICAgICAoQXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5U3RvcmFnZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChBcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpBcnJheVN0b3JhZ2U6OkFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkFycmF5U3Rv
cmFnZTo6ZnJvbSk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleGluZ0hlYWRlcik6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpzZXRM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
QXJyYXlTdG9yYWdlOjpjb3B5SGVhZGVyRnJvbUR1cmluZ0dDKToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjppblNwYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjpudW1WYWx1ZXNJblZlY3Rvck9mZnNl
dCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjppbmRleEJpYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eVN0b3JhZ2U6OnNwYXJzZU1hcE9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6
c2l6ZUZvcik6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJmbHkuaDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpC
dXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnRvdGFsU2l6ZSk6CisgICAgICAg
IChKU0M6OkJ1dHRlcmZseTo6ZnJvbUJhc2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkJ1dHRl
cmZseTo6aW5kZXhpbmdQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjphcnJheVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZs
eUlubGluZU1ldGhvZHMuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1
cmluZ0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmJhc2UpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpC
dXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpyZXNp
emVBcnJheSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6dW5zaGlmdCk6CisgICAgICAgIChK
U0M6OkJ1dHRlcmZseTo6c2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6Cisg
ICAgICAgIChNZXRob2RUYWJsZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlZlY3Rvckxlbmd0
aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpJbmRleGluZ0hlYWRlcik6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjp2ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6c2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdI
ZWFkZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRQ
dWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbSk6CisgICAg
ICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YpOgorICAgICAgICAoSlNDOjpJbmRl
eGluZ0hlYWRlcjo6cHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OmFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpidXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnByZUNh
cGFjaXR5KToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAg
KiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6
SlNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0FjdGl2
YXRpb24pOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OnRlYXJPZmYpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpjcmVh
dGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpkZWxl
dGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6cG9wKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNoaWZ0Q291bnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnQp
OgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnNvcnQpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpmaWxsQXJnTGlzdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNvbXBhY3RGb3JTb3J0aW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
SlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmlzTGVu
Z3RoV3JpdGFibGUpOgorICAgICAgICAoSlNDOjpjcmVhdGVBcnJheUJ1dHRlcmZseSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6Ym91bmRGdW5jdGlvbkNhbGwpOgorICAgICAgICAoSlNDOjpib3Vu
ZEZ1bmN0aW9uQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0NlbGwpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTRnVuY3Rpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
Lmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpI
b2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlYWxsb2NhdGVT
cGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dP
dXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnB1dERlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdFNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlh
bGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbXBsZXRlSW5pdGlhbGl6YXRp
b24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5TcGFyc2VJbmRleGluZ01vZGUpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Om91dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5kZXhpbmdTaG91bGRCZVNwYXJzZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6YnV0dGVyZmx5QWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojph
cnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JaZXJv
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3RvcmFnZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjaGVja0luZGV4aW5nQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlND
OjpKU05vbkZpbmFsT2JqZWN0OjpKU05vbkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRl
U3RvcmFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0SW5CdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UpOgorICAgICAgICAoSlND
OjppbmRleFJlbGF0aXZlVG9CYXNlKToKKyAgICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb0Jh
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6VHlwZUluZm86OmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8pOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgIChPYmplY3RQcm90
b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpT
Qzo6b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9QdXRE
aXJlY3RJbmRleE1vZGUuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0Fy
cmF5OjpSZWdFeHBNYXRjaGVzQXJyYXkpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpSZWdFeHBNYXRjaGVz
QXJyYXk6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5oOgorICAgICAgICAoUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6UmVn
RXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAg
ICAgIChSZWdFeHBPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvUmVqZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cmVqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFNwYXJzZUFycmF5RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVu
dHJ5OjpTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKFNwYXJzZUFycmF5VmFsdWVNYXApOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzcGFyc2VNb2RlKToKKyAgICAgICAg
KEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0U3BhcnNlTW9kZSk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6Omxlbmd0aElzUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpT
cGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6Om5vdEZv
dW5kKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXNFbXB0eSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFs
dWVNYXA6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZW5kKToK
KyAgICAgICAgKiBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
On5TcGFyc2VBcnJheVZhbHVlTWFwKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpkZXN0cm95KToKKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKToKKyAgICAgICAgKEpTQzo6U3BhcnNl
QXJyYXlWYWx1ZU1hcDo6cHV0RW50cnkpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVl
TWFwOjpwdXREaXJlY3QpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXQpOgor
ICAgICAgICAoSlNDOjpTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKToKKyAgICAg
ICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICog
cnVudGltZS9TdG9yYWdlQmFycmllci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpwdXRCeUluZGV4KToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAoU3RyaW5nT2Jq
ZWN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnRvQXR0cmlidXRlcyk6CisgICAgICAg
IChKU0M6Om5ld0luZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZTo6SGFzaDo6aGFzaCk6CisgICAgICAgICogdGVzdHMvbW96aWxsYS9qczFfNi9BcnJh
eS9yZWdyZXNzLTMwNDgyOC5qczoKKwogMjAxMi0wOS0wOSAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHRoZSBTdHJpbmcgaW5pdGlhbGl6YXRp
b24gb24gdGhlIGZ1bmN0aW9uIHNpZGUgb2YgU3RyaW5nOjpudW1iZXIoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1
LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1NtYWxs
U3RyaW5ncy5jcHAKKyAgICBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCiAgICAgcnVu
dGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKICAgICBydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAogICAgIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
NTMsOCArNDUzLDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdl
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludGVnZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcCBc
CkBAIC00NjMsNiArNDY1LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaCBcCkBAIC01MDcsNiArNTExLDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmRleGluZ1R5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAgXApAQCAtNjExLDcgKzYxOCw5IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
T2Zmc2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdGVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXREaXJlY3RJbmRleE1vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENhY2hlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ2FjaGUuaCBcCkBAIC02MjgsMTEgKzYzNywxNCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ0NvdW50ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxT
dHJpbmdzLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0b3JhZ2VCYXJyaWVy
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2
YWxBY3RpdmF0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBj
b3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwIFwKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAogICAgIHJ1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCisgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cCBcCiAgICAgcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXAogICAgIHJ1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL1N0cmluZ09iamVjdC5jcHAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQmpvZXJuIEdyYWYgKGJqb2Vybi5ncmFmQGdtYWlsLmNvbSkKICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMjIsOCArMjIsMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisj
aW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBQ
YXJlbnQ6Om1ldGhvZFRhYmxlOwogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFz
SW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hh
c0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CkBAIC0xNzgsNiArMTc4LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIAogICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTg3LDcgKzE4OCw3IEBAIHByaXZhdGU6CiAKICAgICBz
dGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUgcHJvdG8pOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDYgKzE4MywxMiBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJv
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Citib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
cmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgogSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmRl
ZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgaGludCkKIHsKICAgICBjb25zdCBKU0NhbGxiYWNrT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PGNvbnN0IEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwpAQCAt
NDQ5LDcgKzQ1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50PjoK
IH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihvYmplY3QpOwog
ICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZXhlYyk7CkBAIC00ODQsNyArNDkwLDcg
QEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBybwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIFBhcmVudDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAog
I2luY2x1ZGUgIkpTT2JqZWN0UmVmUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRl
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw2IEBAIEVYUE9SVFMK
ICAgICA/PzBSZWdFeHBPYmplY3RASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1
Y3R1cmVAMUBQQVZSZWdFeHBAMUBAWgogICAgID8/MFNIQTFAV1RGQEBRQUVAWFoKICAgICA/PzBT
dHJpbmdPYmplY3RASlNDQEBJQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAQFoK
LSAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxP
YmplY3RAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFAUEJVQ2xhc3NJbmZvQDFAQFoKICAgICA/
PzBUaHJlYWRDb25kaXRpb25AV1RGQEBRQUVAWFoKICAgICA/PzBXVEZUaHJlYWREYXRhQFdURkBA
UUFFQFhaCiAgICAgPz8wWWFyclBhdHRlcm5AWWFyckBKU0NAQFFBRUBBQlZTdHJpbmdAV1RGQEBf
TjFQQVBCREBaCkBAIC0xNzksMTMgKzE3OCwxMSBAQCBFWFBPUlRTCiAgICAgP2Zhc3RSZWFsbG9j
QFdURkBAWUFQQVhQQVhJQFoKICAgICA/ZmFzdFN0ckR1cEBXVEZAQFlBUEFEUEJEQFoKICAgICA/
ZmFzdFplcm9lZE1hbGxvY0BXVEZAQFlBUEFYSUBaCi0gICAgP2ZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3RASlNPYmplY3RASlNDQEBBQUVYQUFWUHJvcGVydHlTbG90QDJAUEFWPyRXcml0ZUJhcnJpZXJC
YXNlQFc0VW5rbm93bkBKU0NAQEAyQEBaCiAgICAgP2ZpbmFsaXplQFdlYWtIYW5kbGVPd25lckBK
U0NAQFVBRVhWPyRIYW5kbGVAVzRVbmtub3duQEpTQ0BAQDJAUEFYQFoKICAgICA/ZmluZEFsbG9j
YXRvckBXZWFrU2V0QEpTQ0BAQUFFUEFVRnJlZUNlbGxAV2Vha0Jsb2NrQDJAWFoKICAgICA/Zmlu
aXNoQ3JlYXRpb25AQm9vbGVhbk9iamVjdEBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgog
ICAgID9maW5pc2hDcmVhdGlvbkBEYXRlSW5zdGFuY2VASlNDQEBJQUVYQUFWSlNHbG9iYWxEYXRh
QDJATkBaCiAgICAgP2ZpbmlzaENyZWF0aW9uQEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVYQUFW
SlNHbG9iYWxEYXRhQDJAQUJWU3RyaW5nQFdURkBAQFoKLSAgICA/ZmluaXNoQ3JlYXRpb25ASlNB
cnJheUBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBJQFoKICAgICA/ZmluaXNoQ3JlYXRpb25A
UmVnRXhwT2JqZWN0QEpTQ0BASUFFWFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKICAgICA/ZmluaXNo
Q3JlYXRpb25AU3RyaW5nT2JqZWN0QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQFBBVkpTU3Ry
aW5nQDJAQFoKICAgICA/Zm9jdXNAUHJvZmlsZUBKU0NAQFFBRVhQQlZQcm9maWxlTm9kZUAyQEBa
CkBAIC0yMDEsOSArMTk4LDcgQEAgRVhQT1JUUwogICAgID9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JASlNHbG9iYWxPYmplY3RASlNDQEBTQV9OUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBW
UHJvcGVydHlOYW1lQDJAQUFWUHJvcGVydHlEZXNjcmlwdG9yQDJAQFoKICAgICA/Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yQEpTT2JqZWN0QEpTQ0BAU0FfTlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZQ
cm9wZXJ0eU5hbWVAMkBBQVZQcm9wZXJ0eURlc2NyaXB0b3JAMkBAWgogICAgID9nZXRPd25Qcm9w
ZXJ0eU5hbWVzQEpTT2JqZWN0QEpTQ0BAU0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVy
dHlOYW1lQXJyYXlAMkBXNEVudW1lcmF0aW9uTW9kZUAyQEBaCi0gICAgP2dldE93blByb3BlcnR5
TmFtZXNASlNTeW1ib2xUYWJsZU9iamVjdEBKU0NAQFNBWFBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0
YXRlQDJAQUFWUHJvcGVydHlOYW1lQXJyYXlAMkBXNEVudW1lcmF0aW9uTW9kZUAyQEBaCiAgICAg
P2dldE93blByb3BlcnR5U2xvdEBKU0dsb2JhbE9iamVjdEBKU0NAQFNBX05QQVZKU0NlbGxAMkBQ
QVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAQUFWUHJvcGVydHlTbG90QDJAQFoKLSAgICA/
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleEBKU0FycmF5QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBB
VkV4ZWNTdGF0ZUAyQElBQVZQcm9wZXJ0eVNsb3RAMkBAWgogICAgID9nZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4QEpTT2JqZWN0QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElB
QVZQcm9wZXJ0eVNsb3RAMkBAWgogICAgID9nZXRQcm9wZXJ0eU5hbWVzQEpTT2JqZWN0QEpTQ0BA
U0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVydHlOYW1lQXJyYXlAMkBXNEVudW1lcmF0
aW9uTW9kZUAyQEBaCiAgICAgP2dldFNsaWNlQEFyZ0xpc3RASlNDQEBRQkVYSEFBVjEyQEBaCkBA
IC0yMTQsNyArMjA5LDYgQEAgRVhQT1JUUwogICAgID9nZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9y
QEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxPYmplY3RA
SlNDQEBRQUVQQVZFeGVjU3RhdGVAMkBYWgogICAgID9nbG9iYWxPYmplY3RDb3VudEBIZWFwQEpT
Q0BAUUFFSVhaCi0gICAgP2dyb3dPdXRPZkxpbmVTdG9yYWdlQEpTT2JqZWN0QEpTQ0BAUUFFUEFW
PyRXcml0ZUJhcnJpZXJCYXNlQFc0VW5rbm93bkBKU0NAQEAyQEFBVkpTR2xvYmFsRGF0YUAyQElJ
QFoKICAgICA/Z3Jvd0BIYW5kbGVTZXRASlNDQEBBQUVYWFoKICAgICA/aGFzSW5zdGFuY2VASlNP
YmplY3RASlNDQEBTQV9OUEFWMTJAUEFWRXhlY1N0YXRlQDJAVkpTVmFsdWVAMkAyQFoKICAgICA/
aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQElAWgpAQCAtMjc3
LDcgKzI3MSw2IEBAIEVYUE9SVFMKICAgICA/cHV0QEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FYUEFW
SlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJAQUFWUHV0
UHJvcGVydHlTbG90QDJAQFoKICAgICA/cHV0QEpTT2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJA
UEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJAQUFWUHV0UHJvcGVydHlT
bG90QDJAQFoKICAgICA/cHV0QnlJbmRleEBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQFBB
VkV4ZWNTdGF0ZUAyQElWSlNWYWx1ZUAyQF9OQFoKLSAgICA/cHV0RGlyZWN0SW5kZXhCZXlvbmRW
ZWN0b3JMZW5ndGhASlNBcnJheUBKU0NAQEFBRV9OUEFWRXhlY1N0YXRlQDJASVZKU1ZhbHVlQDJA
VzRQdXREaXJlY3RJbmRleE1vZGVAMkBAWgogICAgID9wdXREaXJlY3RWaXJ0dWFsQEpTR2xvYmFs
T2JqZWN0QEpTQ0BAU0FYUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1l
QDJAVkpTVmFsdWVAMkBJQFoKICAgICA/cHV0RGlyZWN0VmlydHVhbEBKU09iamVjdEBKU0NAQFNB
WFBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBWSlNWYWx1ZUAyQElAWgogICAg
ID9yYW5kb21OdW1iZXJAV1RGQEBZQU5YWgpAQCAtMzU5LDcgKzM1Miw2IEBAIEVYUE9SVFMKICAg
ICA/dHJ5RmFzdENhbGxvY0BXVEZAQFlBP0FVVHJ5TWFsbG9jUmV0dXJuVmFsdWVAMUBJSUBaCiAg
ICAgP3RyeUZhc3RNYWxsb2NAV1RGQEBZQT9BVVRyeU1hbGxvY1JldHVyblZhbHVlQDFASUBaCiAg
ICAgP3RyeUZhc3RSZWFsbG9jQFdURkBAWUE/QVVUcnlNYWxsb2NSZXR1cm5WYWx1ZUAxQFBBWElA
WgotICAgID90cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWRASlNBcnJheUBKU0NAQElBRVBB
VjEyQEFBVkpTR2xvYmFsRGF0YUAyQElAWgogICAgID90cnlMb2NrQE11dGV4QFdURkBAUUFFX05Y
WgogICAgID90eXBlQERlYnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FXNFR5cGVAMTJAWFoKICAg
ICA/dW5sb2NrQEpTTG9ja0BKU0NAQFFBRVhYWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNiAr
NTE0LDU4IEBACiAJCQlOYW1lPSJydW50aW1lIgogCQkJPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5ccnVudGltZVxBcnJheVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ1R5cGUuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVu
dGltZVxQcm9wZXJ0eVN0b3JhZ2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQdXREaXJlY3RJbmRleE1vZGUuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxC
dXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQnV0dGVyZmx5LmgiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdI
ZWFkZXJJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEFy
cmF5Q29udmVudGlvbnMuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFNwYXJzZUFycmF5
VmFsdWVNYXAuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxydW50aW1lXEFyZ0xpc3QuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsOCBAQAogCQkwRjBCODNCNTE0QkNGODYyMDA4ODVC
NEYgLyogTWV0aG9kQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCMzE0QkNGODVFMDA4ODVCNEYgLyogTWV0aG9kQ2FsbExp
bmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYwQjgzQjcxNEJDRjhFMTAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCNjE0QkNGOERG
MDA4ODVCNEYgLyogR2xvYmFsUmVzb2x2ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0
dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJl
Y3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjBDRDRDNDE1
RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAg
LyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4
MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExp
bmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3QyAvKiBERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE4OCw2ICsxOTAsMTcgQEAKIAkJ
MEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRG
NUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBG
QjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0
RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjU0NjdEMTRGNUNG
RDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdDMTRGNUNGRDMwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKKwkJMEZCN0Yz
OTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAv
KiBBcnJheUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEEx
NUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3
QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhEMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJ
bmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkI3RjM5QjE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFBy
b3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlEMTVF
RDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RTE1
RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8q
IFNwYXJzZUFycmF5VmFsdWVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkI3RjM5RjE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFF
NDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFF
ODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThG
MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC01NjYsNyArNTc5LDYgQEAKIAkJQTc2NkI0NEYwRUU4RENEMTAw
OTUxOENBIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTc2QzUxNzYxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZDNTE3NDExODI3
NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklU
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi87IH07
Ci0JCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4MUUzNTgxNDE5NzBDNzAw
MDk0RDkwIC8qIFN0b3JhZ2VCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdF
RTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IH07CiAJCUE3ODRBMjY0MTFE
MTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4
Q2hlY2tlci5oICovOyB9OwogCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAg
Ki87IH07CkBAIC04MjksNiArODQxLDggQEAKIAkJMEYwQjgzQjMxNEJDRjg1RTAwODg1QjRGIC8q
IE1ldGhvZENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZXRob2RDYWxsTGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgz
QjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdsb2JhbFJlc29sdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
UmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93
UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTYwMTVBMTU2MTk4QkYwMEMyNTg3
QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ1LDYgKzk1OSwxNyBAQAogCQkwRkI1NDY3ODE0RjVD
NDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkI3RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3Jh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlTdG9yYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnV0dGVyZmx5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZCN0YzOEQxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRl
cklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhp
bmdIZWFkZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5kZXhpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTdG9yYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5
VmFsdWVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzOTMxNUVEOEUz
ODAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJE
RCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzM5LDcgKzEzNjQsNiBAQAogCQlBNzY3RkY5RjE0RjQ1MDI5MDA3
ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTc4MUUzNTgxNDE5NzBDNzAwMDk0RDkwIC8q
IFN0b3JhZ2VCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3Jh
Z2VCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3OUVEQjA4MTE1MzFD
RDYwMDE5RTkxMiAvKiBKU09iamVjdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNPYmplY3RSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFTVEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ludGF4Q2hlY2tlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAxNyw2ICsyMDQxLDIwIEBACiAJCTdFRjZFMEJCMEVC
N0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAgKi8sCisJCQkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVj
dEluZGV4TW9kZS5oICovLAorCQkJCTBGQjdGMzg5MTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheUNv
bnZlbnRpb25zLmggKi8sCisJCQkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3Rv
cmFnZS5oICovLAorCQkJCTBGQjdGMzhCMTVFRDhFMzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCAq
LywKKwkJCQkwRkI3RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9k
cy5oICovLAorCQkJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5o
ICovLAorCQkJCTBGQjdGMzhFMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGlu
ZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdU
eXBlLmggKi8sCisJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFn
ZS5oICovLAorCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3QuaCAqLywKKwkJ
CQkwRkI3RjM5MjE1RUQ4RTM4MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovLAor
CQkJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5l
TWV0aG9kcy5oICovLAorCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suY3BwICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0
LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAog
CQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjIw
Miw3ICsyMjQwLDYgQEAKIAkJCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5o
ICovLAotCQkJCUE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICov
LAogCQkJCUE3MzBCNjExMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5j
cHAgKi8sCiAJCQkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0
aW9uLmggKi8sCiAJCQkJQkMxOEMzQzAwRTE2RUUzMzAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVj
dG9yLmNwcCAqLywKQEAgLTI3NTIsNyArMjc4OSw2IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURD
MTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtK
SVQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3ODFFMzU5MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9y
YWdlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBF
MTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICov
LApAQCAtMjkwMSw2ICsyOTM3LDE4IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8q
IEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAv
KiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZB
NDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5NTE1RUQ4RTQ2
MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0Yz
OTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hl
YWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIElu
ZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCN0YzOUIx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
N0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlGMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwQ0Q0QzIxNUYx
QTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0z
NTAyLDYgKzM1NTAsNyBAQAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVT
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyog
SlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwQ0Q0QzQxNUY2QjZCQjAw
MzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUy
MENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lv
biAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE2ICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCisvLyBUaGlzIGlzIGEgYml0ZmllbGQgd2hl
cmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBJbmRleGluZ1R5cGUgdGhhdCB3ZSBoYXZlIHNlZW4u
CisvLyBUaGVyZSBhcmUgMTcgaW5kZXhpbmcgdHlwZXMgKDAgdG8gMTYsIGluY2x1c2l2ZSksIHNv
IDMyIGJpdHMgaXMgbW9yZSB0aGFuIGVub3VnaC4KIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2Rl
czsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzTm90QXJyYXkgPSAxOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIElzSlNBcnJheSAgPSAyOworI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAor
ICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKIAogaW5saW5lIEFycmF5TW9k
ZXMgYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBp
ZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAgICBy
ZXR1cm4gSXNKU0FycmF5OwotICAgIHJldHVybiBJc05vdEFycmF5OworICAgIHJldHVybiBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpOwogfQog
CiBjbGFzcyBBcnJheVByb2ZpbGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDEy
NzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE1LDcgKzE3MTUsOSBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERpcmVjCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoMCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5ICE9IG1fZ2xvYmFs
RGF0YS0+cHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoCisgICAgICAgIHByb3BlcnR5ICE9IG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvCisgICAgICAgICYmIFByb3BlcnR5TmFtZShwcm9wZXJ0eSkuYXNJ
bmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7CiAgICAgcmV0dXJuIHZhbHVlOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MiwxMSArODUyLDExIEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkpTQXJyYXk6CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwpAQCAtOTE2LDEwICs5MTYsMTAgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgogICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5Ogor
ICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAg
Zm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICAgICAgY2FzZSBPVVRf
T0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxk
MikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2Rl
T3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzQxLDcgKzEz
NDEsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBHZXRCdXR0
ZXJmbHk6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBA
IC0xMzU5LDggKzEzNTksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRP
ZkJvdW5kczoKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAg
ICAgIC8vIFRoaXMgZG9lc24ndCBmaWx0ZXIgYW55dGhpbmcgbWVhbmluZ2Z1bCByaWdodCBub3cu
IFdlIG1heSB3YW50IHRvIGFkZAogICAgICAgICAgICAgLy8gQ0ZBIHRyYWNraW5nIG9mIGFycmF5
IG1vZGUgc3BlY3VsYXRpb25zLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGF0LCB5ZXQuCiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTI3
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGVudW0geyBT
aXplID0gMyB9OwogICAgIAorICAgIEFkamFjZW5jeUxpc3QoKSB7IH0KKyAgICAKICAgICBBZGph
Y2VuY3lMaXN0KEtpbmQga2luZCkKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIDogbV9r
aW5kKGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDEyIEBAIEFycmF5OjpNb2Rl
IGZyb21PYnNlcnZlZChBcnJheU1vZGVzIG1vZGUKICAgICBzd2l0Y2ggKG1vZGVzKSB7CiAgICAg
Y2FzZSAwOgogICAgICAgICByZXR1cm4gQXJyYXk6OlVuZGVjaWRlZDsKLSAgICBjYXNlIElzSlNB
cnJheToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
cyA6IEFycmF5OjpKU0FycmF5OworICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyA6IEFycmF5OjpBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZTsKKyAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIHJldHVy
biBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzIDogQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEga2luZCBvZiBhcnJh
eSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1c2VmdWwgZGF0YSBp
biB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFjdCB1c2VmdWwgZGF0
YSBmcm9tCkBAIC0xMjAsMTAgKzEyNCwxNCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0
cmFjdFZhbHVlJiB2CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICByZXR1cm4gaXNT
dHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKKyAgICBjYXNl
IE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICByZXR1cm4gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5jbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6c19pbmZvOworICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0
dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSk7CisKKyAg
ICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSGFzQXJyYXlTdG9yYWdlKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3Vt
ZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CkBAIC0xNzQsMTAgKzE4MiwxOCBAQCBjb25z
dCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiRm9y
Y2VFeGl0IjsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIHJldHVybiAiU3RyaW5n
IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICByZXR1cm4gIkpTQXJyYXkiOwot
ICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJKU0Fy
cmF5T3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAg
cmV0dXJuICJBcnJheVN0b3JhZ2UiOworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOgorICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKKyAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlX
aXRoQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kcyI7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UiOworICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAg
IHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7CiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMiBAQCBlbnVt
IE1vZGUgewogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8gaWRlYSBo
b3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2ZSB1cC4K
ICAgICBHZW5lcmljLAogICAgIFN0cmluZywKLSAgICBKU0FycmF5LAotICAgIEpTQXJyYXlPdXRP
ZkJvdW5kcywKKyAgICBBcnJheVN0b3JhZ2UsCisgICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMs
CisgICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzLAorICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAorICAgIFBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCiAgICAgQXJndW1lbnRzLAogICAg
IEludDhBcnJheSwKICAgICBJbnQxNkFycmF5LApAQCAtNjEsNiArNjUsMjkgQEAgZW51bSBNb2Rl
IHsKIH07CiB9IC8vIG5hbWVzcGFjZSBBcnJheQogCisvLyBIZWxwZXJzIGZvciAnY2FzZScgc3Rh
dGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2Rlczoi
CisvLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rp
bmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhhdAorLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9y
YWdlIiBpbiB0aGVtLgorI2RlZmluZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworI2RlZmluZSBBTExfQVJSQVlf
U1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTk9OX0FSUkFZ
X0FSUkFZX1NUT1JBR0VfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNl
IEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUworI2RlZmluZSBJTl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQXJyYXk6OkFycmF5U3Rv
cmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlCisjZGVmaW5lIE9VVF9PRl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKKyAgICBBcnJheTo6QXJy
YXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcworCiBB
cnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlcywgYm9vbCBtYWtlU2FmZSk7
CiAKIEFycmF5OjpNb2RlIGZyb21TdHJ1Y3R1cmUoU3RydWN0dXJlKiwgYm9vbCBtYWtlU2FmZSk7
CkBAIC03MSwxMSArOTgsMzAgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1
ZSYsIAogCiBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOwogCitpbmxpbmUg
Ym9vbCBtb2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAgc3dp
dGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCiBpbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgIGNhc2UgQVJSQVlfV0lU
SF9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0luQm91
bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9k
ZSkgeworICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCwy
NSArMTYwLDYgQEAgaW5saW5lIEFycmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZAogICAg
IH0KIH0KIAotaW5saW5lIGJvb2wgbW9kZXNDb21wYXRpYmxlRm9yU3RvcmFnZUxvYWQoQXJyYXk6
Ok1vZGUgbGVmdCwgQXJyYXk6Ok1vZGUgcmlnaHQpCi17Ci0gICAgaWYgKGxlZnQgPT0gcmlnaHQp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGJvb2wgbGVmdElzSlNBcnJheSA9Ci0g
ICAgICAgIGxlZnQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAgICAgfHwgbGVmdCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGJvb2wgcmlnaHRJc0pTQXJyYXkgPQotICAg
ICAgICByaWdodCA9PSBBcnJheTo6SlNBcnJheQotICAgICAgICB8fCByaWdodCA9PSBBcnJheTo6
SlNBcnJheU91dE9mQm91bmRzOwotICAgIAotICAgIGlmIChsZWZ0SXNKU0FycmF5ICYmIHJpZ2h0
SXNKU0FycmF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIGlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpNb2RlIG1vZGUpCiB7CiAg
ICAgc3dpdGNoIChtb2RlKSB7CkBAIC0xNDcsNyArMTc0LDE1IEBAIGlubGluZSBib29sIG1vZGVJ
c1NwZWNpZmljKEFycmF5OjpNb2RlIG0KIAogaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3Ro
KEFycmF5OjpNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIG1vZGVJc1NwZWNpZmljKG1vZGUpOwor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICBjYXNlIE5P
Tl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODUsNyAr
MTY4NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KAogICAgIGlm
IChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNl
OwogICAgIGVsc2UKLSAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBo
KEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAgc2V0KGRlc3RpbmF0aW9uT3BlcmFuZCwKICAgICAg
ICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgIEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwKQEAgLTIzMTcs
NyArMjMxNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NE
YXRhOwpAQCAtMjM2OCwxMyArMjM2OCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRQ
cm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
LCBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9w
ZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVy
ZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3
ICs1ODMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgY2Fz
ZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExNjAsNyAr
MTE2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToK
ICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5h
dGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0QXJyYXlMZW5ndGgpOwog
ICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsK
LSAgICAgICAgICAgIG5vZGVQdHItPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAg
ICAgICAgICBub2RlUHRyLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCk7CiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIG5vZGVQdHItPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAgICAg
CkBAIC0zNjUsNiArMzY1LDE2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAg
Tm9kZUluZGV4IGFkZE5vZGUoY29uc3QgTm9kZSYgbm9kZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSkK
KyAgICB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKKyAg
ICAgICAgbV9ncmFwaC5hcHBlbmQobm9kZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVu
ZChtX2luZGV4SW5CbG9jaywgbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRl
KQorICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLnJlZigpOworICAgICAgICByZXR1cm4g
bm9kZUluZGV4OworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggY2hlY2tBcnJheShBcnJheTo6
TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBi
b29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5DU0VTdG9yYWdlLCBib29sIHNo
b3VsZEdlbmVyYXRlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtb2RlSXNTcGVjaWZp
YyhhcnJheU1vZGUpKTsKQEAgLTM4MSwxNSArMzkxLDExIEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihhcnJh
eSk7Ci0gICAgICAgIE5vZGUgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAg
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUp
LCBhcnJheSk7Ci0gICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkKLSAgICAgICAgICAgIGdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UucmVmKCk7Ci0gICAgICAgIE5vZGVJbmRleCBnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk7Ci0gICAgICAgIG1faW5zZXJ0aW9uU2V0
LmFwcGVuZChtX2luZGV4SW5CbG9jaywgZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4KTsK
ICAgICAgICAgCi0gICAgICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlSW5kZXg7
CisgICAgICAgIGlmIChtb2RlVXNlc0J1dHRlcmZseShhcnJheU1vZGUpKQorICAgICAgICAgICAg
cmV0dXJuIGFkZE5vZGUoTm9kZShHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KSwgc2hv
dWxkR2VuZXJhdGUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJy
YXkpLCBzaG91bGRHZW5lcmF0ZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYmxlc3NBcnJheU9w
ZXJhdGlvbihFZGdlIGJhc2UsIHVuc2lnbmVkIHN0b3JhZ2VDaGlsZElkeCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDczLDcgKzQ3
Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICBjYXNlIEFycmF5OjpKU0Fy
cmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdF
X01PREVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5vcCgpID09IEdldEJ5VmFsOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw4IEBAIHN0cnVjdCBPcEluZm8gewogc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFn
IHsgVmFyQXJnIH07CiAgICAgCisgICAgTm9kZSgpIHsgfQorICAgIAogICAgIC8vIENvbnN0cnVj
dCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCiAgICAg
Tm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQx
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0g
Tm9Ob2RlKQogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQ
aGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBc
CiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBO
b2RlUmVzdWx0U3RvcmFnZSkgXAotICAgIG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJl
c3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhHZXRCdXR0ZXJmbHksIE5vZGVSZXN1bHRTdG9yYWdl
KSBcCiAgICAgbWFjcm8oQ2hlY2tBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiQXJn
dW1lbnRzLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkRGR09TUkV4aXQuaCIKQEAgLTIyNiwxNCArMjI3LDE0IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEg
PSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
Z2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7
Ci0gICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAgICBp
ZiAoYXJyYXktPmNhblNldEluZGV4KGluZGV4KSkgewotICAgICAgICAgICAgYXJyYXktPnNldElu
ZGV4KGdsb2JhbERhdGEsIGluZGV4LCB2YWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwor
ICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAg
ICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJ
bmRleChhcnJheSwgZXhlYywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOworICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHN0
cmljdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0MSwxMSArMzQyLDEyIEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXgKICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCi0gICAgLy8gRklYTUU6IHRoZSBK
SVQgdXNlZCB0byBoYW5kbGUgdGhlc2UgaW4gY29tcGlsZWQgY29kZSEKLSAgICBpZiAoaXNKU0Fy
cmF5KGJhc2UpICYmIGFzQXJyYXkoYmFzZSktPmNhbkdldEluZGV4KGluZGV4KSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KGJhc2UpLT5nZXRJbmRleChpbmRleCkpOwor
ICAgIGlmIChiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChiYXNlKTsKKyAgICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXRJbmRl
eFF1aWNrbHkoaW5kZXgpKTsKKyAgICB9CiAKLSAgICAvLyBGSVhNRTogdGhlIEpJVHN0dWIgdXNl
ZCB0byByZWxpbmsgdGhpcyB0byBhbiBvcHRpbWl6ZWQgZm9ybSEKICAgICBpZiAoaXNKU1N0cmlu
ZyhiYXNlKSAmJiBhc1N0cmluZyhiYXNlKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzU3RyaW5nKGJhc2UpLT5nZXRJbmRleChleGVjLCBpbmRl
eCkpOwogCkBAIC01NDgsMTUgKzU1MCwxNSBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxDZWxsCiAgICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDxmYWxzZT4oZXhlYywg
SlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CiB9
CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRz
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIGludDMyX3QgaW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAogICAg
IGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlm
IGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZlY3Rvci4KLSAgICAgICAgQVNTRVJUKCFh
cnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChh
cnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsK
KyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAg
ICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRleCwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtNTY1LDE1ICs1NjcsMTUgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQmV5bwogICAgICAgICBhcnJheSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAot
dm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25T
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsK
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFsRGF0YSwgZXhlYyk7CiAgICAgCiAg
ICAgaWYgKGluZGV4ID49IDApIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUg
aWYgaW5kZXggaXMgb3V0c2lkZSB0aGUgZXhpc3RpbmcgdmVjdG9yLgotICAgICAgICBBU1NFUlQo
IWFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpOwotICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4
KGFycmF5LCBleGVjLCBpbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNl
KTsKKyAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXhRdWlja2x5KGluZGV4KSk7Cisg
ICAgICAgIGFycmF5LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KGFycmF5LCBleGVjLCBpbmRl
eCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKQEAgLTEyNzUsMjAgKzEyNzcsMjkgQEAgdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVTdAogCiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpLCAmcmVzdWx0
KSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVzdWx0KSArIGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSArIDEpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAg
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgaW5p
dGlhbE91dE9mTGluZUNhcGFjaXR5LCBmYWxzZSwgMCkpOwogfQogCiBjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYywgc2l6
ZV90IG5ld1NpemUpCiB7Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1
ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1NpemU7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KAorICAgICAgICBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCAwLCBuZXdTaXplLCBmYWxzZSwgMCkpOworfQorCitjaGFyKiBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAg
IEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZShleGVjLT5n
bG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0LT5z
ZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKK30KKworY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6
ZSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIAog
ZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMy
X3QgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB0eXBlZGVmIHNpemVfdCBERkdf
T1BFUkFUSU9OICgqU19ERkdPcGVyCiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19E
RkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6
ZV90IERGR19PUEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9O
ICgqU19ERkdPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkIERGR19P
UEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQVpKKShFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50
MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FT1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMp
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSW5saW5lQ2FsbEZyYW1lKik7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDSkopKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xMDYs
OCArMTA2LDEwIEBAIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXQKIHR5
cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRl
Kiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Ci10eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6
ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPKShF
eGVjU3RhdGUqLCBKU09iamVjdCopOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRU9TKShFeGVjU3RhdGUqLCBKU09iamVjdCosIHNpemVfdCk7CiB0eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0ZSosIHZv
aWQqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92
aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRv
byBjb21wbGV4IHRvIEpJVC4KIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmpl
Y3QoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpAQCAtMTQwLDggKzE0Miw4IEBAIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmkKIHZvaWQgREZHX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbENlbGxTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBp
bnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsK
LXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9u
U3RyaWN0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
aW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7
Cit2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBKU0FycmF5KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KikgV1RGX0lOVEVSTkFM
OwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKQEAgLTE4Nyw2ICsxODksOCBA
QCBzaXplX3QgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uCiB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNo
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0
YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0
b3JhZ2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBzaXplX3QgbmV3U2l6ZSkgV1RGX0lOVEVSTkFM
OwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVy
LCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlv
biBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlv
bnMgYWJvdmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTI3OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFBy
b3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiAKICAgICAgICAgY2Fz
ZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTI3
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk5LDEyICsxOTksMTIgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YgogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5hZGRyZXNzT2ZPdXRPZkxpbmVTdG9yYWdl
KCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YnV0
dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zm
c2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVz
dWx0VGFnR1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjU0LDEz
ICsyNTQsMTAgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgICAgIAogICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOyAKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkpKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWlsdXJlQ2Fz
ZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQpAQCAtNDI3LDcgKzQyNCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExp
c3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2Vsc2UKQEAgLTQ3
Nyw3ICs0NzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAg
ICAgICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpLCByZXN1bHRHUFIpOwogI2Vsc2UKQEAgLTY4NSwxNyArNjgyLDE3IEBAIHN0YXRpYyB2b2lk
IGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAr
IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgIGVsc2UgewotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVy
Zmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpIHsKICAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
KyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShz
bG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLSAgICAgICAgc3R1Ykpp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgCkBAIC04
MzQsNyArODMxLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
KiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIzKTsKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChzdHViSml0LmJyYW5jaFN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSkpOwogICAgICAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJy
ZW50UmVtYWluaW5nKTsKQEAgLTg0OCw3ICs4NDUsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAgICAgc2NyYXRjaEdQUjFI
YXNTdG9yYWdlID0gdHJ1ZTsKICAgICB9CiAKQEAgLTg1OCw4ICs4NTUsOCBAQCBzdGF0aWMgdm9p
ZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgp
KSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXNjcmF0Y2hH
UFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmVQ
dHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC04NjcsOSArODY0LDkgQEAgc3RhdGljIHZvaWQgZW1pdFB1
dFRyYW5zaXRpb25TdHViKAogICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNT
dG9yYWdlKQotICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0
Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBzdHViSml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKKyAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgICAgICAg
ICAgCkBAIC0xMDI0LDYgKzEwMjEsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlz
dChFeGVjU3RhdAogICAgICAgICAgICAgICAgICYmIG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHJlYWxs
b2MsIGFuZCB0aGUgc3RydWN0dXJlIGhhcworICAgICAgICAgICAgLy8gaW5kZXhpbmcgc3RvcmFn
ZS4KKyAgICAgICAgICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VDZWxsKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDcgKzUwOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRy
IHN0cnVjdHVyZVRvQ29tcGFyZTsKICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxl
cjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKICAgICAKLSAgICBKSVRD
b21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IG1faml0
LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0UGF5bG9hZEdQUik7
CisgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBh
eWxvYWRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIp
OwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRXaXRoUGF0Y2ggPSBt
X2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRk
cmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxDb21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBh
Y3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIApAQCAtNTY1LDcgKzU2NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAogICAgIHdyaXRlQmFycmllcihiYXNl
UGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc2NyYXRjaEdQUik7CiAKLSAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxl
TG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdT
dG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVl
VGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsMzIgcGF5bG9hZFN0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2godmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSk7CiAKQEAgLTI1NTQsNyArMjU1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OiB7CisgICAgICAg
IGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI1NjMs
MTQgKzI1NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHBy
b3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgot
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBh
cnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgc3BlY3VsYXRlZCB0aGF0IGl0J3Mgc29tZSBraW5kIG9mIGFycmF5
LCBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFRhZyh0aGlzKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMpOwpAQCAtMjU4MiwxMiArMjU3NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Cisg
ICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogCiAgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjU5NywxMyArMjU5
MSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAKLSAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMg
Y29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBj
YW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCBpdCdzIHNv
bWUga2luZCBvZiBhcnJheSwgYXQgdGhpcyBwb2ludC4KICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWdSZWcpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9s
ZSA9IG1faml0LmJyYW5jaDMyKApAQCAtMjcxMiw4ICsyNzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BS
UmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CkBAIC0yNzQxLDggKzI3MzAsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
ID09IEFycmF5OjpKU0FycmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5
b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5C
b3VuZHNBY2Nlc3Mobm9kZS5hcnJheU1vZGUoKSkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJv
dW5kcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0yNzU1LDkg
KzI3NDQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVz
SW5WZWN0b3IpKSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xl
IHdlIG1pZ2h0IGJlIGdyb3dpbmcgdGhlIGFycmF5OyAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
KTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcp
OwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnKTsK
IAogICAgICAgICAgICAgbGVuZ3RoRG9lc05vdE5lZWRVcGRhdGUubGluaygmbV9qaXQpOwpAQCAt
Mjc2Nyw3ICsyNzU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ1JlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlUGF5bG9hZFJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJheU1v
ZGUgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYgKCFpc0lu
Qm91bmRzQWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJleW9uZEFycmF5Qm91bmRzLCB0aGlzLApAQCAtMjg5NywxOCAr
Mjg4NiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAv
LyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdm
ZmZmZmZlKSkpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3Jl
MzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFn
ZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIApAQCAtMjkzMywx
OSArMjkyMiwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAg
ICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNldFVuZGVmaW5lZENhc2VzOwogICAg
ICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHZhbHVlVGFnR1BSKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHZhbHVlUGF5bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAg
ICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAogICAgICAgICBz
ZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHZhbHVlVGFnR1BSKSk7
CiAgICAgICAgIApAQCAtMzU4NywxNCArMzU3NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0
eVN0b3JhZ2U6IHsKKyAgICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBz
dG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTM5NTQsNyArMzk0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlc05vdE1hdGNoID0gbV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSk7CiAKICAgICAgICAgLy8gRmFzdCBjYXNlCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxS
ZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlc29sdmVJbmZvR1BSKTsKICNpZiBERkdfRU5BQkxFKEpJ
VF9BU1NFUlQpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQu
YnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9HUFIs
IFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICBKSVRDb21waWxlcjo6UGF0Y2hhYmxlSnVtcCBz
dHJ1Y3R1cmVDaGVjayA9IG1faml0LnBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwogICAgIAogICAgIEpJVENvbXBp
bGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAg
bV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBh
Y3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwg
cmVzdWx0R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9q
aXQubGFiZWwoKTsKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRQdXRCeUlkKENvZGVPCiAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1
ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCiAgICAg
SklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQot
ICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBK
SVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5s
YWJlbCgpOwpAQCAtMjU4NCw4ICsyNTg0LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0
LmdwcigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS5jaGlsZDMoKSk7CkBAIC0yNTk3LDI3ICsyNjE1LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdp
bGwgaGF2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCB0aGUgYmFzZSBpcyBzb21lIGtpbmQgb2Yg
YXJyYXksCi0gICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OkpTQXJyYXkpCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBvdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRP
ZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OkpTQXJyYXkpCi0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBob2xlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChob2xlKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmdwcigpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQsCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjcwMyw2ICsyNzEzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoYWxyZWFkeUhhbmRsZWQpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZSBtYXkg
bm90IGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBhcnJheSBhY2Nlc3MgbW9kZXMuIEJ1dCB3ZSBoYXZl
IHRvCisgICAgICAgIC8vIGtlZXAgaXQgYWxpdmUgdG8gdGhpcyBwb2ludCwgc28gaXQncyBsaWtl
bHkgdG8gYmUgaW4gYSByZWdpc3RlciBhbnl3YXkuIExpa2VseQorICAgICAgICAvLyBubyBoYXJt
IGluIGxvY2tpbmcgaXQgaGVyZS4KICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBjaGlsZDEpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgY2hpbGQyKTsKICAgICAgICAgCkBAIC0yNzEwLDExICsyNzIzLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewot
ICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5
T3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzogewog
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAotICAgICAg
ICAgICAgLy8gTWFwIGJhc2UsIHByb3BlcnR5ICYgdmFsdWUgaW50byByZWdpc3RlcnMsIGFsbG9j
YXRlIGEgc2NyYXRjaCByZWdpc3Rlci4KICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOwogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKQEAg
LTI3MzgsOCArMjc0OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpTQXJyYXkpCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CisgICAgICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICBiYXNlLnVzZSgp
OwpAQCAtMjc1Miw5ICsyNzYzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05vdE5l
ZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBw
cm9wZXJ0eVJlZyk7CiAKICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlLmxpbmso
Jm1faml0KTsKQEAgLTI3NjMsNyArMjc3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJy
YXkuCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAotICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzKSB7Cisg
ICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5kcywgdGhpcywK
QEAgLTI5MzIsMTcgKzI5NDMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQz
KCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAg
ICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVz
dGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAg
ICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZl
Y3RvcikpKTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCkBAIC0yOTY4LDE4ICsyOTc5LDE4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BS
ID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVu
Z3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzZXRVbmRlZmluZWRDYXNlczsKICAgICAgICAgc2V0VW5kZWZpbmVk
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3Rv
cmFnZUxlbmd0aEdQUikpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CiAgICAgICAgIAotICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKIAog
ICAgICAgICBzZXRVbmRlZmluZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCkBAIC0zNTY1LDE0ICszNTc2
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKLSAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogeworICAgIGNhc2UgR2V0QnV0
dGVyZmx5OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAg
ICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzkxNSw3ICszOTI2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogI2VuZGlmCiAgICAgICAgIG1faml0
Lm5lZzMyKHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIo
cmVzb2x2ZUluZm9HUFIsIHJlc29sdmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91
dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpC
YXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRy
LCAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxOSAr
MzE1LDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5n
OjpzX2luZm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAg
Y2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBk
dXBsaWNhdGVzIHRoZSBjb2RlIGJlbG93IGluIGFudGljaXBhdGlvbiBvZiB0aGlzIGNvZGUgYmVp
bmcKLSAgICAgICAgLy8gc3Vic3RhbnRpYWxseSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUuCisgICAg
Y2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0
ZW1wLmdwcigpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6WmVybywKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsK
KyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewor
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
KyAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2g4KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCksIFN0cnVjdHVyZTo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CkBAIC0zMDA2LDExICszMDE3LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6
OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0g
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7CiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVz
Y3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CkBAIC0zMTI1LDEzICszMTMx
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9y
KG5vZGUuYXJyYXlNb2RlKCkpOwogCiAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0g
ICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6IHsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzogewogICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRS
ZWcpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHJlc3VsdFJlZyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3Vs
dFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgCkBA
IC0zMjI3LDYgKzMyMzIsMjAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4
ZWMoTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSYgbm9kZSkKIHsKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAg
CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5
VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgcmVzdWx0LmdwcigpLCBi
YXNlR1BSKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCkBAIC0zMjQ4LDEzICszMjY3LDMxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKICAg
ICAgICAgCi0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAg
bV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgIHN0b3JhZ2VSZXN1
bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlJiBub2RlKQogeworICAgIHNp
emVfdCBvbGRTaXplID0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVf
dCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsKKyAgICBBU1NFUlQo
bmV3U2l6ZSA9PSBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgIGlmIChoYXNJbmRl
eGluZ0hlYWRlcihub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3VsdC5ncHIo
KSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAg
ICBzdG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgb2xkU3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CkBAIC0zMjY3LDkg
KzMzMDQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAg
ICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwogICAgICAgICAKLSAgICBzaXpl
X3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICBzaXplX3Qg
bmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5l
d1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgQ29waWVkQWxsb2NhdG9y
KiBjb3BpZWRBbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLnN0b3JhZ2VBbGxv
Y2F0b3IoKTsKICAgICAgICAgCiAgICAgbV9qaXQubG9hZFB0cigmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIyKTsKQEAgLTMyODAsMTMgKzMzMTQsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LmFkZFB0
cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIy
KTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNj
cmF0Y2hHUFIyLCBuZXdTaXplKSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXpl
IC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBz
dG9yYWdlLCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0g
c2l6ZW9mKHZvaWQqKSkgewogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNW
YWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9m
T3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwogICAgIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1Niw5ICsxMTU2LDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3Bl
cmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUpCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FTyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvYmplY3QpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvYmplY3QpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRp
b25fRU9TIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIG9iamVjdCwgc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2Jq
ZWN0LCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQpAQCAtMTE2Niw2ICsx
MTcxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwpAQCAtMTM3Myw3ICsxMzgzLDcgQEAgcHVi
bGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9E
RkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BS
UmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJh
dGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKQEAgLTE0MzgsNiArMTQ0OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FTyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRU9T
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHNpemVfdCBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIG9sZCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2xkLCBUcnVzdGVkSW1tUHRyKHNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfREZHT3BlcmF0aW9uX0VTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgc2l6ZV90IHNpemUp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzaXplKSk7CkBAIC0xNjc2LDcgKzE3MDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VPWkogb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcg
YXJnM1BheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNU
YWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOwpAQCAtMjE2NCw3ICsyMTg5LDcgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zdG9yZVB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmQ2xhc3NUeXBlOjpzX2luZm8pLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5
IHN0b3JhZ2UgcG9pbnRlci4KLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgQ2xh
c3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgICAgICBtX2ppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICB9CiAK
ICAgICAvLyBJdCBpcyBhY2NlcHRhYmxlIHRvIGhhdmUgc3RydWN0dXJlIGJlIGVxdWFsIHRvIHNj
cmF0Y2gsIHNvIGxvbmcgYXMgeW91J3JlIGZpbmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgog
ICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAg
ICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNP
dmVyc2l6ZShzaXplX3QpOwogICAgIHN0YXRpYyBDb3BpZWRCbG9jayogb3ZlcnNpemVCbG9ja0Zv
cih2b2lkKiBwdHIpOwogCi0gICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShz
aXplX3QsIHZvaWQqKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tlZEJvb2xlYW4gdHJ5
QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QsIHZvaWQqKik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5
UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsNyArNDM1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFdyaXRlQmFycmllck1vZGUs
IFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRB
bGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJl
Z2lzdGVySUQgc3RvcmFnZVB0cik7Ci0gICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNTdG9y
YWdlKHNpemVfdCwgUmVnaXN0ZXJJRCByZXN1bHQpOworICAgICAgICB2b2lkIGVtaXRBbGxvY2F0
ZUJhc2ljU3RvcmFnZShzaXplX3QsIHB0cmRpZmZfdCBvZmZzZXRGcm9tQmFzZSwgUmVnaXN0ZXJJ
RCByZXN1bHQpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVtaXRBbGxvY2F0
ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zaWduZWQg
dmFsdWVzUmVnaXN0ZXIsIHVuc2lnbmVkIGxlbmd0aCwgUmVnaXN0ZXJJRCBjZWxsUmVzdWx0LCBS
ZWdpc3RlcklEIHN0b3JhZ2VSZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cgogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
JkNsYXNzVHlwZTo6c19pbmZvKSwgQWRkcmVzcyhyZXN1bHQsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpKTsKIAogICAgIC8vIGluaXRpYWxpemUgdGhlIG9iamVjdCdzIHByb3BlcnR5IHN0b3Jh
Z2UgcG9pbnRlcgotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0
LCBDbGFzc1R5cGU6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhyZXN1bHQsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0
QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBKSVQ6OmUKICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmlu
YWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNpemVfdCBzaXplLCBSZWdp
c3RlcklEIHJlc3VsdCkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdl
KHNpemVfdCBzaXplLCBwdHJkaWZmX3Qgb2Zmc2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0
KQogewogICAgIENvcGllZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVh
cC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAKQEAgLTQ0MywzNyArNDQzLDMyIEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWcKICAgICBzdG9yZVB0cihyZXN1bHQsICZhbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbmVnUHRyKHJlc3VsdCk7CiAgICAgYWRk
UHRyKEFic29sdXRlQWRkcmVzcygmYWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgcmVz
dWx0KTsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUpLCByZXN1bHQpOworICAgIHN1YlB0
cihUcnVzdGVkSW1tMzIoc2l6ZSAtIG9mZnNldEZyb21CYXNlKSwgcmVzdWx0KTsKIH0KIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVy
LCB1bnNpZ25lZCBsZW5ndGgsIFJlZ2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9y
YWdlUmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7CiAgICAgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgNFUpOwotICAgIHNpemVfdCBpbml0aWFsU3RvcmFn
ZSA9IEpTQXJyYXk6OnN0b3JhZ2VTaXplKGluaXRpYWxMZW5ndGgpOworICAgIHNpemVfdCBpbml0
aWFsU3RvcmFnZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihpbml0aWFsTGVuZ3RoKSk7CiAKICAgICAvLyBXZSBhbGxvY2F0ZSB0aGUgYmFj
a2luZyBzdG9yZSBmaXJzdCB0byBlbnN1cmUgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gCiAgICAg
Ly8gZG9lc24ndCBoYXBwZW4gZHVyaW5nIEpTQXJyYXkgaW5pdGlhbGl6YXRpb24uCi0gICAgZW1p
dEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxTdG9yYWdlLCBzdG9yYWdlUmVzdWx0KTsKKyAg
ICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoaW5pdGlhbFN0b3JhZ2UsIHNpemVvZihJbmRleGlu
Z0hlYWRlciksIHN0b3JhZ2VSZXN1bHQpOwogCiAgICAgLy8gQWxsb2NhdGUgdGhlIGNlbGwgZm9y
IHRoZSBhcnJheS4KICAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTQXJyYXksIGZhbHNl
PihUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1
cmUoKSksIGNlbGxSZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAgLy8gU3RvcmUgYWxsIHRoZSBu
ZWNlc3NhcnkgaW5mbyBpbiB0aGUgQXJyYXlTdG9yYWdlLgotICAgIHN0b3JlUHRyKHN0b3JhZ2VS
ZXN1bHQsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjphbGxvY0Jhc2VPZmZz
ZXQoKSkpOwogICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0
LCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3RvcmUzMihJbW0zMihsZW5n
dGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0
b3JPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlhbExlbmd0aCksIEFkZHJlc3Mo
c3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3Rv
cmFnZTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDAp
LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6c3BhcnNlTWFwT2Zmc2V0KCkp
KTsKIAogICAgIC8vIFN0b3JlIHRoZSBuZXdseSBhbGxvY2F0ZWQgQXJyYXlTdG9yYWdlLgotICAg
IHN0b3JlUHRyKHN0b3JhZ2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSk7CisgICAgc3RvcmVQdHIoc3RvcmFnZVJlc3VsdCwgQWRkcmVzcyhjZWxs
UmVzdWx0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIAotICAgIC8vIFN0b3JlIHRo
ZSB2ZWN0b3IgbGVuZ3RoIGFuZCBpbmRleCBiaWFzLgotICAgIHN0b3JlMzIoSW1tMzIoaW5pdGlh
bExlbmd0aCksIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBK
U0FycmF5OjppbmRleEJpYXNPZmZzZXQoKSkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc3Bh
cnNlIHZhbHVlIG1hcC4KLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKGNl
bGxSZXN1bHQsIEpTQXJyYXk6OnNwYXJzZVZhbHVlTWFwT2Zmc2V0KCkpKTsKLQotICAgICAgICAv
LyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCisgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBo
YXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
KHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7CkBA
IC00ODUsMTYgKzQ4MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1
bnMKICAgICAgICAgc3RvcmUzMihzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSAqIGkgKyBzaXplb2YodWludDMyX3QpKSk7CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvLyBaZXJv
IG91dCB0aGUgcmVtYWluaW5nIHNsb3RzLgotICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsg
aSA8IGluaXRpYWxMZW5ndGg7IGkrKykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkp
OwotI2Vsc2UKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSksIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6
dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSNlbmRpZgotICAgIH0K
IH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2OCw3ICsx
NjY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aQogdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgaW50IGxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEpTQXJyYXk6OnN0b3JhZ2VTaXplKGxlbmd0aCkp
KSB7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6dG90YWxTaXpl
KDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpIHsKICAgICAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25ld19hcnJheSk7CiAgICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0xNjg3LDcgKzE2ODcsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X2FycmF5KEluc3RydWN0CiAgICAgLy8gSWYgdGhlIGFsbG9j
YXRpb24gd291bGQgYmUgb3ZlcnNpemUsIHdlIHdpbGwgYWxyZWFkeSBtYWtlIHRoZSBwcm9wZXIg
c3R1YiBjYWxsIGFib3ZlIGluIAogICAgIC8vIGVtaXRfb3BfbmV3X2FycmF5LgogICAgIGludCBs
ZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRT
cGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkKKyAgICBpZiAo
Q29waWVkU3BhY2U6OmlzT3ZlcnNpemUoQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgMCwgdHJ1ZSwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gTm90IGVub3VnaCBzcGFjZSBpbiBDb3BpZWRTcGFjZSBmb3Ig
c3RvcmFnZS4KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3BhY2UgaW4g
TWFya2VkU3BhY2UgZm9yIGNlbGwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMywxMCArMjEzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQ
dHIocmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09m
TGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2UpKSk7CiAgICAgCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNB
cnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAKICAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdU
MSk7IC8vIHRhZwogICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKQEAg
LTI3MiwxMSArMjcyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgc3RvcmVQdHIocmVnVDEsIGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmUoKSk7CiAjZW5kaWYKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZK
U0FycmF5OjpzX2luZm8pKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIYXNBcnJheVN0b3JhZ2Up
KSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMSwgcmVnVDMsIFVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1Qz
KTsKICAgICAKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoMzIoRXF1YWwsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICAgICAKQEAgLTI4OCwxMCArMjg4LDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICAKICAgICBl
bXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhyZWdU
MywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsK
LSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Cisg
ICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKICAgICAKICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRk
cmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7Cisg
ICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwogICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwogICAgIAogICAg
IGVuZC5saW5rKHRoaXMpOwpAQCAtMzQzLDcgKzM0Myw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0
QnlJZEhvdFBhdGgoKQogICAgIFBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBwYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsKICAgICBh
ZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFi
ZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMik7CisgICAgQ29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbDEgPSBsb2FkUHRyV2l0aENvbXBh
Y3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMiwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9m
ZnNldCksIHJlZ1QwKTsgLy8gcGF5bG9hZAogICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2Vt
ZW50TGFiZWwyID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mo
cmVnVDIsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMSk7IC8vIHRhZwogICAgIApA
QCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlv
bioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpKTsKICAgICAK
LSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGli
bGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSksIHJlZ1QxKTsKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VM
b2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDEg
PSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDIsIEFkZHJlc3MocmVnVDEsIHBh
dGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsgLy8gcGF5bG9hZAogICAgIERhdGFMYWJlbDMyIGRp
c3BsYWNlbWVudExhYmVsMiA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMywg
QWRkcmVzcyhyZWdUMSwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOyAvLyB0YWcKICAgICAK
QEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3Ry
dWN0CiB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgdmFsdWVQYXlsb2FkLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0KGNhY2hlZE9mZnNl
dCkpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwogICAgIGVtaXRTdG9yZShpbmRleFJl
bGF0aXZlVG9CYXNlKGNhY2hlZE9mZnNldCksIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIGJhc2Up
OwogfQogCkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZQogICAgIH0KICAgICAKICAgICBSZWdpc3RlcklEIHRlbXAgPSByZXN1bHRQYXls
b2FkOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCB0ZW1wKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcCk7CiAgICAgZW1pdExvYWQoaW5kZXhSZWxhdGl2ZVRv
QmFzZShjYWNoZWRPZmZzZXQpLCByZXN1bHRUYWcsIHJlc3VsdFBheWxvYWQsIHRlbXApOwogfQog
CkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoSlNP
YmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoYmFzZS0+YWRk
cmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHRUYWcpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlc3VsdFRhZywgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlc3Vs
dFRhZywgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgcmVzdWx0VGFnKTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwg
cmVzdWx0VGFnKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZXN1bHRUYWcsIG9mZnNldEluQnV0dGVy
Zmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQpOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlc3VsdFRhZywgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02MjAsMTEgKzYyMCwxMSBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBtX2NvZGVCbG9jay0+Z2V0T3JBZGRBcnJheVBy
b2ZpbGUoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVy
ZSgpKTsKICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJyYW5j
aDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7CiAgICAgCiAgICAgLy8g
Q2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIHN0b3JhZ2UKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV9sZW5ndGgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgCiAgICAgSnVtcCBmYWls
dXJlQ2FzZXMyID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkp
OwogICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKQEAgLTEwMjksNyArMTAyOSw3IEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAKICAgICBpZiAoZmluYWxPYmpl
Y3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMy
KExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIGJhc2UpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsK
QEAgLTEwNDEsNyArMTA0MSw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJl
Z2lzdGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwogICAgICAgICBuZWcz
MihvZmZzZXQpOwogICAgIH0KICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpICsgKGlu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3Vs
dFBheWxvYWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTAgKzEx
NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5B
QkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2Vu
ZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19p
bmZvKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlT
dG9yYWdlKSkpOwogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdl
T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAog
ICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIAogICAgIGlmIChmaW5hbE9i
amVjdE1vZGUgPT0gTWF5QmVGaW5hbCkgewogICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNo
MzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zm
c2V0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5saW5r
KHRoaXMpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zm
c2V0KFJlZ2lzdGUKICAgICAgICAgYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5s
aW5rKHRoaXMpOwogI2VuZGlmCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVj
dDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwog
ICAgICAgICBuZWczMihvZmZzZXQpOwogICAgIH0KICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZz
ZXQsIG9mZnNldCk7CkBAIC0yMzksMTAgKzIzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3Jl
UHRyKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
SGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlz
KTsKQEAgLTI1MiwxMCArMjUyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5z
dHJ1Y3Rpb24KICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpLmxpbmtUbyhz
dG9yZVJlc3VsdCwgdGhpcyk7CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0
aGlzKTsKIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIHN0b3JlMzIo
cmVnVDEsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKICAg
ICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAtNDAzLDcgKzQwMyw3IEBA
IHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBQYXRjaGFibGVK
dW1wIHN0cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9D
b21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJ
ZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwog
Ci0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRp
YmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkpLCByZWdUMCk7CisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdl
TG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgRGF0YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRM
YWJlbCA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1Qw
LCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwgcmVnVDApOwogCiAgICAgTGFiZWwgcHV0UmVz
dWx0KHRoaXMpOwpAQCAtNDcwLDcgKzQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbioKICAgICBEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
KSkpKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBj
b252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5
U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVu
dExhYmVsID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQpOwpAQCAtNTA5LDggKzUwOSw4IEBAIHZvaWQgSklU
Ojpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwg
c2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgYmFzZSk7CisgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFs
dWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21waWxl
IGEgbG9hZCBmcm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRl
IGJhc2UuCkBAIC01MjEsOCArNTIxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHQp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0KTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZs
eShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJl
Y3RPZmZzZXQoSlNPYmplY3QqIGJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQpCkBAIC01MzIsOCArNTMyLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRE
aXJlY3RPZmZzZXQoSlNPYmplYwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGxv
YWRQdHIoYmFzZS0+YWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHQpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNoZWRPZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOworICAgIGxvYWRQ
dHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBj
YWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTY2MCwxMSArNjYwLDExIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
CiAgICAgc3RvcmVQdHIocmVnVDMsIG1fY29kZUJsb2NrLT5nZXRPckFkZEFycmF5UHJvZmlsZShz
dHViSW5mby0+Ynl0ZWNvZGVJbmRleCktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwog
I2VuZGlmCi0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QzLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigm
SlNBcnJheTo6c19pbmZvKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gYnJhbmNoOChOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKTsKIAogICAgIC8vIENoZWNrcyBvdXQg
b2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlP
ZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdl
OjpsZW5ndGhPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBicmFu
Y2gzMihMZXNzVGhhbiwgcmVnVDIsIFRydXN0ZWRJbW0zMigwKSk7CiAKICAgICBlbWl0RmFzdEFy
aXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTcsOCArMTUxNyw4
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHV0X2IKICAgICBBU1NFUlQo
YmFzZVZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFz
ZVZhbHVlKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSAqc3RhY2tGcmFtZS5nbG9i
YWxEYXRhOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gYmFzZS0+Z3Jvd091dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7Ci0gICAgYmFzZS0+c2V0
T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gYmFzZS0+Z3Jvd091dE9mTGluZVN0b3JhZ2UoZ2xv
YmFsRGF0YSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgYmFzZS0+c2V0QnV0dGVyZmx5KGdsb2Jh
bERhdGEsIGJ1dHRlcmZseSwgbmV3U3RydWN0dXJlKTsKIAogICAgIHJldHVybiBiYXNlOwogfQpA
QCAtMjQzNSw3ICsyNDM1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUo
KTsKLQorICAgIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlw
dC5pc1N0cmluZygpKSkgewogICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
YXNDZWxsKCktPmZhc3RHZXRPd25Qcm9wZXJ0eShjYWxsRnJhbWUsIGFzU3RyaW5nKHN1YnNjcmlw
dCktPnZhbHVlKGNhbGxGcmFtZSkpKSB7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9O
KCk7CkBAIC0yNTI4LDEyICsyNTI4LDEyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
X3B1dF9ieV92YWwKIAogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAg
ICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlz
SlNBcnJheShiYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNB
cnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkp
KQotICAgICAgICAgICAgICAgIGpzQXJyYXktPnNldEluZGV4KCpnbG9iYWxEYXRhLCBpLCB2YWx1
ZSk7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgICAgICAgICBpZiAob2Jq
ZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkoaSkpCisgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRJ
bmRleFF1aWNrbHkoKmdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGNhbGxGcmFtZSwgaSwg
dmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBjYWxsRnJh
bWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoY2FsbEZyYW1l
LCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAg
IH0gZWxzZSBpZiAoaXNOYW1lKHN1YnNjcmlwdCkpIHsKQEAgLTMzODgsNyArMzM4OCw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9nZXR0ZXIKICAgICAgICAgYWNjZXNzb3It
PnNldEdldHRlcihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QoZ2V0dGVyKSk7CiAg
ICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgYXNPYmplY3Qoc2V0dGVyKSk7Ci0gICAgYmFzZU9i
ai0+cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUu
YXJnc1sxXS5pZGVudGlmaWVyKCksIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CisgICAgYmFzZU9iai0+
cHV0RGlyZWN0QWNjZXNzb3IoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmll
cigpLCBhY2Nlc3NvciwgQWNjZXNzb3IpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1OCw3ICs4NTgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5
X2lkCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90
KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKICAgICBMTElOVF9PUCgxKSA9IHJlc3Vs
dDsKLQorICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYm
IGJhc2VWYWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTg3
Nyw3ICs4NzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAg
ICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBw
Y1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfZ2V0X2J5X2lkX291dF9v
Zl9saW5lKTsKLSAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC05MzksNyArOTM5LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQg
PSBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNW
YWx1ZSkgKyBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9m
ZnNldEluT3V0T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1Zh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldElu
QnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICBwY1s2XS51LnN0cnVjdHVyZS5zZXQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwpAQCAtOTY3LDcgKzk2Nyw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5v
cGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0g
TExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpOwotICAgICAg
ICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0
KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTA0NiwxMiArMTA0NiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X3ZhCiAgICAgCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50
MzIoKSkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwotICAg
ICAgICBpZiAoaXNKU0FycmF5KGJhc2VWYWx1ZSkpIHsKLSAgICAgICAgICAgIEpTQXJyYXkqIGpz
QXJyYXkgPSBhc0FycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoanNBcnJheS0+Y2Fu
U2V0SW5kZXgoaSkpCi0gICAgICAgICAgICAgICAganNBcnJheS0+c2V0SW5kZXgoZ2xvYmFsRGF0
YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgICAgICAg
ICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAgICAgIG9i
amVjdC0+c2V0SW5kZXhRdWlja2x5KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBKU0FycmF5OjpwdXRCeUluZGV4KGpzQXJyYXksIGV4ZWMs
IGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgICAgICAg
ICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIGks
IHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICAgICAg
TExJTlRfRU5EKCk7CiAgICAgICAgIH0KICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoZXhl
YywgaSwgdmFsdWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CkBAIC0xMTI4
LDcgKzExMjgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlCiAg
ICAgaWYgKCFzZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgYWNjZXNzb3ItPnNldFNldHRl
cihnbG9iYWxEYXRhLCBhc09iamVjdChzZXR0ZXIpKTsKICAgICBiYXNlT2JqLT5wdXREaXJlY3RB
Y2Nlc3NvcigKLSAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAgZXhlYywKICAgICAgICAgZXhl
Yy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0udS5vcGVyYW5kKSwKICAgICAgICAgYWNj
ZXNzb3IsIEFjY2Vzc29yKTsKICAgICBMTElOVF9FTkQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTQ3LDIxICs5NDcsMjEg
QEAgX2xsaW50X29wX2lzX3N0cmluZzoKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBh
eWxvYWQpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxp
bmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0Ci0gICAg
bG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAg
ICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkcCBK
U09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UK
KyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0g
c2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4
XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQog
ICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5l
Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdl
XSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmpl
Y3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQogICAgIG5lZ2kgcHJvcGVydHlPZmZzZXQK
ICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lu
bGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRT
dG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5l
U3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4ICsgc2l6ZW9mIEluZGV4aW5nSGVhZGVyLCBvYmplY3RB
bmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRh
ZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikg
KiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAorICAgIGxv
YWRpIFRhZ09mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2Yg
SW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcK
KyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICog
OCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBA
IC0xMjg3LDEyICsxMjg3LDkgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAgaWYgVkFMVUVf
UFJPRklMRVIKICAgICAgICAgc3RvcmVwIHQzLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1
Y3R1cmVbdDJdCiAgICAgZW5kCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCi0gICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDJdLCB0MgotICAgIGxvYWRwIEpTR2xvYmFsRGF0
YTo6anNBcnJheUNsYXNzSW5mb1t0Ml0sIHQyCi0gICAgYnBuZXEgU3RydWN0dXJlOjptX2NsYXNz
SW5mb1t0M10sIHQyLCAub3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5OjptX3N0b3Jh
Z2VbdDBdLCB0MwotICAgIGJpYWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5v
cEdldEJ5VmFsU2xvdworICAgIGJ0cHogU3RydWN0dXJlOjptX2luZGV4aW5nVHlwZVt0M10sIEhh
c0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0MF0sIC5vcEdldEJ5VmFsU2xvdwogICAgIGxv
YWRpIDRbUENdLCB0MAogICAgIGxvYWRpIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBUYWdPZmZz
ZXRbdDMsIHQxLCA4XSwgdDIKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5
bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0MQpAQCAtMTM3MywxMiArMTM3MCw5IEBAIF9sbGludF9v
cF9wdXRfYnlfdmFsOgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCiAgICAgICAgIHN0b3JlcCB0Mywg
QXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlW3QwXQogICAgIGVuZAotICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3Qw
XSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDBdLCB0MAot
ICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MCwgLm9wUHV0QnlWYWxTbG93
Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVjdG9yTGVuZ3RoW3QxXSwgLm9wUHV0QnlWYWxT
bG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QxXSwgdDAKKyAgICBidHB6IFN0cnVj
dHVyZTo6bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNBcnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xv
dworICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIs
IC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhb
dDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBiaWVxIEFycmF5U3RvcmFnZTo6bV92ZWN0b3IgKyBU
YWdPZmZzZXRbdDAsIHQyLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wUHV0QnlWYWxFbXB0eQogLm9w
UHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaSAxMltQQ10sIHQzCkBAIC0xMzkwLDkgKzEz
ODQsOSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBh
ZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIs
IEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAg
YmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0g
ICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0
MF0KICAgICBqbXAgLm9wUHV0QnlWYWxTdG9yZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwNiwy
MCArODA2LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2FkUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0
QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5
T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKICAgICBuZWdw
IHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5l
U3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlP
ZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQorICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRwIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3Jv
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0
QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBJbmxpbmVT
dG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGlu
ZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBK
U09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UK
ICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycCBwcm9wZXJ0eU9mZnNldEFz
SW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAg
IGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6
bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVv
ZiBJbmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlP
ZmZzZXRBc0ludCwgOF0sIHZhbHVlCisgICAgbG9hZHAgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAt
IDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0
eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUs
IHNsb3cpCkBAIC0xMTMyLDEyICsxMTMyLDkgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAgICAg
aWYgVkFMVUVfUFJPRklMRVIKICAgICAgICAgc3RvcmVwIHQzLCBBcnJheVByb2ZpbGU6Om1fbGFz
dFNlZW5TdHJ1Y3R1cmVbdDJdCiAgICAgZW5kCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQy
Ci0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbERhdGFbdDJdLCB0MgotICAgIGxvYWRwIEpT
R2xvYmFsRGF0YTo6anNBcnJheUNsYXNzSW5mb1t0Ml0sIHQyCi0gICAgYnBuZXEgU3RydWN0dXJl
OjptX2NsYXNzSW5mb1t0M10sIHQyLCAub3BHZXRCeVZhbFNsb3cKLSAgICBsb2FkcCBKU0FycmF5
OjptX3N0b3JhZ2VbdDBdLCB0MwotICAgIGJpYWVxIHQxLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0
aFt0MF0sIC5vcEdldEJ5VmFsU2xvdworICAgIGJ0YnogU3RydWN0dXJlOjptX2luZGV4aW5nVHlw
ZVt0M10sIEhhc0FycmF5U3RvcmFnZSwgLm9wR2V0QnlWYWxTbG93CisgICAgbG9hZHAgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAgICBiaWFlcSB0MSwgLXNpemVvZiBJbmRleGluZ0hl
YWRlciArIEluZGV4aW5nSGVhZGVyOjptX3ZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xv
dwogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZHAgQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MywgdDEsIDhdLCB0MgogICAgIGJ0cHogdDIsIC5vcEdldEJ5VmFsU2xvdwpAQCAt
MTIxNywxMiArMTIxNCw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogICAgIGlmIFZBTFVFX1BS
T0ZJTEVSCiAgICAgICAgIHN0b3JlcCB0MywgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0
dXJlW3QwXQogICAgIGVuZAotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRw
IENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbERhdGE6
OmpzQXJyYXlDbGFzc0luZm9bdDBdLCB0MAotICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0lu
Zm9bdDNdLCB0MCwgLm9wUHV0QnlWYWxTbG93Ci0gICAgYmlhZXEgdDIsIEpTQXJyYXk6Om1fdmVj
dG9yTGVuZ3RoW3QxXSwgLm9wUHV0QnlWYWxTbG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9y
YWdlW3QxXSwgdDAKKyAgICBidGJ6IFN0cnVjdHVyZTo6bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNB
cnJheVN0b3JhZ2UsIC5vcFB1dEJ5VmFsU2xvdworICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRl
cmZseVt0MV0sIHQwCisgICAgYmlhZXEgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRl
eGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFNsb3cKICAgICBidHB6
IEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQyLCA4XSwgLm9wUHV0QnlWYWxFbXB0eQogLm9w
UHV0QnlWYWxTdG9yZVJlc3VsdDoKICAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDMKQEAgLTEy
MzMsOSArMTIyNyw5IEBAIF9sbGludF9vcF9wdXRfYnlfdmFsOgogCiAub3BQdXRCeVZhbEVtcHR5
OgogICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQotICAg
IGJpYiB0MiwgQXJyYXlTdG9yYWdlOjptX2xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1
bHQKKyAgICBiaWIgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6
bV9wdWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAgICAgYWRkaSAxLCB0
MiwgdDEKLSAgICBzdG9yZWkgdDEsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBdCisgICAgc3Rv
cmVpIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGlj
TGVuZ3RoW3QwXQogICAgIGptcCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CiAKIC5vcFB1dEJ5VmFs
U2xvdzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjEs
NiArNjEsMTEgQEAgZWxzZQogICAgIGNvbnN0IFBheWxvYWRPZmZzZXQgPSAwCiBlbmQKIAorIyBD
b25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgorY29uc3QgSXNBcnJheSA9
IDEKK2NvbnN0IEhhc0FycmF5U3RvcmFnZSA9IDgKK2NvbnN0IEFsbEFycmF5VHlwZXMgPSAxNQor
CiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDUKIGNvbnN0IE9iamVjdFR5
cGUgPSAxMwpAQCAtMzQxLDcgKzM0Niw3IEBAIG1hY3JvIGFsbG9jYXRlQmFzaWNKU09iamVjdChz
aXplQ2xhc3NJbmQKICAgICAgICAgbG9hZHAgY2xhc3NJbmZvT2Zmc2V0W3NjcmF0Y2gxXSwgc2Ny
YXRjaDIKICAgICAgICAgc3RvcmVwIHNjcmF0Y2gyLCBbcmVzdWx0XQogICAgICAgICBzdG9yZXAg
c3RydWN0dXJlLCBKU0NlbGw6Om1fc3RydWN0dXJlW3Jlc3VsdF0KLSAgICAgICAgc3RvcmVwIDAs
IEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2VbcmVzdWx0XQorICAgICAgICBzdG9yZXAgMCwg
SlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0KICAgICBlbmQKIGVuZAogCkBAIC01MTYsNyAr
NTIxLDcgQEAgbWFjcm8gd2l0aElubGluZVN0b3JhZ2Uob2JqZWN0LCBwcm9wZXJ0eQogZW5kCiAK
IG1hY3JvIHdpdGhPdXRPZkxpbmVTdG9yYWdlKG9iamVjdCwgcHJvcGVydHlTdG9yYWdlLCBjb250
aW51YXRpb24pCi0gICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3Rd
LCBwcm9wZXJ0eVN0b3JhZ2UKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0
XSwgcHJvcGVydHlTdG9yYWdlCiAgICAgIyBJbmRpY2F0ZSB0aGF0IHRoZSBwcm9wZXJ0eVN0b3Jh
Z2UgcmVnaXN0ZXIgbm93IHBvaW50cyB0byB0aGUKICAgICAjIHByb3BlcnR5IHN0b3JhZ2UsIGFu
ZCB0aGF0IHRoZSBvYmplY3QgcmVnaXN0ZXIgbWF5IGJlIHJldXNlZAogICAgICMgaWYgdGhlIG9i
amVjdCBwb2ludGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkp
OworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIGkpOwogfQogCiBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIApAQCAtMzA4
LDcgKzMwOCw3IEBAIGJvb2wgQXJndW1lbnRzOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamUKICAg
ICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB5ZXQgcHJlc2VudCBvbiB0aGUgb2JqZWN0
LCBhbmQgaXMgbm90IHlldCBtYXJrZWQgYXMgZGVsZXRlZCwgdGhlbiBhZGQgaXQgbm93LgogICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgaWYgKCghdGhpc09iamVjdC0+ZC0+ZGVs
ZXRlZEFyZ3VtZW50cyB8fCAhdGhpc09iamVjdC0+ZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkgJiYg
IUpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKLSAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSwgMCk7Cisg
ICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdE1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1l
LCB0aGlzT2JqZWN0LT5hcmd1bWVudChpKS5nZXQoKSk7CiAgICAgICAgIGlmICghQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNo
b3VsZFRocm93KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSAiQXJy
YXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRl
ICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJyYXlDb252ZW50aW9uc19oCisjZGVm
aW5lIEFycmF5Q29udmVudGlvbnNfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAorCisvLyBPdmVydmlldyBvZiBKU0FycmF5CisvLworLy8g
UHJvcGVydGllcyBvZiBKU0FycmF5IG9iamVjdHMgbWF5IGJlIHN0b3JlZCBpbiBvbmUgb2YgdGhy
ZWUgbG9jYXRpb25zOgorLy8gICAqIFRoZSByZWd1bGFyIEpTT2JqZWN0IHByb3BlcnR5IG1hcC4K
Ky8vICAgKiBBIHN0b3JhZ2UgdmVjdG9yLgorLy8gICAqIEEgc3BhcnNlIG1hcCBvZiBhcnJheSBl
bnRyaWVzLgorLy8KKy8vIFByb3BlcnRpZXMgd2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywg
d2l0aCBpZGVudGlmaWVycyB0aGF0IGFyZSBub3QgcmVwcmVzZW50YWJsZQorLy8gYXMgYW4gdW5z
aWduZWQgaW50ZWdlciwgb3Igd2hlcmUgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAgTUFYX0FS
UkFZX0lOREVYCisvLyAoc3BlY2lmaWNhbGx5LCB0aGlzIGlzIG9ubHkgb25lIHByb3BlcnR5IC0g
dGhlIHZhbHVlIDB4RkZGRkZGRkZVIGFzIGFuIHVuc2lnbmVkIDMyLWJpdAorLy8gaW50ZWdlcikg
YXJlIG5vdCBjb25zaWRlcmVkIGFycmF5IGluZGljZXMgYW5kIHdpbGwgYmUgc3RvcmVkIGluIHRo
ZSBKU09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLworLy8gQWxsIHByb3BlcnRpZXMgd2l0aCBhIG51
bWVyaWMgaWRlbnRpZmVyLCByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGludGVnZXIgaSwK
Ky8vIHdoZXJlIChpIDw9IE1BWF9BUlJBWV9JTkRFWCksIGFyZSBhbiBhcnJheSBpbmRleCBhbmQg
d2lsbCBiZSBzdG9yZWQgaW4gZWl0aGVyIHRoZQorLy8gc3RvcmFnZSB2ZWN0b3Igb3IgdGhlIHNw
YXJzZSBtYXAuIEFuIGFycmF5IGluZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dp
bmcKKy8vIGZhc2hpb246CisvLworLy8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9J
TkRFWCkgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKKy8v
ICAgICB1bmxlc3MgdGhlIGFycmF5IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwg
cHJvcGVydGllcyBnbyBpbnRvIHRoZSBtYXAuCisvLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggPD0gaSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxs
IGVpdGhlcgorLy8gICAgIGJlIHN0b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhl
IHNwYXJzZSBhcnJheSwgZGVwZW5kaW5nIG9uIHRoZSBkZW5zaXR5IG9mCisvLyAgICAgZGF0YSB0
aGF0IHdvdWxkIGJlIHN0b3JlZCBpbiB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdo
ZXJlIGF0IGxlYXN0CisvLyAgICAgKDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVu
dHJpZXMgd291bGQgYmUgcG9wdWxhdGVkKS4KKy8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVD
VE9SX0lOREVYIDwgaSA8PSBNQVhfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBi
ZSBzdG9yZWQKKy8vICAgICBpbiB0aGUgc3BhcnNlIGFycmF5LgorCisvLyBEZWZpbmUgdGhlIG1h
eGltdW0gc3RvcmFnZSB2ZWN0b3IgbGVuZ3RoIHRvIGJlIDJeMzIgLyBzaXplb2YoSlNWYWx1ZSkg
LyAyIHRvIGVuc3VyZSB0aGF0CisvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorI2Rl
ZmluZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5k
ZXhpbmdIZWFkZXI6Om1heGltdW1MZW5ndGgpKQorCisvLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0byBi
ZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1Y2lu
ZworLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJvYmxl
bS81OTcxMzkxPi4KKyNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKKyNkZWZp
bmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0g
MSkKKy8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGluZGV4
IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KKyNkZWZpbmUgTUFYX0FSUkFZX0lOREVYIDB4
RkZGRkZGRkVVCisKKy8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQorLy8gZm9yIGFuIGFycmF5
IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5ldyBB
cnJheSgxMjMpKQorI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKKyAgICAKKy8vIFRoZSB1cHBl
ciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hlbiB0
aGUgZmlyc3QgZWxlbWVudAorLy8gaXMgYWRkZWQuCisjZGVmaW5lIEZJUlNUX1ZFQ1RPUl9HUk9X
IDRVCisKKy8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVuIHRv
IHVzZSBhIHNwYXJzZSBtYXAuCisvLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KKy8vIFdoZW4gaW5kaWNl
cyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdlIHVz
ZSBhIHZlY3RvcgorLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFyc2Ug
dGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVuc2l0
eU11bHRpcGxpZXIgPSA4OworCitpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVu
c2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQoreworICAgIHJldHVybiBsZW5ndGgg
PD0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGll
ciA8PSBudW1WYWx1ZXM7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRl
ckZvckFycmF5KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKQoreworICAg
IEluZGV4aW5nSGVhZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuc2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CisgICAgcmVzdWx0LnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2lubGluZSBJbmRleGluZ0hlYWRlciBiYXNlSW5kZXhpbmdIZWFkZXJG
b3JBcnJheSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGluZGV4aW5nSGVhZGVyRm9y
QXJyYXkobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEFycmF5Q29udmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjc5MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU1N0cmluZ0J1aWxkZXIuaCIKQEAg
LTExNCw5ICsxMTYsMTcgQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjpzX2luZm8g
PQogQGVuZAogKi8KIAorQXJyYXlQcm90b3R5cGUqIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVy
Zmx5KGV4ZWMtPmdsb2JhbERhdGEoKSwgMCk7CisgICAgQXJyYXlQcm90b3R5cGUqIHByb3RvdHlw
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEFycmF5UHJvdG90eXBlPigqZXhlYy0+aGVh
cCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7
CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOworICAgIHJldHVy
biBwcm90b3R5cGU7Cit9CisKIC8vIEVDTUEgMTUuNC40Ci1BcnJheVByb3RvdHlwZTo6QXJyYXlQ
cm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBKU0FycmF5KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUp
CitBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQorICAgIDog
SlNBcnJheShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiB7CiB9CiAKQEAgLTI5Miw4ICszMDIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoOyBrKysp
IHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50OwotICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0
SW5kZXgoaykpCi0gICAgICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXgoayk7Cisg
ICAgICAgIGlmICh0aGlzT2JqLT5jYW5HZXRJbmRleFF1aWNrbHkoaykpCisgICAgICAgICAgICBl
bGVtZW50ID0gdGhpc09iai0+Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBlbGVtZW50ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGspOwogICAgICAgICAKQEAgLTQx
MywxMCArNDIzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogCiAgICAgICAgIGZv
ciAoOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldElu
ZGV4KGspKQorICAgICAgICAgICAgaWYgKCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBh
cnJheS0+Z2V0SW5kZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+
Z2V0SW5kZXhRdWlja2x5KGspOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LmlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZChlbGVtZW50LnRv
V1RGU3RyaW5nSW5saW5lKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOCw3ICs2Mzgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlv
biwgY2FsbERhdGEpOwogCi0gICAgaWYgKHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5
OjpzX2luZm8gJiYgIWFzQXJyYXkodGhpc09iaiktPmluU3BhcnNlTW9kZSgpKSB7CisgICAgaWYg
KHRoaXNPYmotPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8gJiYgIWFzQXJyYXkodGhp
c09iaiktPmluU3BhcnNlSW5kZXhpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGlzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbihleGVjLCBjYWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNB
cnJheSh0aGlzT2JqKS0+c29ydE51bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSk7CiAgICAgICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKQEAgLTc4
OCw5ICs3OTgsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVk
Q2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAm
JiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKCFhcnJheS0+
Y2FuR2V0SW5kZXgoaykpCisgICAgICAgICAgICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNr
bHkoaykpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBh
cnJheS0+Z2V0SW5kZXgoayk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGspOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHYpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CkBAIC04NDYsMTEgKzg1Niwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNo
ZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+
aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+
Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC05MDksMTEgKzkxOSwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxs
KGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhj
ZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0
SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5kZXhR
dWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBjYWNoZWRD
YWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAgICBjYWNo
ZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwogICAgICAg
ICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKQEAgLTk2NSwxMSArOTc1LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgSlNBcnJheSogYXJy
YXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhl
YywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRp
b24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRl
eChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1aWNr
bHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2tseShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0
QXJndW1lbnQoMiwgdGhpc09iaik7CiAKQEAgLTEwMTcsMTEgKzEwMjcsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBm
LCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
OyArK2spIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGsp
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShr
KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRB
cmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVk
Q2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC0xMDc1LDggKzEwODUsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAo
YXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KDApKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0
SW5kZXgoMCk7CisgICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2ts
eSgwKSkgeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoMCk7CiAgICAgICAg
IGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewpAQCAtMTA5Nyw4ICsxMTA3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBydik7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHY7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleChp
KSkpCi0gICAgICAgICAgICAgICAgdiA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAg
IGlmIChMSUtFTFkoYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpKSkpCisgICAgICAgICAgICAg
ICAgdiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3
ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDEsIHYpOwpAQCAtMTE1Miw4ICsxMTYyLDggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIAogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPj0gMikKICAgICAgICAgcnYgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBlbHNlIGlm
IChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5kZXgobGVuZ3RoIC0gMSkpewotICAgICAgICBydiA9
IGFycmF5LT5nZXRJbmRleChsZW5ndGggLSAxKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJh
eS0+Y2FuR2V0SW5kZXhRdWlja2x5KGxlbmd0aCAtIDEpKSB7CisgICAgICAgIHJ2ID0gYXJyYXkt
PmdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKTsKICAgICAgICAgaSA9IDE7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xMTc0LDkgKzEx
ODQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAg
ICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMCwgcnYpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFhcnJheS0+Y2FuR2V0SW5k
ZXgoaWR4KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5LT5jYW5HZXRJbmRleFF1
aWNrbHkoaWR4KSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGxlbmd0aCBoYXMgYmVlbiBt
YWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJhY2sgdG8gc2xvdyBwYXRoCi0gICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFycmF5LT5nZXRJbmRleChpZHgpKTsK
KyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4UXVp
Y2tseShpZHgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwganNOdW1i
ZXIoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDMsIGFycmF5KTsK
ICAgICAgICAgICAgIHJ2ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDEyNzkzNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDE3ICsyOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHByaXZhdGU6Ci0gICAgICAg
IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgICAgIEFy
cmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAK
ICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNBcnJheSBCYXNlOwogCi0gICAgICAgIHN0
YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFycmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiBwcm90b3R5cGU7Ci0gICAgICAg
IH0KKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwpAQCAtNDcsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CiAgICAgICAgIH0KIAogICAg
IHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3Rv
cmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQXJyYXlTdG9yYWdl
X2gKKyNkZWZpbmUgQXJyYXlTdG9yYWdlX2gKKworI2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMu
aCIKKyNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwg
ZGF0YSB2YWx1ZXMgb2YgYW4gYXJyYXkuIEEgSlNBcnJheSBvYmplY3QgcG9pbnRzIHRvIGl0J3Mg
Y29udGFpbmVkIEFycmF5U3RvcmFnZQorLy8gc3RydWN0IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9y
LiBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhlIGdl
dFN0b3JhZ2UoKSBhbmQgCisvLyBzZXRTdG9yYWdlKCkgbWV0aG9kcy4gSXQgaXMgaW1wb3J0YW50
IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgc3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2Ug
dGhhdCAKKy8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9wZXJhdGlvbi4gVGhl
IGFjdHVhbCBhbGxvY2F0ZWQgcG9pbnRlciBpcyBhdmFpbGFibGUgYnkgdXNpbmc6CisvLyAgICAg
Z2V0U3RvcmFnZSgpIC0gbV9pbmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKK3N0cnVjdCBBcnJh
eVN0b3JhZ2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5U3RvcmFnZSk7Citwcml2
YXRlOgorICAgIEFycmF5U3RvcmFnZSgpIHsgfSAvLyBOb3QgZGlyZWN0bHkgaW5zdGFudGlhYmxl
LiBDYW4gb25seSBiZSBjcmVhdGVkIGFzIHBhcnQgb2YgYSBCdXR0ZXJmbHkuCitwdWJsaWM6Cisg
ICAgCisgICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBcnJheVN0b3JhZ2UqPihidXR0ZXJmbHkpOyB9Cisg
ICAgc3RhdGljIEFycmF5U3RvcmFnZSogZnJvbShJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFk
ZXIpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyLT5hcnJheVN0b3JhZ2UoKTsgfQorICAgIAorICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0ZXJm
bHkqPih0aGlzKTsgfQorICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAgCisgICAgLy8gV2Ugc3RlYWwg
dHdvIGZpZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVu
Z3RoLgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1
YmxpY0xlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGlu
ZGV4aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOyB9CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7
IH0KKyAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdI
ZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7IH0KKyAgICAKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgY29weUhlYWRlckZyb21EdXJpbmdHQyhjb25zdCBBcnJheVN0b3JhZ2UmIG90aGVy
KQorICAgIHsKKyAgICAgICAgbV9zcGFyc2VNYXAuY29weUZyb20ob3RoZXIubV9zcGFyc2VNYXAp
OworICAgICAgICBtX2luZGV4QmlhcyA9IG90aGVyLm1faW5kZXhCaWFzOworICAgICAgICBtX251
bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQorICAgICAgICBtX2luaXRpYWxpemF0aW9uSW5kZXggPSBvdGhlci5t
X2luaXRpYWxpemF0aW9uSW5kZXg7CisgICAgICAgIG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24g
PSBvdGhlci5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uOworI2VuZGlmCisgICAgfQorICAgIAor
ICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NwYXJzZU1h
cCAmJiBtX3NwYXJzZU1hcC0+c3BhcnNlTW9kZSgpOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJh
cnJpZXI8U3BhcnNlQXJyYXlWYWx1ZU1hcD4gbV9zcGFyc2VNYXA7CisgICAgdW5zaWduZWQgbV9p
bmRleEJpYXM7CisgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKKyNpZiBDSEVDS19B
UlJBWV9DT05TSVNURU5DWQorICAgIC8vIE5lZWRzIHRvIGJlIGEgdWludHB0cl90IGZvciBhbGln
bm1lbnQgcHVycG9zZXMuCisgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKKyAg
ICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsKKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgdWludHB0cl90IG1fcGFkZGluZzsKKyNlbmRpZgorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX3ZlY3RvclsxXTsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0
aE9mZnNldCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1W
YWx1ZXNJblZlY3Rvck9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCB2ZWN0b3JP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvcik7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1faW5kZXhCaWFzKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgc3BhcnNlTWFwT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9zcGFyc2VNYXApOyB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplRm9yKHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpICsgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJh
eVN0b3JhZ2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRl
cmZseS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRlcmZseV9oCisjZGVmaW5l
IEJ1dHRlcmZseV9oCisKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKK3N0cnVj
dCBBcnJheVN0b3JhZ2U7CisKK2NsYXNzIEJ1dHRlcmZseSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQnV0dGVyZmx5KTsKK3ByaXZhdGU6CisgICAgQnV0dGVyZmx5KCkgeyB9IC8vIE5vdCBp
bnN0YW50aWFibGUuCitwdWJsaWM6CisgICAgCisgICAgc3RhdGljIHNpemVfdCB0b3RhbFNpemUo
c2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID8gaGFzSW5kZXhpbmdIZWFk
ZXIgOiB0cnVlKTsKKyAgICAgICAgQVNTRVJUKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgPT0gc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSk7CisgICAgICAgIHJldHVybiAocHJlQ2FwYWNpdHkgKyBwcm9w
ZXJ0eUNhcGFjaXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyAoaGFzSW5kZXhpbmdIZWFk
ZXIgPyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpIDogMCkgKyBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBmcm9tQmFzZSh2b2lkKiBiYXNl
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4oc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihiYXNlKSArIHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSArIDEp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXhpbmdIZWFk
ZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG9m
ZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rvckxlbmd0aCgpIHsg
cmV0dXJuIG9mZnNldE9mSW5kZXhpbmdIZWFkZXIoKSArIEluZGV4aW5nSGVhZGVyOjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpOyB9CisgICAgCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5p
bml0aWFsaXplZChKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworCisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFs
RGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wg
aGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0
aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHks
IHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIAorICAgIEluZGV4aW5nSGVhZGVyKiBp
bmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9Cisg
ICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJl
dHVybiBpbmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgVCogaW5kZXhpbmdQYXlsb2FkKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4odGhpcyk7IH0KKyAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpIHsg
cmV0dXJuIGluZGV4aW5nUGF5bG9hZDxBcnJheVN0b3JhZ2U+KCk7IH0KKyAgICAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkgeyByZXR1cm4gLXN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7IH0KKyAgICBzdGF0aWMgaW50
IGluZGV4T2ZQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemVvZihJ
bmRleGluZ0hlYWRlcikgPT0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkpIHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eSAtIHByZUNhcGFjaXR5OyB9CisgICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqKTsKKyAg
ICAKKyAgICAvLyBUaGUgYnV0dGVyZmx5IHJlYWxsb2NhdGlvbiBtZXRob2RzIHBlcmZvcm0gdGhl
IHJlYWxsb2NhdGlvbiBpdHNlbGYgYnV0IGRvIG5vdCBjaGFuZ2UgYW55CisgICAgLy8gb2YgdGhl
IG1ldGEtZGF0YSB0byByZWZsZWN0IHRoYXQgdGhlIHJlYWxsb2NhdGlvbiBvY2N1cnJlZC4gTm90
ZSB0aGF0IHRoaXMgc2V0IG9mCisgICAgLy8gbWV0aG9kcyBpcyBub3QgZXhoYXVzdGl2ZSBhbmQg
aXMgbm90IGludGVuZGVkIHRvIGVuY2Fwc3VsYXRlIGFsbCBwb3NzaWJsZSBhbGxvY2F0aW9uCisg
ICAgLy8gbW9kZXMgb2YgYnV0dGVyZmxpZXMgLSB0aGVyZSBhcmUgY29kZSBwYXRocyB0aGF0IGFs
bG9jYXRlIGJ1dHRlcmZsaWVzIGJ5IGNhbGxpbmcKKyAgICAvLyBkaXJlY3RseSBpbnRvIEhlYXA6
OnRyeUFsbG9jYXRlU3RvcmFnZS4KKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiBncm93
UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBz
aXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOwor
ICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRl
cmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXpl
X3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQg
YXNzZXJ0cyBhcyBtdWNoLgorICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KyAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcm9wZXJ0
eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgYm9vbCBuZXdIYXNJbmRl
eGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBC
dXR0ZXJmbHkqIHJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHNpemVfdCBu
ZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8g
QXNzdW1lcyB0aGF0IHlvdSdyZSBub3QgY2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVj
dCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVyLgorICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1
cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CisgICAgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1
cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEJ1dHRlcmZseV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisj
ZGVmaW5lIEJ1dHRlcmZseUlubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQXJyYXlTdG9yYWdl
LmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVN
ZXRob2RzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHks
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cykKK3sKKyAgICB2b2lkKiB0ZW1wOworICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3Rv
cmFnZShzaXplLCAmdGVtcCkpCisgICAgICAgIENSQVNIKCk7CisgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBmcm9tQmFzZSh0ZW1wLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRl
ciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgICAgIGds
b2JhbERhdGEsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmIChoYXNJbmRleGluZ0hlYWRl
cikKKyAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRl
eGluZ0hlYWRlcigpLCAwKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gZnJvbUJhc2UoCisgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZSh0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLAorICAgICAgICBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQq
IEJ1dHRlcmZseTo6YmFzZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICByZXR1cm4gYmFz
ZShpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2Fw
YWNpdHksIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcm9wZXJ0eUNh
cGFjaXR5KQoreworICAgIEFTU0VSVChuZXdQcm9wZXJ0eUNhcGFjaXR5ID4gb2xkUHJvcGVydHlD
YXBhY2l0eSk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAor
ICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgbmV3UHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBtZW1jcHko
CisgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5
LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCisgICAg
ICAgIHRvdGFsU2l6ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5
Q2FwYWNpdHksIHNpemVfdCBuZXdQcm9wZXJ0eUNhcGFjaXR5KQoreworICAgIHJldHVybiBncm93
UHJvcGVydHlTdG9yYWdlKAorICAgICAgICBnbG9iYWxEYXRhLCBpbmRleGluZ0hlYWRlcigpLT5w
cmVDYXBhY2l0eShzdHJ1Y3R1cmUpLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBoYXNJ
bmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhp
bmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJv
cGVydHlDYXBhY2l0eSk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd1By
b3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlLCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1By
b3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgIWluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5
KG9sZFN0cnVjdHVyZSkpOworICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBoYWRJbmRl
eGluZ0hlYWRlciA9PSBoYXNJbmRleGluZ0hlYWRlcihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7CisgICAgdm9pZCogdGhlQmFzZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7Cisg
ICAgc2l6ZV90IG9sZFNpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5k
ZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzaXplX3Qg
bmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxv
Y2F0ZVN0b3JhZ2UoJnRoZUJhc2UsIG9sZFNpemUsIG5ld1NpemUpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gZnJvbUJhc2UodGhlQmFzZSwgMCwgcHJvcGVydHlDYXBhY2l0eSk7Cit9
CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld0luZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIHJldHVybiBncm93QXJyYXlSaWdodCgKKyAg
ICAgICAgZ2xvYmFsRGF0YSwgb2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyKG9sZFN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpLAorICAgICAgICBpbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyhvbGRTdHJ1Y3R1cmUpLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Cit9
CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6cmVzaXplQXJyYXkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGlu
Z0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3
UHJlQ2FwYWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCisgICAgICAgIGdsb2JhbERhdGEsIG5ld1ByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5LCBuZXdIYXNJbmRleGluZ0hlYWRlciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG1hZGUgbXVjaCBtb3JlIGVmZmlj
aWVudCBpZiB3ZSB1c2VkIHRoZSBwcm9wZXJ0eSBzaXplLAorICAgIC8vIG5vdCB0aGUgY2FwYWNp
dHkuCisgICAgdm9pZCogdG8gPSByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlD
YXBhY2l0eTsKKyAgICB2b2lkKiBmcm9tID0gcHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNh
cGFjaXR5OworICAgIHNpemVfdCBzaXplID0gc3RkOjptaW4oCisgICAgICAgIHRvdGFsU2l6ZSgw
LCBwcm9wZXJ0eUNhcGFjaXR5LCBvbGRIYXNJbmRleGluZ0hlYWRlciwgb2xkSW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpLAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwg
bmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7Cisg
ICAgbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxp
bmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJlc2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90
IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQoreworICAgIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
OworICAgIHJldHVybiByZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlciwKKyAgICAgICAgaW5kZXhp
bmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKSwgbmV3UHJl
Q2FwYWNpdHksCisgICAgICAgIGhhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7Cit9CisKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6dW5zaGlmdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNTRVJU
KGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICBBU1NF
UlQobnVtYmVyT2ZTbG90cyA8PSBpbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1
cmUpKTsKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBwcm9iYWJseSBiZSB3aXNlIHRv
IHJld3JpdGUgdGhpcyBhcyBhIGxvb3Agc2luY2UgKDEpIHdlIGtub3cgaW4gd2hpY2gKKyAgICAv
LyBkaXJlY3Rpb24gd2UncmUgbW92aW5nIG1lbW9yeSBzbyB3ZSBkb24ndCBuZWVkIHRoZSBleHRy
YSBjaGVjayBvZiBtZW1tb3ZlIGFuZCAoMikgd2UncmUKKyAgICAvLyBtb3ZpbmcgYSBzbWFsbCBh
bW91bnQgb2YgbWVtb3J5IGluIHRoZSBjb21tb24gY2FzZSBzbyB0aGUgdGhyb3VnaHB1dCBvZiBt
ZW1tb3ZlIHdvbid0CisgICAgLy8gYW1vcnRpemUgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcgaXQu
IEFuZCBubywgd2UgY2Fubm90IHJlbHkgb24gdGhlIEMrKyBjb21waWxlciB0bworICAgIC8vIGlu
bGluZSBtZW1tb3ZlIChwYXJ0aWN1bGFybHkgc2luY2UgdGhlIHNpemUgYXJndW1lbnQgaXMgbGlr
ZWx5IHRvIGJlIHZhcmlhYmxlKSwgbm9yIGNhbgorICAgIC8vIHdlIHJlbHkgb24gdGhlIGNvbXBp
bGVyIHRvIHJlY29nbml6ZSB0aGUgb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIChz
aW5jZQorICAgIC8vIHByb3BlcnR5Q2FwYWNpdHkgaXMgdmFyaWFibGUgYW5kIGNvdWxkIGNhdXNl
IHdyYXAtYXJvdW5kIGFzIGZhciBhcyB0aGUgY29tcGlsZXIga25vd3MpLgorICAgIG1lbW1vdmUo
CisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gbnVtYmVyT2ZTbG90cyAtIHByb3BlcnR5Q2Fw
YWNpdHksCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSwKKyAg
ICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICByZXR1cm4g
SW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJlck9mU2xv
dHMpLT5idXR0ZXJmbHkoKTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpzaGlm
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG51bWJlck9mU2xvdHMpCit7CisgICAgQVNT
RVJUKGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OworICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiB1bnNoaWZ0KCksIGFib3ZlLgorICAgIG1l
bW1vdmUoCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSArIG51
bWJlck9mU2xvdHMsCisgICAgICAgIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0
eSwKKyAgICAgICAgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIHByb3BlcnR5Q2FwYWNpdHkgKyBz
aXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBy
ZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb21FbmRPZihwcm9wZXJ0eVN0b3JhZ2UoKSArIG51bWJl
ck9mU2xvdHMpLT5idXR0ZXJmbHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Qcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVu
Y3Rpb25QdHIgZ2V0T3duUHJvcGVydHlOYW1lczsKIAorICAgICAgICB0eXBlZGVmIHZvaWQgKCpH
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lczsKKwogICAgICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25Q
dHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwogICAgICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlO
YW1lczsKIApAQCAtMTI0LDYgKzEyNyw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsg
XAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXNPYmplY3QsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFt
ZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6Omhhc0luc3RhbmNlLCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZGV4aW5nSGVhZGVyX2gKKyNk
ZWZpbmUgSW5kZXhpbmdIZWFkZXJfaAorCisjaW5jbHVkZSAiUHJvcGVydHlTdG9yYWdlLmgiCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCdXR0
ZXJmbHk7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBTdHJ1Y3R1cmU7Citz
dHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBJbmRleGluZ0hlYWRlciB7CitwdWJsaWM6Cisg
ICAgLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAyXjMy
IC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorICAgIC8vIHRoZXJlIGlzIG5v
IHJpc2sgb2Ygb3ZlcmZsb3cuCisgICAgZW51bSB7IG1heGltdW1MZW5ndGggPSAweDEwMDAwMDAw
IH07CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkg
eyByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX3B1YmxpY0xlbmd0aCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEluZGV4aW5nSGVhZGVyLCBtX3ZlY3Rvckxlbmd0aCk7IH0KKyAgICAKKyAg
ICBJbmRleGluZ0hlYWRlcigpCisgICAgICAgIDogbV9wdWJsaWNMZW5ndGgoMCkKKyAgICAgICAg
LCBtX3ZlY3Rvckxlbmd0aCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgdmVj
dG9yTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3JMZW5ndGg7IH0KKyAgICAKKyAgICB2
b2lkIHNldFZlY3Rvckxlbmd0aCh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NF
UlQobGVuZ3RoIDw9IG1heGltdW1MZW5ndGgpOworICAgICAgICBtX3ZlY3Rvckxlbmd0aCA9IGxl
bmd0aDsKKyAgICB9CisgICAgCisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4g
bV9wdWJsaWNMZW5ndGg7IH0KKyAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhX
b3JkKSB7IG1fcHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQorICAgIAorICAgIHN0YXRpYyBJbmRl
eGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJbmRleGluZ0hlYWRlciogZnJvbShjb25zdCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PGNvbnN0IEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFn
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVy
Kj4oYXJyYXlTdG9yYWdlKSAtIDE7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KHByb3BlcnR5
U3RvcmFnZSk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3Jh
Z2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UHJvcGVydHlTdG9y
YWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PENvbnN0UHJvcGVydHlTdG9yYWdlPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QXJyYXlTdG9yYWdlKj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCdXR0
ZXJmbHkqPih0aGlzICsgMSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IG5vdCBzdGFuZGFsb25lIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY2Fubm90IGJlCisgICAgLy8g
dXNlZCBvbiBhIGNvcHkgb2YgdGhlIEluZGV4aW5nSGVhZGVyLgorICAgIHNpemVfdCBwcmVDYXBh
Y2l0eShTdHJ1Y3R1cmUqKTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMo
U3RydWN0dXJlKik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CisgICAgCisgICAgdWludDMyX3QgbV9wdWJsaWNMZW5ndGg7IC8vIFRoZSBt
ZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZvciBh
bGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxlIGxl
bmd0aCAoYXJyYXkubGVuZ3RoKS4KKyAgICB1aW50MzJfdCBtX3ZlY3Rvckxlbmd0aDsgLy8gVGhl
IGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0dWFsIHNpemUg
b2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFk
ZXJJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kc19oCisjZGVmaW5lIEluZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJJbmRleGluZ0hlYWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworaW5saW5lIHNpemVfdCBJbmRleGluZ0hlYWRlcjo6cHJlQ2FwYWNpdHkoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkgJiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIGFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhczsKK30KKworaW5saW5lIHNpemVf
dCBJbmRleGluZ0hlYWRlcjo6aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgaWYgKExJS0VMWSghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
JiBIYXNBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcihhcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nSGVhZGVySW5saW5l
TWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ1R5cGVf
aAorI2RlZmluZSBJbmRleGluZ1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1
aW50OF90IEluZGV4aW5nVHlwZTsKKworLy8gRmxhZ3MgZm9yIHRlc3RpbmcgdGhlIHByZXNlbmNl
IG9mIGNhcGFiaWxpdGllcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAg
ICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFzQXJyYXlTdG9y
YWdlICAgICAgICAgID0gODsKKworLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhl
IGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CisvLyBtYXNrZWQgb2ZmIHVu
bGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBIYWRBcnJheVN0b3JhZ2UgICAgICAgICAgPSAxNjsgLy8gTWVhbnMgdGhhdCB0aGlzIG9iamVj
dCBkaWQgaGF2ZSBhcnJheSBzdG9yYWdlIGluIHRoZSBwYXN0LgorCisvLyBMaXN0IG9mIGFjY2Vw
dGFibGUgYXJyYXkgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAg
ICAgICAgICAgICAgICA9IDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSA9IEhhc0FycmF5U3RvcmFnZTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgQXJyYXkgICAgICAgICAgICAgICAgICAgID0gSXNBcnJheTsKK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQXJyYXlXaXRoQXJyYXlTdG9yYWdlICAgID0gSXNBcnJheSB8IEhhc0FycmF5U3Rv
cmFnZTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMuCitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgICAgICAgICAgICA9IDE1OworCisvLyBNYXNrIG9mIGFs
bCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IDMxOworCitpbmxpbmUgYm9vbCBo
YXNJbmRleGluZ0hlYWRlcihJbmRleGluZ1R5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gISEodHlw
ZSAmIEhhc0FycmF5U3RvcmFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSW5kZXhpbmdUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIEpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENhbGxGcmFtZSogY2EKICAgICAg
ICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSwKICAgICAgICAgY2FsbEZyYW1lLT5zY29wZSgpCiAg
ICAgKQotICAgICwgbV9yZWdpc3RlckFycmF5KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCAwKQorICAgICwgbV9yZWdpc3RlckFycmF5KDApCiAgICAgLCBtX251bUNhcHR1cmVkQXJncyht
YXgoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCksIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cGFyYW1l
dGVyQ291bnQoKSkpCiAgICAgLCBtX251bUNhcHR1cmVkVmFycyhmdW5jdGlvbkV4ZWN1dGFibGUt
PmNhcHR1cmVkVmFyaWFibGVDb3VudCgpKQogICAgICwgbV9pc1Rvcm5PZmYoZmFsc2UpCkBAIC03
MiwxMiArNzIsMTIgQEAgdm9pZCBKU0FjdGl2YXRpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKgog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICAvLyBO
byBuZWVkIHRvIG1hcmsgb3VyIHJlZ2lzdGVycyBpZiB0aGV5J3JlIHN0aWxsIGluIHRoZSBSZWdp
c3RlckZpbGUuCi0gICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJyYXkgPSB0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCk7CisgICAgUHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyQXJy
YXkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXk7CiAgICAgaWYgKCFyZWdpc3RlckFycmF5
KQogICAgICAgICByZXR1cm47CiAKICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoYml0d2lzZV9j
YXN0PHZvaWQqKj4oJnJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6
ZUluQnl0ZXMoKSwgcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVnaXN0ZXJBcnJheSksIHRo
aXNPYmplY3QtPnJlZ2lzdGVyQXJyYXlTaXplKCkpOwotICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7Cisg
ICAgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5ID0gcmVnaXN0ZXJBcnJheTsKICAgICB0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyB0aGlzT2JqZWN0LT5yZWdpc3Rl
ck9mZnNldCgpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBhcmd1bWVudHMgb2JqZWN0LCBzaW5jZSBp
dCBwb2ludHMgYXQgb3VyIGJ1ZmZlci4KQEAgLTEzNiw3ICsxMzYsNyBAQCBpbmxpbmUgYm9vbCBK
U0FjdGl2YXRpb246OnN5bWJvbFRhYmxlUHV0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIApAQCAtMTUxLDgg
KzE1MSw4IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxl
T2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93blByb3BlcnR5TmFtZXMKLSAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICAvLyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9m
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CiAKIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNEeW5hbWlj
U2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtOTUsNyAr
OTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXpl
KCk7CiAgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZUluQnl0ZXMoKTsKIAotICAgICAg
ICBTdG9yYWdlQmFycmllciBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2Yg
cmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3Rl
cnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9y
ZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVu
IGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRBcmdzOwogICAgICAgICBpbnQgbV9u
dW1DYXB0dXJlZFZhcnMgOiAzMDsKICAgICAgICAgYm9vbCBtX2lzVG9ybk9mZiA6IDE7CkBAIC0x
NjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZvciAoaW50IGkgPSBmcm9t
OyBpIDwgdG87ICsraSkKICAgICAgICAgICAgIHJlZ2lzdGVyc1tpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgbV9yZWdpc3RlcnNbaV0uZ2V0KCkpOwogCi0gICAgICAgIG1fcmVnaXN0ZXJBcnJheS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIG1fcmVnaXN0ZXJB
cnJheSA9IHJlZ2lzdGVyQXJyYXk7CiAgICAgICAgIG1fcmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwog
ICAgICAgICBtX2lzVG9ybk9mZiA9IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKQEAg
LTI0LDEzICsyNCwxNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIkluZGV4
aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5Lmgi
CisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDUsNDgwICs0OSwyMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CiBBU1NF
UlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU0FycmF5KTsKIAotLy8gT3ZlcnZpZXcgb2YgSlNB
cnJheQotLy8KLS8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBiZSBzdG9yZWQg
aW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKLS8vICAgKiBUaGUgcmVndWxhciBKU09iamVjdCBw
cm9wZXJ0eSBtYXAuCi0vLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KLS8vICAgKiBBIHNwYXJzZSBt
YXAgb2YgYXJyYXkgZW50cmllcy4KLS8vCi0vLyBQcm9wZXJ0aWVzIHdpdGggbm9uLW51bWVyaWMg
aWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJlc2VudGFibGUK
LS8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBpcyBncmVhdGVy
IHRoYW4gIE1BWF9BUlJBWV9JTkRFWAotLy8gKHNwZWNpZmljYWxseSwgdGhpcyBpcyBvbmx5IG9u
ZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25lZCAzMi1iaXQK
LS8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFuZCB3aWxsIGJl
IHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8KLS8vIEFsbCBwcm9wZXJ0
aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIGksCi0vLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBhcmUgYW4gYXJy
YXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKLS8vIHN0b3JhZ2UgdmVj
dG9yIG9yIHRoZSBzcGFyc2UgbWFwLiAgQW4gYXJyYXkgaW5kZXggaSB3aWxsIGJlIGhhbmRsZWQg
aW4gdGhlIGZvbGxvd2luZwotLy8gZmFzaGlvbjoKLS8vCi0vLyAgICogV2hlcmUgKGkgPCBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHN0b3Jh
Z2UgdmVjdG9yLAotLy8gICAgIHVubGVzcyB0aGUgYXJyYXkgaXMgaW4gU3BhcnNlTW9kZSBpbiB3
aGljaCBjYXNlIGFsbCBwcm9wZXJ0aWVzIGdvIGludG8gdGhlIG1hcC4KLS8vICAgKiBXaGVyZSAo
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCA8PSBpIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCkg
dGhlIHZhbHVlIHdpbGwgZWl0aGVyCi0vLyAgICAgYmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZl
Y3RvciBvciBpbiB0aGUgc3BhcnNlIGFycmF5LCBkZXBlbmRpbmcgb24gdGhlIGRlbnNpdHkgb2YK
LS8vICAgICBkYXRhIHRoYXQgd291bGQgYmUgc3RvcmVkIGluIHRoZSB2ZWN0b3IgKGEgdmVjdG9y
IGJlaW5nIHVzZWQgd2hlcmUgYXQgbGVhc3QKLS8vICAgICAoMSAvIG1pbkRlbnNpdHlNdWx0aXBs
aWVyKSBvZiB0aGUgZW50cmllcyB3b3VsZCBiZSBwb3B1bGF0ZWQpLgotLy8gICAqIFdoZXJlIChN
QVhfU1RPUkFHRV9WRUNUT1JfSU5ERVggPCBpIDw9IE1BWF9BUlJBWV9JTkRFWCkgdGhlIHZhbHVl
IHdpbGwgYWx3YXlzIGJlIHN0b3JlZAotLy8gICAgIGluIHRoZSBzcGFyc2UgYXJyYXkuCi0KLS8v
IFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVwZW5kYW50
IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAtIHRoZSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0IHRoZSBz
dG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXplb2YoQXJy
YXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAodmVjdG9y
TGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0gMHhGRkZG
RkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUgTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZGRkZVIC0g
KHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAv
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSB0
byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBpbnRyb2R1
Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFyOi8vcHJv
YmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAwMFUKLSNk
ZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gMSkKLS8vIDB4RkZGRkZGRkYgaXMgYSBiaXQgd2VpcmQgLS0gaXMgbm90IGFuIGFycmF5IGlu
ZGV4IGV2ZW4gdGhvdWdoIGl0J3MgYW4gaW50ZWdlci4KLSNkZWZpbmUgTUFYX0FSUkFZX0lOREVY
IDB4RkZGRkZGRkVVCi0KLS8vIFRoZSB2YWx1ZSBCQVNFX1ZFQ1RPUl9MRU4gaXMgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIHZlY3RvciBlbGVtZW50cyB3ZSdsbCBhbGxvY2F0ZQotLy8gZm9yIGFuIGFy
cmF5IHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNlcGNpZmllZCBsZW5ndGggKGUuZy4gYSA9IG5l
dyBBcnJheSgxMjMpKQotI2RlZmluZSBCQVNFX1ZFQ1RPUl9MRU4gNFUKLSAgICAKLS8vIFRoZSB1
cHBlciBib3VuZCB0byB0aGUgc2l6ZSB3ZSdsbCBncm93IGEgemVybyBsZW5ndGggYXJyYXkgd2hl
biB0aGUgZmlyc3QgZWxlbWVudAotLy8gaXMgYWRkZWQuCi0jZGVmaW5lIEZJUlNUX1ZFQ1RPUl9H
Uk9XIDRVCi0KLS8vIE91ciBwb2xpY3kgZm9yIHdoZW4gdG8gdXNlIGEgdmVjdG9yIGFuZCB3aGVu
IHRvIHVzZSBhIHNwYXJzZSBtYXAuCi0vLyBGb3IgYWxsIGFycmF5IGluZGljZXMgdW5kZXIgTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCwgd2UgYWx3YXlzIHVzZSBhIHZlY3Rvci4KLS8vIFdoZW4gaW5k
aWNlcyBncmVhdGVyIHRoYW4gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCBhcmUgaW52b2x2ZWQsIHdl
IHVzZSBhIHZlY3RvcgotLy8gYXMgbG9uZyBhcyBpdCBpcyAxLzggZnVsbC4gSWYgbW9yZSBzcGFy
c2UgdGhhbiB0aGF0LCB3ZSB1c2UgYSBtYXAuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWluRGVu
c2l0eU11bHRpcGxpZXIgPSA4OwotCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheTo6c19pbmZvID0g
eyJBcnJheSIsICZKU05vbkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNBcnJheSl9OwogCi0vLyBXZSBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBs
YXN0IGFycmF5IGFmdGVyIGl0IHdhcyBncm93bi4gIFdlIHVzZSB0aGlzCi0vLyBhcyBhIHNpbXBs
ZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRoZSBuZXh0IGFycmF5IGZyb20g
c2l6ZSAwLgotLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhlIGNvbnN0YW50IEZJUlNUX1ZF
Q1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCi1zdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9
IDA7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgbnVtVmFsdWVzKQotewotICAgIHJldHVybiBsZW5ndGggPD0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWCB8fCBsZW5ndGggLyBtaW5EZW5zaXR5TXVsdGlwbGllciA8PSBu
dW1WYWx1ZXM7Ci19Ci0KLXN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wg
dGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHRocm93RXhj
ZXB0aW9uKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwobWVzc2Fn
ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmICFDSEVDS19BUlJBWV9DT05TSVNURU5D
WQotCi1pbmxpbmUgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hl
Y2tUeXBlKQorQnV0dGVyZmx5KiBjcmVhdGVBcnJheUJ1dHRlcmZseUluRGljdGlvbmFyeUluZGV4
aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgp
CiB7Ci19Ci0KLSNlbmRpZgotCi12b2lkIEpTQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OwotCi0gICAgdW5zaWduZWQgaW5pdGlhbFZlY3Rvckxlbmd0aCA9IEJBU0VfVkVDVE9SX0xFTjsK
LSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6ZShpbml0aWFsVmVj
dG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNpemUsICZuZXdTdG9y
YWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2UgPSBzdGF0aWNfY2Fz
dDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNl
ID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0aWFsTGVuZ3RoOwot
ICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGUoCisgICAgICAgIGdsb2JhbERhdGEsIDAsIDAsIHRydWUsIEluZGV4aW5n
SGVhZGVyKCksIEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CisgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5zZXRMZW5n
dGgoaW5pdGlhbExlbmd0aCk7CisgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAg
IHN0b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVh
cigpOworICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSAwOwogI2lmIENIRUNLX0FS
UkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9u
ID0gZmFsc2U7CisgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICBz
dG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKICNlbmRpZgotCi0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotfQotCi1KU0FycmF5KiBKU0FycmF5Ojp0cnlGaW5pc2hDcmVhdGlv
blVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbGVuZ3RocyBsYXJn
ZXIgdGhhbiB3ZSBjYW4gaGFuZGxlIHdpdGggYSB2ZWN0b3IuCi0gICAgaWYgKGluaXRpYWxMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5ndGggPSBtYXgoaW5pdGlhbExlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKTsKLSAgICB1bnNpZ25lZCBpbml0aWFsU3RvcmFnZVNpemUgPSBzdG9yYWdlU2l6
ZShpbml0aWFsVmVjdG9yTGVuZ3RoKTsKLQotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAg
IGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsU3RvcmFnZVNp
emUsICZuZXdTdG9yYWdlKSkKLSAgICAgICAgQ1JBU0goKTsKLSAgICAKLSAgICBtX3N0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihuZXdTdG9yYWdlKTsKLSAgICBtX3N0b3JhZ2Ut
Pm1fYWxsb2NCYXNlID0gbV9zdG9yYWdlOwotICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBpbml0
aWFsTGVuZ3RoOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gaW5pdGlhbFZlY3Rvckxlbmd0aDsKLSAg
ICBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBpbml0aWFsTGVuZ3RoOwotCi0jaWYg
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICBtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25J
bmRleCA9IDA7Ci0gICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1
ZTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gY2Fu
IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBvYmplY3QuCi12b2lkIEpTQXJy
YXk6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5
KERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKTsKLSAgICB0aGlzT2JqZWN0LT5kZWFsbG9jYXRl
U3BhcnNlTWFwKCk7Ci19Ci0KLWlubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpBZGRSZXN1bHQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpKQotewot
ICAgIFNwYXJzZUFycmF5RW50cnkgZW50cnk7Ci0gICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFy
cmllcihqc1VuZGVmaW5lZCgpKTsKLQotICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQo
aSwgZW50cnkpOwotICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7Ci0gICAg
aWYgKGNhcGFjaXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgewotICAgICAgICBIZWFwOjpoZWFw
KGFycmF5KS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBh
Y2l0eSkgKiAoc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7Ci0gICAgICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQo
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1
ZSwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5
LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFs
d2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2Ug
dGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAotICAgIC8v
IGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBz
byByZW1vdmUgYWdhaW4uCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNF
eHRlbnNpYmxlKCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAg
IGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikp
IHsKLSAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAg
ICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVudHJ5LnNldChleGVjLT5n
bG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBKU1ZhbHVlIGFjY2Vzc29yID0gZW50cnkuQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKGFjY2Vz
c29yLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNl
dHRlcihhY2Nlc3NvciktPnNldHRlcigpOwotICAgIAotICAgIGlmICghc2V0dGVyKSB7Ci0gICAg
ICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNh
bGxEYXRhKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5k
KHZhbHVlKTsKLSAgICBjYWxsKGV4ZWMsIHNldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJh
eSwgYXJncyk7Ci19Ci0KLWlubGluZSBib29sIFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKLXsKLSAgICBBZGRSZXN1bHQgcmVzdWx0ID0g
YWRkKGFycmF5LCBpKTsKLSAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kOwotCi0gICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdl
IGZpcnN0IGFsd2F5cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCi0gICAgLy8gSW4gdGhlIHVuY29t
bW9uIGNhc2UgdGhhdCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5v
dAotICAgIC8vIGV4dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZl
IGRvbmUgLSBzbyByZW1vdmUgYWdhaW4uCi0gICAgaWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5kZXhM
aWtlUHV0RGlyZWN0ICYmIHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRlbnNpYmxl
KCkpIHsKLSAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0gICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGlu
ZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7
Ci0gICAgfQotCi0gICAgZW50cnkuYXR0cmlidXRlcyA9IDA7Ci0gICAgZW50cnkuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5s
aW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5U2xvdCYgc2xvdCkgY29uc3QK
LXsKLSAgICBKU1ZhbHVlIHZhbHVlID0gQmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsK
LQotICAgIGlmIChMSUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7Ci0gICAgICAgIHNs
b3Quc2V0VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNPYmpl
Y3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7Ci0gICAgaWYgKCFn
ZXR0ZXIpIHsKLSAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOwotfQotCi1pbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBj
b25zdAotewotICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihCYXNlOjpnZXQoKSwgYXR0cmli
dXRlcyk7Ci19Ci0KLWlubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KSBjb25zdAotewotICAgIEpTVmFsdWUgcmVzdWx0ID0g
QmFzZTo6Z2V0KCk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBpZiAoTElLRUxZKCFyZXN1
bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBKU09i
amVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0dGVyKCk7Ci0gICAgaWYg
KCFnZXR0ZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgQ2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwotICAgIHJldHVybiBjYWxsKGV4ZWMsIGdl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotfQot
Ci1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOwotICAgIHJldHVybiBCYXNlOjpnZXQoKTsK
LX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKLSAg
ICBmb3IgKGl0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7Ci19Ci0KLXZvaWQgSlNBcnJheTo6YWxs
b2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotewotICAgIG1fc3BhcnNl
VmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKLSAgICBnbG9iYWxEYXRhLmhlYXAu
YWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKLX0KLQotdm9pZCBKU0FycmF5OjpkZWFsbG9j
YXRlU3BhcnNlTWFwKCkKLXsKLSAgICBkZWxldGUgbV9zcGFyc2VWYWx1ZU1hcDsKLSAgICBtX3Nw
YXJzZVZhbHVlTWFwID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjplbnRlckRpY3Rpb25hcnlNb2Rl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLQotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIGFsbG9jYXRlU3BhcnNlTWFwKGdsb2Jh
bERhdGEpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIH0KLQotICAgIGlm
IChtYXAtPnNwYXJzZU1vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFwLT5zZXRTcGFy
c2VNb2RlKCk7Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2Ut
Pm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBu
ZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCi0g
ICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRo
ZW0uCi0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLml0
ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICB2b2lkKiBuZXdSYXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlB
bGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoMCksICZuZXdSYXdTdG9yYWdlKSkKLSAgICAgICAg
Q1JBU0goKTsKLSAgICAKLSAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNfY2Fz
dDxBcnJheVN0b3JhZ2UqPihuZXdSYXdTdG9yYWdlKTsKLSAgICBtZW1jcHkobmV3U3RvcmFnZSwg
bV9zdG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgbmV3U3RvcmFnZS0+bV9hbGxvY0Jhc2Ug
PSBuZXdTdG9yYWdlOwotICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgbV9pbmRleEJp
YXMgPSAwOwotICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERl
c2NyaXB0b3IpCi17Ci0gICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0g
ICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCi0gICAgICAgICAgICBlbnRyeUluTWFwLT5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlwdG9yLnZhbHVlKCkpOwotICAgICAg
ICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAg
ICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfkFjY2Vzc29yOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSkgewotICAgICAgICBKU09iamVjdCogZ2V0dGVyID0gMDsKLSAgICAgICAgaWYgKGRlc2Ny
aXB0b3IuZ2V0dGVyUHJlc2VudCgpKQotICAgICAgICAgICAgZ2V0dGVyID0gZGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZ2V0dGVyID0gb2xkRGVzY3JpcHRvci5nZXR0ZXJP
YmplY3QoKTsKLSAgICAgICAgSlNPYmplY3QqIHNldHRlciA9IDA7Ci0gICAgICAgIGlmIChkZXNj
cmlwdG9yLnNldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAgIHNldHRlciA9IGRlc2NyaXB0b3Iu
c2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIHNldHRlciA9IG9sZERlc2NyaXB0b3Iuc2V0dGVy
T2JqZWN0KCk7Ci0KLSAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRl
cjo6Y3JlYXRlKGV4ZWMpOwotICAgICAgICBpZiAoZ2V0dGVyKQotICAgICAgICAgICAgYWNjZXNz
b3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGdldHRlcik7Ci0gICAgICAgIGlmIChz
ZXR0ZXIpCi0gICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgc2V0dGVyKTsKLQotICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBhY2Nlc3Nvcik7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNj
cmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5SZWFk
T25seTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChkZXNjcmlwdG9yLmlz
R2VuZXJpY0Rlc2NyaXB0b3IoKSk7Ci0gICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2Ny
aXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpOwotfQotCi0v
LyBEZWZpbmVkIGluIEVTNS4xIDguMTIuOQotYm9vbCBKU0FycmF5OjpkZWZpbmVPd25OdW1lcmlj
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQotewotICAgIEFTU0VSVChpbmRl
eCAhPSAweEZGRkZGRkZGKTsKLQotICAgIGlmICghaW5TcGFyc2VNb2RlKCkpIHsKLSAgICAgICAg
Ly8gRmFzdCBjYXNlOiB3ZSdyZSBwdXR0aW5nIGEgcmVndWxhciBwcm9wZXJ0eSB0byBhIHJlZ3Vs
YXIgYXJyYXkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgd2lsbCBwZXNzaW1pc3RpY2FsbHkgYXNz
dW1lIHRoYXQgaWYgYXR0cmlidXRlcyBhcmUgbWlzc2luZyB0aGVuIHRoZXknbGwgZGVmYXVsdCB0
byBmYWxzZQotICAgICAgICAvLyDigJMgaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5
IGV4aXN0cyBtaXNzaW5nIGF0dHJpYnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJl
bnQgJ3RydWUnCi0gICAgICAgIC8vIHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxk
IGJlIHVzZWQgdG8gc2V0IGEgdmFsdWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFy
c2VNb2RlJykuCi0gICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKLSAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1
ZSgpLCB0aHJvd0V4Y2VwdGlvbiA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJl
Y3RJbmRleFNob3VsZE5vdFRocm93KTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudGVyRGljdGlv
bmFyeU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgIEFTU0VSVChtYXApOwotCi0gICAg
Ly8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blBy
b3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCi0gICAg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGlu
ZGV4KTsKLSAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kOwotCi0gICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhlIHZhbHVlIG9mIHRo
ZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgotICAgIC8vIDMuIElmIGN1
cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0aGVuIFJlamVjdC4K
LSAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyB0cnVl
LCB0aGVuCi0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGlu
ZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVz
Yykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBvd24g
ZGF0YSBwcm9wZXJ0eQotICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBPIHdob3NlIFtbVmFs
dWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBh
dHRyaWJ1dGUgdmFsdWVzCi0gICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkgRGVzYy4gSWYgdGhl
IHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJp
YnV0ZSBvZiB0aGUgbmV3bHkKLSAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQgdG8g
aXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJlIGFu
IGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNzb3Ig
cHJvcGVydHkgbmFtZWQgUCBvZgotICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1dLCBb
W1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFs
dWVzIGFyZSBkZXNjcmliZWQgYnkKLSAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFu
IGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUg
bmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQotICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1bHQg
dmFsdWUuCi0gICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCi0KLSAgICAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIGRlZmF1bHRzOwotICAgICAgICBlbnRyeUluTWFwLT5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0g
RG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmdl
dChkZWZhdWx0cyk7Ci0KLSAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBk
ZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3N0b3JhZ2UtPm1f
bGVuZ3RoKQotICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2
ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50LgotICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBl
dmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBv
ZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25k
aW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFs
Z29yaXRobSAoOS4xMikuCi0gICAgUHJvcGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgZW50
cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwotICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBk
ZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywgY3VycmVudCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gNy4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBm
YWxzZSB0aGVuCi0gICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKSB7Ci0gICAgICAgIC8v
IDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRy
dWUuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNj
cmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1
dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgIC8vIDcuYi4gUmVqZWN0
LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUg
W1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFu
IG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFi
bGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJh
YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAi
QXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFi
bGUgcHJvcGVydHkuIik7Ci0gICAgfQotCi0gICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRv
cihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4K
LSAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgIC8v
IDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0
b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVzdWx0cywgdGhlbgotICAgICAgICBpZiAoY3VycmVu
dC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsK
LSAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVs
ZCBvZiBjdXJyZW50IGlzIGZhbHNlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3Vy
YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRp
b24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZp
Z3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3Jp
cHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAg
b2Ygb2JqZWN0IE8gZnJvbSBhCi0gICAgICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFj
Y2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252
ZXJ0ZWQgcHJvcGVydHnigJhzCi0gICAgICAgICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBb
W0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5
4oCYcyBhdHRyaWJ1dGVzIHRvCi0gICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4K
LSAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBv
ZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4K
LSAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZl
cnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KLSAg
ICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHni
gJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgIH0gZWxzZSBp
ZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlw
dG9yKCkpIHsKLSAgICAgICAgICAgIC8vIDEwLiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1
cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KLSAg
ICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJl
bnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUo
KSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBS
ZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCi0gICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxl
IGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgICAg
ICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UsIHRoZW4KLSAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtb
VmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFs
dWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChk
ZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCks
IGN1cnJlbnQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhl
YywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRv
bmx5IHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gMTAuYi4gZWxz
ZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkg
Y2hhbmdlIGlzIGFjY2VwdGFibGUuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQoY3VycmVudC5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIGN1cnJlbnQuZ2V0dGVyUHJlc2Vu
dCgpICYmIGN1cnJlbnQuc2V0dGVyUHJlc2VudCgpKTsKLSAgICAgICAgICAgIC8vIDExLiBFbHNl
LCBJc0FjY2Vzc29yRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNBY2Nlc3NvckRlc2NyaXB0b3Io
RGVzYykgYXJlIGJvdGggdHJ1ZSBzbywgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2Yg
Y3VycmVudCBpcyBmYWxzZSwgdGhlbgotICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3Vy
YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaS4gUmVqZWN0LCBpZiB0aGUgW1tTZXRd
XSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbU2V0XV0sIGN1
cnJlbnQuW1tTZXRdXSkgaXMgZmFsc2UuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyUHJlc2VudCgpICYmIGRlc2NyaXB0b3Iuc2V0dGVyKCkgIT0gY3VycmVudC5zZXR0ZXIo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUg
cHJvcGVydHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJlamVjdCwgaWYgdGhlIFtb
R2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW0dldF1d
LCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlw
dG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigpICE9IGN1cnJlbnQuZ2V0
dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgZ2V0dGVyIG9mIGFuIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gMTIuIEZvciBlYWNoIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIHRoYXQgaXMgcHJlc2VudCwg
c2V0IHRoZSBjb3JyZXNwb25kaW5nbHkgbmFtZWQgYXR0cmlidXRlIG9mIHRoZSBwcm9wZXJ0eSBu
YW1lZCBQIG9mIG9iamVjdCBPIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuCi0gICAgcHV0RGVz
Y3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKLSAgICAvLyAx
My4gUmV0dXJuIHRydWUuCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGJ1dHRlcmZseTsK
IH0KIAogdm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGJv
b2wgd3JpdGFibGUpCkBAIC01MjcsOSArNzQsOSBAQCB2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdy
aXRhYmxlKEV4ZWNTdGF0CiAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFibGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGVudGVyRGljdGlvbmFyeU1vZGUoZXhlYy0+Z2xvYmFs
RGF0YSgpKTsKKyAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xvYmFsRGF0
YSgpKTsKIAotICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwLmdldCgpOwogICAgIEFTU0VSVChtYXApOwogICAgIG1hcC0+c2V0TGVuZ3RoSXNSZWFkT25s
eSgpOwogfQpAQCAtNjMwLDM4ICsxNzcsMTAgQEAgYm9vbCBKU0FycmF5OjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdAogICAgICAgICAvLyBlLmkuIFNldCBvbGRMZW5EZXNjLltbVmFsdWVdXSB0
byBpbmRleCArIDEuCiAgICAgICAgIC8vIGUuaWkuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVP
d25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0
aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuIFRoaXMgY2FsbCB3aWxsIGFs
d2F5cyByZXR1cm4gdHJ1ZS4KICAgICAgICAgLy8gZi4gUmV0dXJuIHRydWUuCi0gICAgICAgIHJl
dHVybiBhcnJheS0+ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlw
dG9yLCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhy
b3dFeGNlcHRpb24pOwotfQotCi1ib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihj
ZWxsKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7
Ci0KLSAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkgewotICAgICAgICBpZiAoaSA+IE1B
WF9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpKSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0g
ICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0
aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwotICAgICAgICBpZiAoaXQgIT0gbWFwLT5u
b3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25kLmdldChzbG90KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnJheS0+ZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlv
bik7CiAgICAgfQogCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgc2xvdCk7CisgICAgcmV0
dXJuIGFycmF5LT5KU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKIH0KIAogYm9vbCBKU0FycmF5
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTY3MiwxMCArMTkx
LDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHJl
dHVybiBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGksIHNsb3QpOwotCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIApAQCAtNjg3LDI2ICsyMDIs
NiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fc3RvcmFnZTsKLSAgICAKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAgICAgICAg
aWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgICAgICBpZiAo
aXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQo
ZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0K
IApAQCAtNzE0LDExICsyMDksNiBAQCBib29sIEpTQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKCiB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNl
bGwpOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChp
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewotICAgICAgICBwdXRCeUluZGV4KHRoaXNP
YmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KIAogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkgewogICAgICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSB2YWx1ZS50b1VJbnQz
MihleGVjKTsKQEAgLTczMywxOTYgKzIyMyw5IEBAIHZvaWQgSlNBcnJheTo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXQKICAgICBKU09iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi12b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgLy8g
RmFzdCBjYXNlIC0gc3RvcmUgdG8gdGhlIHZlY3Rvci4KLSAgICBpZiAoaSA8IHRoaXNPYmplY3Qt
Pm1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVT
bG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFs
dWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgotICAgICAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAg
ICAgICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGgg
PSBsZW5ndGg7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgICAgICsrc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKLQotICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpc09iamVjdCwgdmFsdWUpOwotICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgMl4zMi0x
IC0gdGhpcyBpcyBub3QgYW4gYXJyYXkgaW5kZXggKHNlZSBFUzUuMSAxNS40KSwgYW5kIGlzIHRy
ZWF0ZWQgYXMgYSByZWd1bGFyIHByb3BlcnR5LgotICAgIGlmIChVTkxJS0VMWShpID4gTUFYX0FS
UkFZX0lOREVYKSkgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7
Ci0gICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCB2YWx1ZSwgc2xvdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBjYWxsIHB1dEJ5SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGguCi0gICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aChleGVjLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgIHRoaXNPYmplY3QtPmNo
ZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRo
YXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92
ZWN0b3JMZW5ndGgpOwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMg
d2hlcmUgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtF
TFkoIW1hcCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3
ZSBzaG91bGQgaGF2ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNw
YXJlIG1hcC4KLSAgICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAg
Ly8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFn
ZS0+bV9sZW5ndGgpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0g
ICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2
ZWN0b3IsIGFuZCB0aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtF
TFkoKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cikpICYmIGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5
IGJlZW4gcmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAg
c3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBw
cm9wZXJ0eSAtIGFsbG9jYXRlIGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCi0gICAgICAg
IGFsbG9jYXRlU3BhcnNlTWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIG1hcCA9IG1f
c3BhcnNlVmFsdWVNYXA7Ci0gICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBz
aG91bGRUaHJvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9s
ZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVu
Z3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5n
IHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobWFwLT5s
ZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IGkgKyAxOwotICAgICAgICBz
dG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVu
dGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5n
IHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3Bh
cnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9j
YXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKLSAgICBpZiAobWFwLT5zcGFyc2VNb2Rl
KCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8
fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7Ci0g
ICAgICAgIG1hcC0+cHV0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyaW5jcmVh
c2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHN0b3JhZ2Ug
PSBtX3N0b3JhZ2U7Ci0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVl
c0luQXJyYXk7Ci0KLSAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhl
IHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25k
LmdldE5vblNwYXJzZU1vZGUoKSk7Ci0gICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIG5ldyBwcm9wZXJ0eSBpbnRvIHRoZSB2ZWN0b3IuCi0gICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSB2ZWN0b3JbaV07Ci0gICAgaWYgKCF2YWx1ZVNsb3Qp
Ci0gICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICB2YWx1ZVNsb3Qu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLX0KLQotYm9vbCBKU0FycmF5OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdmFsdWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQotewotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLQotICAgIC8vIGkgc2hvdWxkIGJl
IGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rv
ci4KLSAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgQVNTRVJUKGkgPD0gTUFY
X0FSUkFZX0lOREVYKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsK
LSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotCi0gICAg
Ly8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNw
YXJzZSBtYXAuCi0gICAgaWYgKExJS0VMWSghbWFwKSkgewotICAgICAgICAvLyBJZiB0aGUgYXJy
YXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBt
b2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgotICAgICAgICBBU1NFUlQoaXNFeHRlbnNp
YmxlKCkpOwotICAgIAotICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5Lgot
ICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fbGVuZ3RoID0gaSArIDE7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJs
ZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZl
Y3Rvci4KLSAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFs
RGF0YSwgaSArIDEpKSkgewotICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9y
YWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRo
ZSB2ZWN0b3IuCi0gICAgICAgICAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0
IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBt
YXAgJiBhZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9i
YWxEYXRhKCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICByZXR1
cm4gbWFwLT5wdXREaXJlY3QoZXhlYywgdGhpcywgaSwgdmFsdWUsIG1vZGUpOwotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCi0g
ICAgICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCkgewotICAgICAg
ICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgaWYgKCFpc0V4dGVu
c2libGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9u
IG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0gICAgICAgIGxl
bmd0aCA9IGkgKyAxOwotICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9
Ci0KLSAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3
ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgotICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRv
IHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJl
IHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24gZmFpbHMuCi0gICAgdW5zaWduZWQgbnVtVmFs
dWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsK
LSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVu
Z3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gbWFwLT5wdXREaXJlY3QoZXhlYywg
dGhpcywgaSwgdmFsdWUsIG1vZGUpOwotCi0gICAgLy8gUmVyZWFkIG1fc3RvcmFnZSBhZnRlcmlu
Y3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICBzdG9y
YWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBudW1W
YWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hcCBpbnRv
IHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAgZm9yIChTcGFyc2VBcnJheVZh
bHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgaXQtPnNl
Y29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLQot
ICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOwotICAgIGlmICghdmFsdWVT
bG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgdmFsdWVT
bG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQotICAg
ICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MzAs
MzUgKzIzMyw2IEBAIGJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWwKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiB9CiAKLWJvb2wgSlNBcnJheTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQotewotICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNr
Q29uc2lzdGVuY3koKTsKLQotICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQotICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0KLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgaWYgKGkgPCB0aGlz
T2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAgICBpZiAodmFsdWVTbG90
KSB7Ci0gICAgICAgICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKLSAgICAgICAgICAgIC0tc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaWYgKGl0LT5z
ZWNvbmQuYXR0cmlidXRlcyAmIERvbnREZWxldGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBzdGF0aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9p
ZCogYikKIHsKICAgICB1bnNpZ25lZCBkYSA9ICpzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCo+
KGEpOwpAQCAtOTY2LDEyNyArMjQwLDI2IEBAIHN0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29y
dChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwogfQogCi12b2lk
IEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5
TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgotICAgIC8vIGlz
IGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRpZmZl
cmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGEgZGlm
ZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJyYXkuCi0KLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQg
dXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgdGhpc09iamVjdC0+bV92
ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgfQot
Ci0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNl
VmFsdWVNYXApIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBrZXlzOwotICAgICAgICBrZXlz
LnJlc2VydmVDYXBhY2l0eShtYXAtPnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBm
b3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCi0g
ICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJz
dCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUo
KSwgc2l6ZW9mKHVuc2lnbmVkKSwgY29tcGFyZUtleXNGb3JRU29ydCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7Ci0gICAgfQogCiAg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKLSAgICBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU0FycmF5OjpnZXROZXdWZWN0b3JM
ZW5ndGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCkKLXsKLSAgICBBU1NFUlQoZGVzaXJlZExlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLQotICAgIHVuc2lnbmVkIGluY3JlYXNl
ZExlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gbWluKG1fc3RvcmFnZS0+bV9s
ZW5ndGgsIDEwMDAwMFUpOwotCi0gICAgaWYgKGRlc2lyZWRMZW5ndGggPCBtYXhJbml0TGVuZ3Ro
KQotICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBtYXhJbml0TGVuZ3RoOwotICAgIGVsc2UgaWYg
KCFtX3ZlY3Rvckxlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4KGRlc2lyZWRM
ZW5ndGgsIGxhc3RBcnJheVNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYXRoZW1hdGlj
YWxseSBlcXVpdmFsZW50IHRvOgotICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChuZXdM
ZW5ndGggKiAzICsgMSkgLyAyOwotICAgICAgICAvLyBvcjoKLSAgICAgICAgLy8gICBpbmNyZWFz
ZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKLSAgICAgICAgLy8g
VGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KLSAgICAgICAgaW5j
cmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsgKGRl
c2lyZWRMZW5ndGggJiAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3RoID49
IGRlc2lyZWRMZW5ndGgpOwotCi0gICAgbGFzdEFycmF5U2l6ZSA9IG1pbihpbmNyZWFzZWRMZW5n
dGgsIEZJUlNUX1ZFQ1RPUl9HUk9XKTsKLQotICAgIHJldHVybiBtaW4oaW5jcmVhc2VkTGVuZ3Ro
LCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKLX0KLQotYm9vbCBKU0FycmF5OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0
aCkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJu
YWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJlY2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFs
dWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAotICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMg
aGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBiZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZm
aWNpZW50bHkuCi0gICAgaWYgKG5ld0xlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLQotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fdmVjdG9yTGVuZ3RoOwot
ICAgIEFTU0VSVChuZXdMZW5ndGggPiB2ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5ld1Zl
Y3Rvckxlbmd0aCA9IGdldE5ld1ZlY3Rvckxlbmd0aChuZXdMZW5ndGgpOwotCi0gICAgLy8gRmFz
dCBjYXNlIC0gdGhlcmUgaXMgbm8gcHJlY2FwYWNpdHkuIEluIHRoZXNlIGNhc2VzIGEgcmVhbGxv
YyBtYWtlcyBzZW5zZS4KLSAgICBpZiAoTElLRUxZKCFtX2luZGV4QmlhcykpIHsKLSAgICAgICAg
dm9pZCogbmV3U3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NCYXNlOwotICAgICAgICBpZiAoIWds
b2JhbERhdGEuaGVhcC50cnlSZWFsbG9jYXRlU3RvcmFnZSgmbmV3U3RvcmFnZSwgc3RvcmFnZVNp
emUodmVjdG9yTGVuZ3RoKSwgc3RvcmFnZVNpemUobmV3VmVjdG9yTGVuZ3RoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdTdG9y
YWdlKSk7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdTdG9yYWdlOwotICAg
ICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0KLSAgICAgICAgbV92ZWN0b3JM
ZW5ndGggPSBuZXdWZWN0b3JMZW5ndGg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhlIHByZWNhcGFj
aXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJheSBsZW5ndGgu
Ci0gICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gbWluKG1faW5kZXhCaWFzID4+IDEsIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOwotICAgIC8vIENhbGN1bGF0
ZSBuZXcgc3RvYXJnZSBjYXBjaXR5LCBhbGxvd2luZyByb29tIGZvciB0aGUgcHJlLWNhcGFjaXR5
LgotICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IG5ld1ZlY3Rvckxlbmd0aCArIG5l
d0luZGV4QmlhczsKLSAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwotICAgIGlmICghZ2xvYmFs
RGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzdG9yYWdlU2l6ZShuZXdTdG9yYWdlQ2FwYWNp
dHkpLCAmbmV3QWxsb2NCYXNlKSkgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBU
aGUgc3VtIG9mIG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2Vl
ZCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gbV92ZWN0b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLQotICAgIG1fdmVjdG9yTGVuZ3Ro
ID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgIG1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAg
IG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSArIG1faW5kZXhC
aWFzKTsKLQotICAgIC8vIENvcHkgdGhlIEFycmF5U3RvcmFnZSBoZWFkZXIgJiBjdXJyZW50IGNv
bnRlbnRzIG9mIHRoZSB2ZWN0b3IuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0
b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCkpOwotCi0gICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9jYXRp
b24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3
QWxsb2NCYXNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVjdG9yLCBidXQgbGVhdmVz
IHRoZSBuZXcgc3BhY2UgdW5jbGVhcmVkLgogYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNvdW50KQogewotICAgIC8v
IElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUgaGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCi0g
ICAgQVNTRVJUKGNvdW50ID4gbV9pbmRleEJpYXMpOworICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGVuc3VyZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpOworICAgIHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNp
dHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBwcm9w
ZXJ0eVNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCi0gICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIGhhdmUg
aGFuZGxlZCB0aGlzIG9uIHRoZSBmYXN0IHBhdGguCisgICAgQVNTRVJUKGNvdW50ID4gc3RvcmFn
ZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtleSBt
ZXRyaWNzOgpAQCAtMTA5NSw4ICsyNjgsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNs
b3dDYXNlKEpTR2xvCiAgICAgLy8gICogY3VycmVudENhcGFjaXR5IC0gd2hhdCBpcyB0aGUgY3Vy
cmVudCBzaXplIG9mIHRoZSB2ZWN0b3IsIGluY2x1ZGluZyBhbnkgcHJlLWNhcGFjaXR5LgogICAg
IC8vICAqIGRlc2lyZWRDYXBhY2l0eSAtIGhvdyBsYXJnZSBzaG91bGQgd2UgbGlrZSB0byBncm93
IHRoZSB2ZWN0b3IgdG8gLSBiYXNlZCBvbiAyeCByZXF1aXJlZFZlY3Rvckxlbmd0aC4KIAotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4obV92ZWN0b3JMZW5ndGgsIGxlbmd0aCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0
aCA9IG1pbihzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSwgbGVuZ3RoKTsKICAgICBBU1NFUlQodXNl
ZFZlY3Rvckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBDaGVj
ayB0aGF0IHJlcXVpcmVkIHZlY3RvciBsZW5ndGggaXMgcG9zc2libGUsIGluIGFuIG92ZXJmbG93
LXNhZmUgZmFzaGlvbi4KICAgICBpZiAoY291bnQgPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
IC0gdXNlZFZlY3Rvckxlbmd0aCkKQEAgLTExMDQsOCArMjc3LDggQEAgYm9vbCBKU0FycmF5Ojp1
bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIHJlcXVpcmVkVmVjdG9yTGVu
Z3RoID0gdXNlZFZlY3Rvckxlbmd0aCArIGNvdW50OwogICAgIEFTU0VSVChyZXF1aXJlZFZlY3Rv
ckxlbmd0aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKICAgICAvLyBUaGUgc3VtIG9m
IG1fdmVjdG9yTGVuZ3RoIGFuZCBtX2luZGV4QmlhcyB3aWxsIG5ldmVyIGV4Y2VlZCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RILgotICAgIEFTU0VSVChtX3ZlY3Rvckxlbmd0aCA8PSBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbV92ZWN0
b3JMZW5ndGgpID49IG1faW5kZXhCaWFzKTsKLSAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkg
PSBtX3ZlY3Rvckxlbmd0aCArIG1faW5kZXhCaWFzOworICAgIEFTU0VSVChzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKSA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIICYmIChNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIIC0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpID49IHN0b3JhZ2UtPm1faW5k
ZXhCaWFzKTsKKyAgICB1bnNpZ25lZCBjdXJyZW50Q2FwYWNpdHkgPSBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSArIHN0b3JhZ2UtPm1faW5kZXhCaWFzOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbiBv
ZiBkZXNpcmVkQ2FwYWNpdHkgd29uJ3Qgb3ZlcmZsb3csIGR1ZSB0byB0aGUgcmFuZ2Ugb2YgTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBt
aW4oTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWly
ZWRWZWN0b3JMZW5ndGgpIDw8IDEpOwogCkBAIC0xMTE2LDEwICsyODksMTEgQEAgYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VD
YXBhY2l0eTsKICAgICAvLyBJZiB0aGUgY3VycmVudCBzdG9yYWdlIGFycmF5IGlzIHN1ZmZpY2ll
bnRseSBsYXJnZSAoYnV0IG5vdCB0b28gbGFyZ2UhKSB0aGVuIGp1c3Qga2VlcCB1c2luZyBpdC4K
ICAgICBpZiAoY3VycmVudENhcGFjaXR5ID4gZGVzaXJlZENhcGFjaXR5ICYmIGlzRGVuc2VFbm91
Z2hGb3JWZWN0b3IoY3VycmVudENhcGFjaXR5LCByZXF1aXJlZFZlY3Rvckxlbmd0aCkpIHsKLSAg
ICAgICAgbmV3QWxsb2NCYXNlID0gc3RvcmFnZS0+bV9hbGxvY0Jhc2U7CisgICAgICAgIG5ld0Fs
bG9jQmFzZSA9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG5ld1N0b3Jh
Z2VDYXBhY2l0eSA9IGN1cnJlbnRDYXBhY2l0eTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAo
IWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFnZVNpemUoZGVzaXJlZENh
cGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpz
aXplRm9yKGRlc2lyZWRDYXBhY2l0eSkpOworICAgICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UobmV3U2l6ZSwgJm5ld0FsbG9jQmFzZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0eSA9IGRlc2lyZWRDYXBhY2l0
eTsKICAgICB9CkBAIC0xMTMyLDQ1ICszMDYsNDAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291
bnRTbG93Q2FzZShKU0dsbwogICAgIC8vIElmIGl0IGRpZCwgd2UgY2FsY3VsYXRlIHRoZSBhbW91
bnQgdGhhdCB3aWxsIHJlbWFpbiBiYXNlZCBvbiBhbiBhdG9taWMgZGVjYXkgLSBsZWF2ZSB0aGUK
ICAgICAvLyB2ZWN0b3Igd2l0aCBoYWxmIHRoZSBwb3N0LWNhcGFjaXR5IGl0IGhhZCBwcmV2aW91
c2x5LgogICAgIHVuc2lnbmVkIHBvc3RDYXBhY2l0eSA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IG1f
dmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CiAgICAgICAgIC8vIEF0b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3Qg
YmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBwb3N0Q2FwYWNpdHkg
PSBtaW4oKG1fdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdlQ2FwYWNpdHkg
LSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIC8vIElmIHdlJ3JlIG1vdmluZyBjb250
ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNpdHkgaXMgYmVp
bmcgcmVkdWNlZC4KLSAgICAgICAgQVNTRVJUKG5ld0FsbG9jQmFzZSAhPSBzdG9yYWdlLT5tX2Fs
bG9jQmFzZSB8fCBwb3N0Q2FwYWNpdHkgPCBtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCk7Ci0gICAg
fQotCi0gICAgbV92ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBh
Y2l0eTsKLSAgICBtX2luZGV4QmlhcyA9IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG1fdmVjdG9yTGVu
Z3RoOwotICAgIG1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEFycmF5U3RvcmFnZSo+
KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obmV3QWxsb2NCYXNlKSAr
IG1faW5kZXhCaWFzKTsKLQotICAgIC8vIFN0ZXAgNDoKLSAgICAvLyBDb3B5IGFycmF5IGRhdGEg
LyBoZWFkZXIgaW50byB0aGVpciBuZXcgbG9jYXRpb25zLCBjbGVhciBwb3N0LWNhcGFjaXR5ICYg
ZnJlZSBhbnkgb2xkIGFsbG9jYXRpb24uCi0KLSAgICAvLyBJZiB0aGlzIGlzIGJlaW5nIG1vdmVk
IHdpdGhpbiB0aGUgZXhpc3RpbmcgYnVmZmVyIG9mIG1lbW9yeSwgd2UgYXJlIGFsd2F5cyBzaGlm
dGluZyBkYXRhCi0gICAgLy8gdG8gdGhlIHJpZ2h0IChzaW5jZSBjb3VudCA+IG1faW5kZXhCaWFz
KS4gQXMgc3VjaCB0aGlzIG1lbW1vdmUgY2Fubm90IHRyYW1wbGUgdGhlIGhlYWRlci4KLSAgICBt
ZW1tb3ZlKG1fc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwgc3RvcmFnZS0+bV92ZWN0b3IsIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogdXNlZFZlY3Rvckxlbmd0aCk7Ci0gICAgbWVt
bW92ZShtX3N0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLQotICAgIC8vIEFyZSB3
ZSBjb3B5aW5nIGludG8gYSBuZXcgYWxsb2NhdGlvbj8KLSAgICBpZiAobmV3QWxsb2NCYXNlICE9
IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UpIHsKLSAgICAgICAgLy8gRnJlZSB0aGUgb2xkIGFsbG9j
YXRpb24sIHVwZGF0ZSBtX2FsbG9jQmFzZS4KLSAgICAgICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IG5ld0FsbG9jQmFzZTsKKyAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSAtIGxlbmd0aCkgPj4gMSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWly
ZWRWZWN0b3JMZW5ndGgpOworICAgICAgICAvLyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0
aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRoZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVj
ZWQuCisgICAgICAgIEFTU0VSVChuZXdBbGxvY0Jhc2UgIT0gYnV0dGVyZmx5LT5iYXNlKHN0cnVj
dHVyZSgpKSB8fCBwb3N0Q2FwYWNpdHkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSAtIGxlbmd0
aCk7CiAgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHJlcXVpcmVk
VmVjdG9yTGVuZ3RoICsgcG9zdENhcGFjaXR5OworICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9
IG5ld1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKKworICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIG5ld0luZGV4
QmlhcywgcHJvcGVydHlDYXBhY2l0eSk7CisgICAgCisgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6
ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisgICAgbWVtbW92ZShuZXdCdXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBidXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLCBzaXplb2YoSlNWYWx1ZSkgKiBwcm9wZXJ0eVNpemUg
KyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpICsgQXJyYXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAg
ICAKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3
VmVjdG9yTGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4
QmlhcyA9IG5ld0luZGV4QmlhczsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZs
eTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsK
LSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7
CiAKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlzIHJlYWQg
b25seSB0aGVuIHdlIGVudGVyIHNwYXJzZSBtb2RlLCBzbyBzaG91bGQgZW50ZXIgdGhlIGZvbGxv
d2luZyAnaWYnLgotICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxlKCkgfHwgbV9zcGFyc2VWYWx1
ZU1hcCk7CisgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSB8fCBzdG9yYWdlLT5tX3NwYXJz
ZU1hcCk7CiAKLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcCkgeworICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5nZXQoKSkgewogICAgICAgICAvLyBGYWlsIGlmIHRoZSBsZW5ndGggaXMgbm90IHdy
aXRhYmxlLgogICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwpAQCAtMTE5Nyw3ICszNjYsNyBAQCBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGluZGV4KTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGl0ICE9IG1hcC0+bm90Rm91bmQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4ICsgMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIlVuYWJsZSB0byBk
ZWxldGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgbWFwLT5yZW1vdmUoaXQpOwpAQCAtMTIwNiwxNCArMzc1LDE0IEBAIGJvb2wgSlNBcnJh
eTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICAgICAgbWFw
LT5yZW1vdmUoa2V5c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKG1hcC0+aXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKG5ld0xlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAvLyBE
ZWxldGUgcHJvcGVydGllcyBmcm9tIHRoZSB2ZWN0b3IuCi0gICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNs
b3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2
YWx1ZVNsb3Q7CkBAIC0xMjIyLDUzICszOTEsNjUgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RvcmFnZS0+bV9sZW5n
dGggPSBuZXdMZW5ndGg7CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKG5ld0xlbmd0aCk7CiAKLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gbV9zdG9yYWdlOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIAotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmICghbGVuZ3RoKSB7
Ci0gICAgICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpKQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcikpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheToKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgCisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0
aCkgeworICAgICAgICAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCisgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7Ci0gICAgaWYgKGluZGV4IDwgbV92ZWN0b3JM
ZW5ndGgpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltpbmRleF07Ci0gICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKLSAgICAgICAg
ICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKLSAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigp
OworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGlmIChpbmRl
eCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdmFsdWVTbG90
LmdldCgpOworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJsZSgpKTsKLSAgICAgICAgICAgIHN0
b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXg7Ci0gICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNM
ZW5ndGhXcml0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5k
ZXgpOworICAgICAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
fQogCi0gICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KLSAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgLy8gQ2FsbCB0aGUgW1tEZWxl
dGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgot
ICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUg
cHJvcGVydHkuIikpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgLy8g
TGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KKyAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gZ2V0KGV4ZWMsIGluZGV4KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIC8vIENhbGwgdGhlIFtb
RGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgaW5keCBhbmQgdHJ1
ZS4KKyAgICAgICAgaWYgKCFkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgp
KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIC8vIENhbGwgdGhlIFtbUHV0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBh
cmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0cnVlLgorICAgICAgICBzZXRMZW5ndGgoZXhl
YywgaW5kZXgsIHRydWUpOworICAgICAgICAvLyBSZXR1cm4gZWxlbWVudC4KKyAgICAgICAgY2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQotICAgIC8vIENhbGwgdGhlIFtbUHV0XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudHMgImxlbmd0aCIsIGluZHgsIGFuZCB0
cnVlLgotICAgIHNldExlbmd0aChleGVjLCBpbmRleCwgdHJ1ZSk7Ci0gICAgLy8gUmV0dXJuIGVs
ZW1lbnQuCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBlbGVtZW50OwogfQog
CiAvLyBQdXNoICYgcHV0SW5kZXggYXJlIGFsbW9zdCBpZGVudGljYWwsIHdpdGggdHdvIHNtYWxs
IGRpZmZlcmVuY2VzLgpAQCAtMTI3Niw2MyArNDU3LDc3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9w
KEV4ZWNTdGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJe
MzItMSBzdG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lk
IEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7
Ci0KLSAgICAvLyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUg
bV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgewotICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIHZhbHVlKTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGggKyAxOwotICAg
ICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgp
OworICAgIAorICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheTogeworICAgICAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFy
cmF5U3RvcmFnZShleGVjLCAwLCB2YWx1ZSwgdHJ1ZSwgY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFn
ZShleGVjLT5nbG9iYWxEYXRhKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKLSAgICAvLyBQdXNoaW5n
IHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRo
cm93cyBhIHJhbmdlIGVycm9yLgotICAgIGlmIChVTkxJS0VMWShzdG9yYWdlLT5tX2xlbmd0aCA9
PSAweEZGRkZGRkZGdSkpIHsKLSAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlz
LCBleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAvLyBQZXIg
RVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41LjEgc3RlcCAzLmQuCi0gICAgICAgIGlmICgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0
aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3Iu
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICBp
ZiAobGVuZ3RoIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW2xlbmd0aF0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUp
OworICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICAg
ICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgY2hlY2tJbmRl
eGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBQdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBw
cm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoVU5MSUtFTFko
c3RvcmFnZS0+bGVuZ3RoKCkgPT0gMHhGRkZGRkZGRnUpKSB7CisgICAgICAgICAgICBtZXRob2RU
YWJsZSgpLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwg
dHJ1ZSk7CisgICAgICAgICAgICAvLyBQZXIgRVM1LjEgMTUuNC40Ljcgc3RlcCA2ICYgMTUuNC41
LjEgc3RlcCAzLmQuCisgICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52
YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
ICAgIC8vIEhhbmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCi0gICAgcHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChleGVjLCBzdG9yYWdlLT5tX2xlbmd0aCwgdmFsdWUsIHRydWUpOwotICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJ
bmRleC4KKyAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlLCBzdG9yYWdlKTsKKyAgICAg
ICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291
bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBj
b3VudCkKIHsKICAgICBBU1NFUlQoY291bnQgPiAwKTsKICAgICAKLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgCi0gICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CiAgICAgCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVz
IG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdl
bmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChvbGRMZW5ndGggIT0g
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJzZU1vZGUoKSkKKyAgICBpZiAo
b2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VJbmRl
eGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFvbGRMZW5ndGgp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IgLT0gY291bnQ7Ci0gICAgc3RvcmFnZS0+bV9sZW5ndGggLT0gY291bnQ7CisgICAgc3Rv
cmFnZS0+c2V0TGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAKLSAgICBpZiAobV92ZWN0
b3JMZW5ndGgpIHsKLSAgICAgICAgY291bnQgPSBtaW4obV92ZWN0b3JMZW5ndGgsICh1bnNpZ25l
ZCljb3VudCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICBjb3VudCA9IG1pbih2ZWN0
b3JMZW5ndGgsICh1bnNpZ25lZCljb3VudCk7CiAgICAgICAgIAotICAgICAgICBtX3ZlY3Rvckxl
bmd0aCAtPSBjb3VudDsKKyAgICAgICAgdmVjdG9yTGVuZ3RoIC09IGNvdW50OworICAgICAgICBz
dG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2Ug
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdG9yYWdlKSArIGNvdW50ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPik7Ci0gICAgICAgICAgICBtZW1tb3ZlKG5ld0Jhc2VTdG9yYWdlLCBz
dG9yYWdlLCBzdG9yYWdlU2l6ZSgwKSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UgPSByZWludGVy
cHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0KLSAgICAgICAg
ICAgIG1faW5kZXhCaWFzICs9IGNvdW50OworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoKSB7Cisg
ICAgICAgICAgICBtX2J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUoKSwg
Y291bnQpOworICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwogICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTM0MSw1OSArNTM2LDMwIEBAIGJvb2wgSlNB
cnJheTo6c2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnMKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dW5zaGlmdCBjYW4gYmUgaGFuZGxlZCwgZmFsc2UgdG8gZmFsbGJhY2suICAgIAogYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RvcmFnZS0+bV9sZW5ndGg7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RvcmFnZS0+bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgaG9sZXMg
b3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRlLAogICAgIC8vIHVzZSB0aGUgZ2Vu
ZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0gICAgaWYgKGxlbmd0aCAhPSBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3BhcnNlTW9kZSgpKQorICAgIGlmIChsZW5n
dGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1v
ZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faW5kZXhCaWFzID49IGNv
dW50KSB7Ci0gICAgICAgIG1faW5kZXhCaWFzIC09IGNvdW50OwotICAgICAgICBjaGFyKiBuZXdC
YXNlU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0b3JhZ2UpIC0gY291bnQgKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsKLSAgICAgICAgbWVtbW92ZShuZXdCYXNlU3Rv
cmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICBtX3N0b3JhZ2UgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihuZXdCYXNlU3RvcmFnZSk7Ci0gICAgICAg
IG1fdmVjdG9yTGVuZ3RoICs9IGNvdW50OworICAgIGlmIChzdG9yYWdlLT5tX2luZGV4QmlhcyA+
PSBjb3VudCkgeworICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51
bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CisgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50
OworICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkgKyBjb3VudCk7CiAgICAgfSBlbHNlIGlmICghdW5zaGlmdENvdW50U2xvd0Nhc2UoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBjb3VudCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvciA9IG1fc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgJnNfaW5mbyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdG
bGFnKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTTm9uRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9zdG9y
YWdlKSB7Ci0gICAgICAgIE1BUktfTE9HX01FU1NBR0UxKCJbJXVdOiAiLCB0aGlzT2JqZWN0LT5s
ZW5ndGgoKSk7Ci0KLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9zdG9yYWdlOwotICAgICAgICB2b2lkKiBiYXNlU3RvcmFnZSA9IHN0b3JhZ2UtPm1fYWxsb2NC
YXNlOwotCi0gICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZChyZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJmJhc2VTdG9yYWdlKSwgc3RvcmFnZVNpemUodGhpc09iamVjdC0+bV92ZWN0b3JMZW5n
dGggKyB0aGlzT2JqZWN0LT5tX2luZGV4QmlhcyksIHN0b3JhZ2UtPm1fdmVjdG9yLT5zbG90KCks
IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLQotICAgICAgICBpZiAoYmFzZVN0b3JhZ2Ug
IT0gdGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSkgewotICAgICAgICAgICAgdGhp
c09iamVjdC0+bV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4o
c3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VTdG9yYWdlKSArIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNP
YmplY3QtPm1faW5kZXhCaWFzKTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+
bV9hbGxvY0Jhc2UgPSBiYXNlU3RvcmFnZTsKLSAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKQot
ICAgICAgICBtYXAtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Ci19Ci0KIHN0YXRpYyBpbnQgY29t
cGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQogewogICAg
IGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsK
QEAgLTE0MTAsMTEyICs1NzYsMTM3IEBAIHN0YXRpYyBpbnQgY29tcGFyZUJ5U3RyaW5nUGFpckZv
clFTb3J0KGMKIAogdm9pZCBKU0FycmF5Ojpzb3J0TnVtZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
IGNhbGxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGlu
Z01vZGUoKSk7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBj
b21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkpOwotICAgIGlmIChtX3NwYXJzZVZh
bHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQor
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBcnJh
eToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBib29sIGFsbFZhbHVlc0FyZU51bWJl
cnMgPSB0cnVlOwotICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAo
IXN0b3JhZ2UtPm1fdmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGFsbFZhbHVl
c0FyZU51bWJlcnMgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZCA9IGNvbXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGJvb2wgYWxsVmFs
dWVzQXJlTnVtYmVycyA9IHRydWU7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92ZWN0b3JbaV0uaXNOdW1iZXIoKSkg
eworICAgICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJlcnMgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFhbGxWYWx1ZXNBcmVOdW1iZXJzKQorICAgICAgICAgICAgcmV0dXJuIHNvcnQoZXhl
YywgY29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOworICAgICAgICAKKyAgICAg
ICAgLy8gRm9yIG51bWVyaWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFz
dGVyIHRoYW4gbWVyZ2Vzb3J0LiBXZQorICAgICAgICAvLyBhbHNvIGRvbid0IHJlcXVpcmUgbWVy
Z2Vzb3J0J3Mgc3RhYmlsaXR5LCBzaW5jZSB0aGVyZSdzIG5vIHVzZXIgdmlzaWJsZQorICAgICAg
ICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBlcXVhbCBwcmltaXRp
dmUgdmFsdWVzLgorICAgICAgICBxc29ydChzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPiksIGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOworICAgICAg
ICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNr
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgaWYgKCFhbGxWYWx1ZXNBcmVO
dW1iZXJzKQotICAgICAgICByZXR1cm4gc29ydChleGVjLCBjb21wYXJlRnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSk7Ci0KLSAgICAvLyBGb3IgbnVtZXJpYyBjb21wYXJpc29uLCB3aGljaCBp
cyBmYXN0LCBxc29ydCBpcyBmYXN0ZXIgdGhhbiBtZXJnZXNvcnQuIFdlCi0gICAgLy8gYWxzbyBk
b24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBubyB1c2Vy
IHZpc2libGUKLSAgICAvLyBzaWRlLWVmZmVjdCBmcm9tIHN3YXBwaW5nIHRoZSBvcmRlciBvZiBl
cXVhbCBwcmltaXRpdmUgdmFsdWVzLgotICAgIHFzb3J0KHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXpl
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgY29tcGFyZU51bWJlcnNGb3JRU29ydCk7
Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKIH0KIAogdm9p
ZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNl
TW9kZSgpKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCA9IGNv
bXBhY3RGb3JTb3J0aW5nKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgaWYgKG1fc3BhcnNlVmFs
dWVNYXApIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnRpbmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8g
c3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBkbyBpdCBvbmNlIHVwIGZyb250IGFuZCBz
b3J0IGJhc2VkIG9uIHRoYXQuCi0gICAgLy8gVGhpcyBpcyBhIGNvbnNpZGVyYWJsZSBpbXByb3Zl
bWVudCBvdmVyIGRvaW5nIGl0IHR3aWNlIHBlciBjb21wYXJpc29uLCB0aG91Z2ggaXQgcmVxdWly
ZXMgYSBsYXJnZSB0ZW1wb3JhcnkKLSAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVj
dHMgdXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcg
bWV0aG9kcyB0aGF0IHJldHVybgotICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcg
cmVzdWx0cywgZWZmZWN0aXZlbHkgbWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50
LgotCi0gICAgVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGlu
Z1VuZGVmaW5lZCk7Ci0gICAgaWYgKCF2YWx1ZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJU
KCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKICAgICAKLSAgICBIZWFwOjpoZWFwKHRoaXMpLT5w
dXNoVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7Ci0KLSAgICBib29sIGlzU29ydGluZ1ByaW1pdGl2
ZVZhbHVlcyA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNs
dWRpbmdVbmRlZmluZWQ7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKCF2YWx1ZS5pc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7Ci0gICAgICAgIGlzU29ydGluZ1By
aW1pdGl2ZVZhbHVlcyA9IGlzU29ydGluZ1ByaW1pdGl2ZVZhbHVlcyAmJiB2YWx1ZS5pc1ByaW1p
dGl2ZSgpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGlu
dWVzIHRvIGNhbGwgdG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgotICAg
IC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4gZXhjZXB0aW9uLgotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKLSAgICAgICAg
dmFsdWVzW2ldLnNlY29uZCA9IHZhbHVlc1tpXS5maXJzdC50b1dURlN0cmluZ0lubGluZShleGVj
KTsKLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBieSBzdHJpbmcgdmFsdWUsIGEg
ZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXggc29ydC4gVGhhdCB3b3VsZCBi
ZSBPKE4pIHJhdGhlcgotICAgIC8vIHRoYW4gTyhOIGxvZyBOKS4KLQorICAgICAgICAKKyAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkp
OworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRp
bmcgSmF2YVNjcmlwdCB2YWx1ZXMgdG8gc3RyaW5ncyBjYW4gYmUgZXhwZW5zaXZlLCBzbyB3ZSBk
byBpdCBvbmNlIHVwIGZyb250IGFuZCBzb3J0IGJhc2VkIG9uIHRoYXQuCisgICAgICAgIC8vIFRo
aXMgaXMgYSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIg
Y29tcGFyaXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5CisgICAgICAg
IC8vIGJ1ZmZlci4gQmVzaWRlcywgdGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNyYXNoaW5nIGlmIHNv
bWUgb2JqZWN0cyBoYXZlIGN1c3RvbSB0b1N0cmluZyBtZXRob2RzIHRoYXQgcmV0dXJuCisgICAg
ICAgIC8vIHJhbmRvbSBvciBvdGhlcndpc2UgY2hhbmdpbmcgcmVzdWx0cywgZWZmZWN0aXZlbHkg
bWFraW5nIGNvbXBhcmUgZnVuY3Rpb24gaW5jb25zaXN0ZW50LgorICAgICAgICAKKyAgICAgICAg
VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4gdmFsdWVzKGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZCk7CisgICAgICAgIGlmICghdmFsdWVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1
ZXMpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0
cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1Vu
ZGVmaW5lZDsgaSsrKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXZhbHVlLmlzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgdmFsdWVzW2ldLmZpcnN0ID0gdmFsdWU7CisgICAgICAgICAgICBpc1Nv
cnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgJiYgdmFsdWUu
aXNQcmltaXRpdmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgbG9vcCBjb250aW51ZXMgdG8gY2FsbCB0b1N0cmluZyBvbiBzdWJzZXF1ZW50
IHZhbHVlcyBldmVuIGFmdGVyCisgICAgICAgIC8vIGEgdG9TdHJpbmcgY2FsbCByYWlzZXMgYW4g
ZXhjZXB0aW9uLgorICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykKKyAgICAgICAgICAgIHZhbHVlc1tpXS5zZWNv
bmQgPSB2YWx1ZXNbaV0uZmlyc3QudG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7CisgICAgICAgIAor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIEhlYXA6Omhl
YXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2Ugc29ydCBi
eSBzdHJpbmcgdmFsdWUsIGEgZmFzdCBhbGdvcml0aG0gbWlnaHQgYmUgdG8gdXNlIGEgcmFkaXgg
c29ydC4gVGhhdCB3b3VsZCBiZSBPKE4pIHJhdGhlcgorICAgICAgICAvLyB0aGFuIE8oTiBsb2cg
TikuCisgICAgICAgIAogI2lmIEhBVkUoTUVSR0VTT1JUKQotICAgIGlmIChpc1NvcnRpbmdQcmlt
aXRpdmVWYWx1ZXMpCi0gICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgp
LCBzaXplb2YoVmFsdWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsK
LSAgICBlbHNlCi0gICAgICAgIG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUo
KSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7
CisgICAgICAgIGlmIChpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMpCisgICAgICAgICAgICBxc29y
dCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciks
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1lcmdlc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CiAjZWxzZQotICAgIC8vIEZJ
WE1FOiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3Rh
YmxlIHNvcnQuCi0gICAgLy8gRUNNQVNjcmlwdC0yNjIgZG9lcyBub3Qgc3BlY2lmeSBhIHN0YWJs
ZSBzb3J0LCBidXQgaW4gcHJhY3RpY2UsIGJyb3dzZXJzIHBlcmZvcm0gYSBzdGFibGUgc29ydC4K
LSAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3Ry
aW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydCk7CisgICAgICAgIC8vIEZJWE1F
OiBUaGUgcXNvcnQgbGlicmFyeSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gbm90IGJlIGEgc3RhYmxl
IHNvcnQuCisgICAgICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFi
bGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBwZXJmb3JtIGEgc3RhYmxlIHNvcnQu
CisgICAgICAgIHFzb3J0KHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuc2l6ZSgpLCBzaXplb2YoVmFs
dWVTdHJpbmdQYWlyKSwgY29tcGFyZUJ5U3RyaW5nUGFpckZvclFTb3J0KTsKICNlbmRpZgotCi0g
ICAgLy8gSWYgdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUg
YXJyYXkgb3IgdmVjdG9yIHN0b3JhZ2UsCi0gICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCB0byBo
YW5kbGUgdGhlIG9yaWduYWwgbnVtYmVyIG9mIGFjdHVhbCB2YWx1ZXMuCi0gICAgaWYgKG1fdmVj
dG9yTGVuZ3RoIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBpbmNyZWFz
ZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQpCi0gICAgICAgIG1fc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGhOb3RJbmNsdWRp
bmdVbmRlZmluZWQ7Ci0KLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhOb3RJbmNsdWRpbmdV
bmRlZmluZWQ7IGkrKykKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0KTsKLQotICAgIEhlYXA6OmhlYXAodGhpcyktPnBv
cFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koU29y
dENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHRvU3RyaW5n
IGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgb3IgdmVjdG9yIHN0b3Jh
Z2UsCisgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFs
IG51bWJlciBvZiBhY3R1YWwgdmFsdWVzLgorICAgICAgICBpZiAoc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkgPCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpIHsKKyAgICAgICAgICAgIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpIDwgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0
aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWVzW2ldLmZpcnN0
KTsKKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnBvcFRlbXBTb3J0VmVjdG9y
KCZ2YWx1ZXMpOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNv
cnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCiBz
dHJ1Y3QgQVZMVHJlZU5vZGVGb3JBcnJheUNvbXBhcmUgewpAQCAtMTU5NywyNTMgKzc4OCwyNTcg
QEAgc3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlIAogCiB2b2lkIEpTQXJy
YXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWlu
U3BhcnNlTW9kZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rpb24g
b3IgaW4gdG9OdW1iZXIuCi0KLSAgICAvLyBUaGUgbWF4aW11bSB0cmVlIGRlcHRoIGlzIGNvbXBp
bGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBubyBnb29kCi0gICAgLy8g
aWYgYSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgotICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1fbGVu
Z3RoIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSk7Ci0gICAgaWYgKG1fc3RvcmFnZS0+bV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4obV9zdG9yYWdlLT5tX2xlbmd0aCwg
bV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IHVzZWRWZWN0b3JMZW5n
dGggKyAobV9zcGFyc2VWYWx1ZU1hcCA/IG1fc3BhcnNlVmFsdWVNYXAtPnNpemUoKSA6IDApOwot
Ci0gICAgaWYgKCFub2RlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFWTFRyZWU8QVZM
VHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0PiB0cmVlOyAvLyBEZXB0aCA0NCBpcyBl
bm91Z2ggZm9yIDJeMzEgaXRlbXMKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVj
OwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9uID0gY29tcGFyZUZ1bmN0
aW9uOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNhbGxUeXBlID0gY2FsbFR5cGU7
Ci0gICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7Ci0g
ICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5ncm93KG5vZGVDb3VudCk7Ci0KLSAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykKLSAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNo
ZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24q
Pihjb21wYXJlRnVuY3Rpb24pLCAyKSk7Ci0KLSAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1f
bm9kZXMuYmVnaW4oKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Cisg
ICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gbW9k
aWZpZXMgdGhlIGFycmF5LCB0aGUgdmVjdG9yLCBtYXAsIGV0Yy4gY291bGQgYmUgbW9kaWZpZWQK
LSAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUg
dHJlZSBoZXJlLgotCi0gICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Ci0gICAgdW5zaWduZWQg
bnVtVW5kZWZpbmVkID0gMDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXksIGlnbm9y
aW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGluc2VydGlu
ZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgotICAgIGZvciAoOyBudW1EZWZpbmVkIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1f
c3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2
LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgdHJlZS5hYnN0cmFj
dG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgIHRyZWUuaW5zZXJ0
KG51bURlZmluZWQpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICBpZiAo
di5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tu
dW1EZWZpbmVkXS52YWx1ZSA9IHY7Ci0gICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVm
aW5lZCk7Ci0gICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25z
aXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBleGNl
cHRpb25zIHJhaXNlZCBpbiB0aGUgY29tcGFyZSBmdW5jdGlvbiBvciBpbiB0b051bWJlci4KKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIHRyZWUgZGVwdGggaXMgY29tcGlsZWQgaW4g
LSBidXQgdGhlIGNhbGxlciBpcyBjbGVhcmx5IHVwIHRvIG5vIGdvb2QKKyAgICAgICAgLy8gaWYg
YSBsYXJnZXIgYXJyYXkgaXMgcGFzc2VkLgorICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bGVuZ3Ro
KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9y
YWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25l
ZCBub2RlQ291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwID8g
c3RvcmFnZS0+bV9zcGFyc2VNYXAtPnNpemUoKSA6IDApOworICAgICAgICAKKyAgICAgICAgaWYg
KCFub2RlQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBBVkxU
cmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4gdHJlZTsgLy8gRGVwdGgg
NDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1f
ZXhlYyA9IGV4ZWM7CisgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUZ1bmN0aW9u
ID0gY29tcGFyZUZ1bmN0aW9uOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVD
YWxsVHlwZSA9IGNhbGxUeXBlOworICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVD
YWxsRGF0YSA9ICZjYWxsRGF0YTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5n
cm93KG5vZGVDb3VudCk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVKUykKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0
UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0
aW9uKSwgMikpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0cmVlLmFic3RyYWN0b3IoKS5tX25v
ZGVzLmJlZ2luKCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3Rv
ciwgbWFwLCBldGMuIGNvdWxkIGJlIG1vZGlmaWVkCisgICAgICAgIC8vIHJpZ2h0IG91dCBmcm9t
IHVuZGVyIHVzIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSB0cmVlIGhlcmUuCisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5zaWduZWQgbnVtVW5k
ZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXJyYXks
IGlnbm9yaW5nIG1pc3NpbmcgdmFsdWVzLCBjb3VudGluZyB1bmRlZmluZWQgb25lcywgYW5kIGlu
c2VydGluZyBhbGwgb3RoZXIgb25lcyBpbnRvIHRoZSB0cmVlLgorICAgICAgICBmb3IgKDsgbnVt
RGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgeworICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9
IHY7CisgICAgICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVkOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQo
KTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7CisgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNb
bnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgICAgICAgICB0cmVlLmluc2VydChu
dW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgKytudW1EZWZpbmVkOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVk
IG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwotCi0gICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKLSAgICAg
ICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKLSAgICAgICAgaWYgKG5ld1Vz
ZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgLy8gQ2hlY2sg
dGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8g
aG9sZCBhbGwgdGhlIGVudHJpZXMuCi0gICAgICAgICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5n
dGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkgewotICAgICAgICAgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAg
bmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKKyAgICAgICAgICAgIGlmIChuZXdV
c2VkVmVjdG9yTGVuZ3RoID4gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFuIGFycmF5IGxh
cmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgZW50cmllcy4KKyAgICAgICAgICAgICAgICBpZiAo
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKSB8fCAhaW5j
cmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdVc2VkVmVjdG9yTGVuZ3Ro
KSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5l
ZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgICAg
ICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKKyAgICAgICAgICAgICAgICArK251bURlZmluZWQ7
CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFy
c2VJbmRleE1hcCgpOwogICAgICAgICB9Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRd
LnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCk7Ci0gICAgICAgICAgICB0cmVl
Lmluc2VydChudW1EZWZpbmVkKTsKLSAgICAgICAgICAgICsrbnVtRGVmaW5lZDsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNpemUoKSA+PSBudW1E
ZWZpbmVkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0
IGJlCisgICAgICAgIC8vIG1vZGlmeWluZyB0aGUgdmVjdG9yIGluY29ycmVjdGx5LgorICAgICAg
ICAKKyAgICAgICAgLy8gQ29weSB0aGUgdmFsdWVzIGJhY2sgaW50byBtX3N0b3JhZ2UuCisgICAg
ICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBhcmUsIDQ0Pjo6SXRlcmF0
b3IgaXRlcjsKKyAgICAgICAgaXRlci5zdGFydF9pdGVyX2xlYXN0KHRyZWUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKKyAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRhLCB0aGlzLCB0cmVlLmFic3RyYWN0b3Io
KS5tX25vZGVzWyppdGVyXS52YWx1ZSk7CisgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0K
LQotICAgICAgICBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CisgICAgICAgIAorICAgICAgICAvLyBQ
dXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgICAgICAvLyBF
bnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBvdXQuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVj
dG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAgICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVu
Y3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAg
QVNTRVJUKHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuc2l6ZSgpID49IG51bURlZmluZWQpOwot
Ci0gICAgLy8gRklYTUU6IElmIHRoZSBjb21wYXJlIGZ1bmN0aW9uIGNoYW5nZWQgdGhlIGxlbmd0
aCBvZiB0aGUgYXJyYXksIHRoZSBmb2xsb3dpbmcgbWlnaHQgYmUKLSAgICAvLyBtb2RpZnlpbmcg
dGhlIHZlY3RvciBpbmNvcnJlY3RseS4KLQotICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNrIGlu
dG8gbV9zdG9yYWdlLgotICAgIEFWTFRyZWU8QVZMVHJlZUFic3RyYWN0b3JGb3JBcnJheUNvbXBh
cmUsIDQ0Pjo6SXRlcmF0b3IgaXRlcjsKLSAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QodHJlZSk7
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1EZWZpbmVkOyArK2kpIHsKLSAgICAgICAgbV9z
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOwotICAgICAgICArK2l0ZXI7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIC8v
IFB1dCB1bmRlZmluZWQgdmFsdWVzIGJhY2sgaW4uCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
RGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHVudXNl
ZCB2YWx1ZXMgaW4gdGhlIHZlY3RvciBhcmUgemVyb2VkIG91dC4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAg
ICAgICBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFyKCk7Ci0KLSAgICBtX3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOwotCi0gICAgY2hlY2tDb25z
aXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6ZmlsbEFy
Z0xpc3QoRXhlY1N0YXRlKiBleGVjLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncykKIHsKLSAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIHVuc2lnbmVkIHZlY3Rv
ckVuZCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIHVuc2ln
bmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwotICAgICAgICBpZiAoIXYpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgYXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAw
OworICAgICAgICBmb3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7CisgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXYpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhcmdzLmFwcGVuZCh2LmdldCgpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBzdG9yYWdlLT5sZW5ndGgo
KTsgKytpKQorICAgICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMsIGkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQotCi0gICAgZm9yICg7IGkgPCBzdG9yYWdlLT5tX2xlbmd0aDsg
KytpKQotICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogfQogCiB2b2lkIEpTQXJy
YXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCB1aW50MzJfdCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgo
KSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yOwotICAg
IHVuc2lnbmVkIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBm
b3IgKDsgaSA8IHZlY3RvckVuZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdiA9IHZlY3RvcltpXTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgdi5nZXQoKSk7CisgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
dmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3RvckVuZCA9
IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICg7IGkg
PCB2ZWN0b3JFbmQ7ICsraSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2
ID0gdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCB2LmdldCgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAg
ICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMsIGkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQotCi0gICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAg
Y2FsbEZyYW1lLT5zZXRBcmd1bWVudChpLCBnZXQoZXhlYywgaSkpOwogfQogCiB1bnNpZ25lZCBK
U0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7Ci0g
ICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0K
LSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVuZ3RoLCBtX3ZlY3Rvckxlbmd0aCk7
CisgICAgQVNTRVJUKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKTsKIAotICAgIHVuc2lnbmVkIG51
bURlZmluZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICBmb3Ig
KDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewotICAgICAg
ICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKLSAgICAg
ICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVy
biAwOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JM
ZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5n
ZXQoKTsKLSAgICAgICAgaWYgKHYpIHsKLSAgICAgICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgKytudW1VbmRlZmluZWQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+
bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG51bURlZmluZWQgPSAwOworICAgICAgICB1bnNpZ25lZCBudW1VbmRlZmluZWQgPSAw
OworICAgICAgICAKKyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK251bURlZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVj
dG9yW251bURlZmluZWRdLmdldCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmlu
ZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgIH0KLQotICAgIHVu
c2lnbmVkIG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOwot
Ci0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsK
LSAgICAgICAgbmV3VXNlZFZlY3Rvckxlbmd0aCArPSBtYXAtPnNpemUoKTsKLSAgICAgICAgaWYg
KG5ld1VzZWRWZWN0b3JMZW5ndGggPiBtX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICAgICAgLy8g
Q2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91
Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCi0gICAgICAgICAgICAvLyBleGNl
cHRpb24gaXMgdGhyb3duIGJ5IGNhbGxlci4KLSAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxl
bmd0aChnbG9iYWxEYXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLQotICAgICAgICAgICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdl
dCgpOworICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICBpZiAodi5pc1VuZGVm
aW5lZCgpKQorICAgICAgICAgICAgICAgICAgICArK251bVVuZGVmaW5lZDsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmlu
ZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQotCi0gICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1h
cC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHN0b3Jh
Z2UtPm1fdmVjdG9yW251bURlZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vj
b25kLmdldE5vblNwYXJzZU1vZGUoKSk7Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgp
OwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2Vk
VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVm
aW5lZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7IGkgPCB1
c2VkVmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmNsZWFy
KCk7Ci0KLSAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxl
bmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwotCi0g
ICAgcmV0dXJuIG51bURlZmluZWQ7Ci19Ci0KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQot
Ci12b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgdHlw
ZSkKLXsKLSAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICBBU1NF
UlQoIXN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwotCi0gICAgQVNTRVJUKHN0
b3JhZ2UpOwotICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICBB
U1NFUlQoIW1fc3BhcnNlVmFsdWVNYXApOwotCi0gICAgdW5zaWduZWQgbnVtVmFsdWVzSW5WZWN0
b3IgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvckxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9sZW5ndGgpOwotICAgICAg
ICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCi0gICAgICAgICAg
ICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmpl
Y3Qgd2FzIGRlYWxsb2NhdGVkLgotICAgICAgICAgICAgKytudW1WYWx1ZXNJblZlY3RvcjsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNo
ZWNrKQotICAgICAgICAgICAgICAgIEFTU0VSVChpID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNlZFZlY3Rvckxlbmd0aCA9
IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAg
ICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7CisgICAgICAgICAgICBp
ZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhbiBh
cnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMgLSBpZiBub3QsCisgICAg
ICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCisgICAgICAgICAg
ICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIG5ld1VzZWRWZWN0b3JMZW5n
dGgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFy
c2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWQr
K10uc2V0V2l0aG91dFdyaXRlQmFycmllcihpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpOwog
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1Vz
ZWRWZWN0b3JMZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7CisgICAgICAgIAorICAg
ICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIG51bURlZmluZWQ7CiAgICAgfQotICAgIEFTU0VSVChudW1W
YWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICBBU1NF
UlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bV9sZW5ndGgpOwotCi0gICAgaWYgKG1f
c3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZhbHVlTWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaXQt
PmZpcnN0OwotICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+bV9sZW5ndGgpOwot
ICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgICAg
IEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwotICAgICAgICAgICAgQVNTRVJUKGl0
LT5zZWNvbmQpOwotICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNvbnNpc3RlbmN5
Q2hlY2spCi0gICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkuaXNV
bmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2Nh
dGVkLgotICAgICAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKLSNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0y
MSwxNDIgKzIxLDMwIEBACiAjaWZuZGVmIEpTQXJyYXlfaAogI2RlZmluZSBKU0FycmF5X2gKIAor
I2luY2x1ZGUgIkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVN
ZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAotI2RlZmluZSBDSEVDS19BUlJBWV9D
T05TSVNURU5DWSAwCi0KIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNBcnJheTsKICAg
ICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKLSAgICBlbnVtIFB1dERpcmVjdEluZGV4
TW9kZSB7IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCwgUHV0RGlyZWN0SW5kZXhTaG91bGRO
b3RUaHJvdywgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyB9OwotCi0gICAgc3RydWN0IFNwYXJz
ZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKLSAgICAgICAgdHlw
ZWRlZiBXcml0ZUJhcnJpZXI8VW5rbm93bj4gQmFzZTsKLQotICAgICAgICBTcGFyc2VBcnJheUVu
dHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRl
KiwgSlNBcnJheSopIGNvbnN0OwotICAgICAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25z
dDsKLSAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7Ci0gICAgICAg
IEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgewotICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIFNwYXJzZUFycmF5RW50cnksIFdURjo6SW50
SGFzaDx1aW50NjRfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0
X3Q+ID4gTWFwOwotCi0gICAgICAgIGVudW0gRmxhZ3MgewotICAgICAgICAgICAgTm9ybWFsID0g
MCwKLSAgICAgICAgICAgIFNwYXJzZU1vZGUgPSAxLAotICAgICAgICAgICAgTGVuZ3RoSXNSZWFk
T25seSA9IDIsCi0gICAgICAgIH07Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgTWFw
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIE1hcDo6QWRkUmVzdWx0IEFkZFJlc3Vs
dDsKLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKCkKLSAgICAgICAgICAgIDogbV9mbGFn
cyhOb3JtYWwpCi0gICAgICAgICAgICAsIG1fcmVwb3J0ZWRDYXBhY2l0eSgwKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsK
LQotICAgICAgICBib29sIHNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFNw
YXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8
RmxhZ3M+KG1fZmxhZ3MgfCBTcGFyc2VNb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
bGVuZ3RoSXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2ZsYWdz
ICYgTGVuZ3RoSXNSZWFkT25seTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGVuZ3Ro
SXNSZWFkT25seSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2Fz
dDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCi0g
ICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgcHV0RGlyZWN0KEV4ZWNTdGF0ZSosIEpT
QXJyYXkqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlKTsKLSAgICAgICAg
QWRkUmVzdWx0IGFkZChKU0FycmF5KiwgdW5zaWduZWQpOwotICAgICAgICBpdGVyYXRvciBmaW5k
KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fbWFwLmZpbmQoaSk7IH0KLSAgICAgICAgLy8gVGhpcyBz
aG91bGQgQVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhl
IGZpbmQpLgotICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBtX21hcC5yZW1vdmUo
aXQpOyB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGkpIHsgbV9tYXAucmVtb3ZlKGkp
OyB9Ci0KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50
cyBvZiB0aGUgbWFwLgotICAgICAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFw
LmVuZCgpOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmlz
RW1wdHkoKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuc2l6ZSgpOyB9Ci0gICAgICAgIC8vIE9ubHkgYWxsb3cgY29uc3QgYmVnaW4v
ZW5kIGl0ZXJhdGlvbi4KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXAgbV9t
YXA7Ci0gICAgICAgIEZsYWdzIG1fZmxhZ3M7Ci0gICAgICAgIHNpemVfdCBtX3JlcG9ydGVkQ2Fw
YWNpdHk7Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgc3RydWN0IGhvbGRzIHRoZSBhY3R1YWwgZGF0
YSB2YWx1ZXMgb2YgYW4gYXJyYXkuICBBIEpTQXJyYXkgb2JqZWN0IHBvaW50cyB0byBpdCdzIGNv
bnRhaW5lZCBBcnJheVN0b3JhZ2UKLSAgICAvLyBzdHJ1Y3QgYnkgcG9pbnRpbmcgdG8gbV92ZWN0
b3IuICBUbyBhY2Nlc3MgdGhlIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2Ugc3RydWN0LCB1c2UgdGhl
IGdldFN0b3JhZ2UoKSBhbmQgCi0gICAgLy8gc2V0U3RvcmFnZSgpIG1ldGhvZHMuICBJdCBpcyBp
bXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZXJlIG1heSBiZSBzcGFjZSBiZWZvcmUgdGhlIEFycmF5
U3RvcmFnZSB0aGF0IAotICAgIC8vIGlzIHVzZWQgdG8gcXVpY2sgdW5zaGlmdCAvIHNoaWZ0IG9w
ZXJhdGlvbi4gIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxhYmxlIGJ5IHVz
aW5nOgotICAgIC8vICAgICBnZXRTdG9yYWdlKCkgLSBtX2luZGV4QmlhcyAqIHNpemVvZihKU1Zh
bHVlKQotICAgIHN0cnVjdCBBcnJheVN0b3JhZ2UgewotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsgLy8gVGhlICJsZW5ndGgiIHByb3BlcnR5IG9uIHRoZSBhcnJheQotICAgICAgICB1bnNpZ25l
ZCBtX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2FsbG9jQmFzZTsgLy8gUG9p
bnRlciB0byBiYXNlIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFsbG9jKCkuICBLZWVwaW5nIHRoaXMg
cG9pbnRlciBkb2VzIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMgZnJvbSB0aGUgbGVhayBkZXRl
Y3Rvci4KLSNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAvLyBOZWVkcyB0byBi
ZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgotICAgICAgICB1aW50cHRyX3Qg
bV9pbml0aWFsaXphdGlvbkluZGV4OwotICAgICAgICB1aW50cHRyX3QgbV9pbkNvbXBhY3RJbml0
aWFsaXphdGlvbjsKLSNlbHNlCi0gICAgICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Ci0jZW5kaWYK
LSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmVjdG9yWzFdOwotCi0gICAgICAgIHN0
YXRpYyBwdHJkaWZmX3QgbGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpOyB9Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFs
dWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGFsbG9j
QmFzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fYWxs
b2NCYXNlKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvck9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yKTsgfQotICAgIH07Ci0K
ICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3Mg
V2Fsa2VyOwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCisgICAgcHVibGljOgorICAgICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9pbmRleEJpYXMoMCkKLSAgICAgICAgICAgICwgbV9z
dG9yYWdlKDApCi0gICAgICAgICAgICAsIG1fc3BhcnNlVmFsdWVNYXAoMCkKKyAgICAgICAgZXhw
bGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKKyAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTQXJyYXkqIHRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChKU0dsb2JhbERh
dGEmLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKLSAgICAKICAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0gICAgICAgIHN0YXRpYyB2b2lkIGZp
bmFsaXplKEpTQ2VsbCopOwotCiAgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApOwogCiAgICAg
ICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNlZCBmb3IgZmFzdCBjb25zdHJ1Y3Rp
b24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCkBAIC0xNjksMjYgKzU3LDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwotICAgICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIEpTT2JqZWN0OjpwdXREaXJlY3Qq
IG1ldGhvZHM6Ci0gICAgICAgIC8vICAtIHRoZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1
bHRlZAotICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJlIG5vdCBjYWxsZWQuCi0gICAgICAgIC8v
ICAtIGl0IHdpbGwgaWdub3JlIGV4dGVuc2liaWxpdHkgYW5kIHJlYWQtb25seSBwcm9wZXJ0aWVz
IGlmIFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCBpcyBwYXNzZWQgYXMgdGhlIG1vZGUgKHRo
ZSBkZWZhdWx0KS4KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdp
dGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBz
ZXQgdG8gdHJ1ZS4KLSAgICAgICAgYm9vbCBwdXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2Rl
IG1vZGUgPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChjYW5TZXRJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0
SW5kZXgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBtb2RlKTsKLSAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2UtPm1fbGVuZ3RoOyB9CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIGdldEFycmF5TGVuZ3RoKCk7IH0KICAgICAgICAgLy8gT0sg
dG8gdXNlIG9uIG5ldyBhcnJheXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRj
aEFycmF5LgogICAgICAgICBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKIApAQCAtMjAyLDE0MiArNzUsODYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBj
b3VudCk7CiAgICAgICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNv
dW50KTsKIAotICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkg
PCBtX3ZlY3Rvckxlbmd0aCAmJiBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOyB9Ci0gICAgICAgIEpT
VmFsdWUgZ2V0SW5kZXgodW5zaWduZWQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3N0b3JhZ2UtPm1fdmVjdG9y
W2ldLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBjYW5TZXRJbmRleCh1bnNpZ25l
ZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGg7IH0KLSAgICAgICAgdm9pZCBzZXRJbmRl
eChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9zdG9yYWdlLT5tX3ZlY3Rv
cltpXTsKLSAgICAgICAgICAgIGlmICgheCkgewotICAgICAgICAgICAgICAgIEFycmF5U3RvcmFn
ZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5n
dGgpCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB4LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2KTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUluZGV4KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoY2FuU2V0SW5kZXgoaSkpOwotICAgICAgICAgICAgQXJyYXlTdG9y
YWdlICpzdG9yYWdlID0gbV9zdG9yYWdlOwotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0g
ICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0g
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIG5leHQgaW5k
ZXggaW4gc2VxdWVuY2UuCi0gICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgpOwotICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBz
ZXQgbV9udW1WYWx1ZXNJblZlY3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKLSAgICAgICAgICAg
IC8vIGNoZWNrIHdlIGRvIG5vdCB0cnkgdG8gaW5pdGlhbGl6ZSBtb3JlIHRoYW4gdGhpcyBudW1i
ZXIgb2YgcHJvcGVydGllcy4KLSAgICAgICAgICAgIEFTU0VSVChzdG9yYWdlLT5tX2luaXRpYWxp
emF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAgICAgICAgICAg
IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOwotI2VuZGlmCi0gICAgICAgICAgICBB
U1NFUlQoaSA8IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgc3Rv
cmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxp
bmUgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGluaXRpYWxpemVkIGFzIG1l
bnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXdMZW5ndGgsIG5ld0xlbmd0aCA9PSBtX3N0b3JhZ2UtPm1fbGVuZ3RoKTsKLSNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVt
YmVyIG9mIHByb3ByZXRpZXMgaW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4K
LSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9PSBt
X3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3Rv
cmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7Ci0gICAgICAgICAgICBtX3N0b3JhZ2Ut
Pm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGFy
c2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICAgICAgcmV0
dXJuIG1hcCAmJiBtYXAtPnNwYXJzZU1vZGUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIHZvaWQg
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgTWFya2VkQXJndW1lbnRCdWZmZXImKTsKICAgICAgICAg
dm9pZCBjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgdWludDMyX3QgbGVu
Z3RoKTsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3Rv
cmFnZU9mZnNldCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheSwgbV9zdG9yYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBwdHJk
aWZmX3QgdmVjdG9yTGVuZ3RoT2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgdm9pZCBlbnRlckRpY3Rpb25hcnlNb2RlKEpT
R2xvYmFsRGF0YSYpOwotCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgc3RhdGljIHZvaWQg
cHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUodW5z
aWduZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAg
ICAgICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFn
ZU9yWmVybygpOworICAgICAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+
bGVuZ3RoSXNSZWFkT25seSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRMZW5ndGhX
cml0YWJsZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKLSAgICAgICAgdm9pZCBwdXREZXNj
cmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7Ci0gICAgICAgIGJvb2wgZGVmaW5lT3duTnVtZXJp
Y1Byb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHRocm93RXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCBhbGxvY2F0ZVNwYXJzZU1hcChKU0dsb2Jh
bERhdGEmKTsKLSAgICAgICAgdm9pZCBkZWFsbG9jYXRlU3BhcnNlTWFwKCk7CiAKLSAgICAgICAg
dm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUpOwot
Ci0gICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVu
Z3RoKTsKLSAgICAgICAgYm9vbCBpbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudFNsb3dDYXNlKEpT
R2xvYmFsRGF0YSYsIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVk
IGNvbXBhY3RGb3JTb3J0aW5nKEpTR2xvYmFsRGF0YSYpOworICAgIH07CiAKLSAgICAgICAgZW51
bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3RydWN0
b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OwotICAgICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5j
eUNoZWNrKTsKLQotICAgICAgICB1bnNpZ25lZCBtX3ZlY3Rvckxlbmd0aDsgLy8gVGhlIHZhbGlk
IGxlbmd0aCBvZiBtX3ZlY3RvcgotICAgICAgICB1bnNpZ25lZCBtX2luZGV4QmlhczsgLy8gVGhl
IG51bWJlciBvZiBKU1ZhbHVlIHNpemVkIGJsb2NrcyBiZWZvcmUgQXJyYXlTdG9yYWdlLgotICAg
ICAgICBBcnJheVN0b3JhZ2UgKm1fc3RvcmFnZTsKLQotICAgICAgICAvLyBGSVhNRTogTWF5YmUg
U3BhcnNlQXJyYXlWYWx1ZU1hcCBzaG91bGQgYmUgcHV0IGludG8gaXRzIG93biBKU0NlbGw/Ci0g
ICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1fc3BhcnNlVmFsdWVNYXA7CisgICAgaW5saW5l
IEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSgKKyAgICAgICAgICAgIGdsb2JhbERhdGEsIDAsIDAs
IHRydWUsIGJhc2VJbmRleGluZ0hlYWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgpLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IoQkFTRV9WRUNUT1JfTEVOKSk7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0b3JhZ2UtPm1f
aW5kZXhCaWFzID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAg
ICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlf
Q09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsK
KyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IDA7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGJ1dHRlcmZseTsKKyAgICB9CiAKLSAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCBzcGFyc2VWYWx1ZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Fy
cmF5LCBtX3NwYXJzZVZhbHVlTWFwKTsgfQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4
Qmlhc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5LCBtX2luZGV4Qmlh
cyk7IH0KLSAgICB9OworICAgIEJ1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rp
b25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7
CiAKICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAg
ICAgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KTsKLSAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5n
dGgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGNyZWF0ZUFycmF5QnV0dGVyZmx5
KGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJy
YXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgICAgICBhcnJheS0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CiAK
ICAgICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0
aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERh
dGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25V
bmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgICAgICB1bnNpZ25l
ZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIGluaXRpYWxMZW5ndGgp
OworICAgICAgICBpZiAodmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgdm9pZCogdGVtcDsKKyAg
ICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgp
KSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1wLCAwLCAwKTsKKyAgICAgICAgKmJ1dHRl
cmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4aW5nSGVhZGVyRm9yQXJyYXkoaW5pdGlhbExl
bmd0aCwgdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgPSAw
OworICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgICAgICBzdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yID0gaW5pdGlhbExlbmd0aDsKKyNpZiBDSEVDS19BUlJBWV9D
T05TSVNURU5DWQorICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwor
ICAgICAgICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gdHJ1ZTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgSlNBcnJheSogYXNB
cnJheShKU1ZhbHVlKTsKQEAgLTM1NiwzMCArMTczLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
aW5saW5lIGJvb2wgaXNKU0FycmF5KEpTQ2VsbCogY2VsbCkgeyByZXR1cm4gY2VsbC0+Y2xhc3NJ
bmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsgfQogICAgIGlubGluZSBib29sIGlzSlNBcnJheShK
U1ZhbHVlIHYpIHsgcmV0dXJuIHYuaXNDZWxsKCkgJiYgaXNKU0FycmF5KHYuYXNDZWxsKCkpOyB9
CiAKLS8vIFRoZSBkZWZpbml0aW9uIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgZGVw
ZW5kYW50IG9uIHRoZSBkZWZpbml0aW9uIHN0b3JhZ2VTaXplCi0vLyBmdW5jdGlvbiBiZWxvdyAt
IHRoZSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGxpbWl0IGlzIGRlZmluZWQgc3VjaCB0aGF0
IHRoZSBzdG9yYWdlCi0vLyBzaXplIGNhbGN1bGF0aW9uIGNhbm5vdCBvdmVyZmxvdy4gIChzaXpl
b2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArCi0vLyAo
dmVjdG9yTGVuZ3RoICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpIG11c3QgYmUgPD0g
MHhGRkZGRkZGRlUgKHdoaWNoIGlzIG1heGltdW0gdmFsdWUgb2Ygc2l6ZV90KS4KLSNkZWZpbmUg
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKDB4RkZGRkZG
RkZVIC0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKQotCi0vLyBUaGVzZSB2YWx1ZXMg
aGF2ZSB0byBiZSBtYWNyb3MgdG8gYmUgdXNlZCBpbiBtYXgoKSBhbmQgbWluKCkgd2l0aG91dCBp
bnRyb2R1Y2luZwotLy8gYSBQSUMgYnJhbmNoIGluIE1hY2gtTyBiaW5hcmllcywgc2VlIDxyZGFy
Oi8vcHJvYmxlbS81OTcxMzkxPi4KLSNkZWZpbmUgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCAxMDAw
MFUKLSNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIChNQVhfU1RPUkFHRV9WRUNUT1Jf
TEVOR1RIIC0gMSkKLSAgICBpbmxpbmUgc2l6ZV90IEpTQXJyYXk6OnN0b3JhZ2VTaXplKHVuc2ln
bmVkIHZlY3Rvckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3JMZW5ndGggPD0g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgCi0gICAgICAgIC8vIE1BWF9TVE9SQUdF
X1ZFQ1RPUl9MRU5HVEggaXMgZGVmaW5lZCBzdWNoIHRoYXQgcHJvdmlkZWQgKHZlY3Rvckxlbmd0
aCA8PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICAvLyAtIGFzIGFzc2VydGVk
IGFib3ZlIC0gdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbiBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAg
ICAgIHNpemVfdCBzaXplID0gKHNpemVvZihBcnJheVN0b3JhZ2UpIC0gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpICsgKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKTsKLSAgICAgICAgLy8gQXNzZXJ0aW9uIHRvIGRldGVjdCBpbnRlZ2VyIG92ZXJmbG93
IGluIHByZXZpb3VzIGNhbGN1bGF0aW9uIChzaG91bGQgbm90IGJlIHBvc3NpYmxlLCBwcm92aWRl
ZCB0aGF0Ci0gICAgICAgIC8vIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggaXMgY29ycmVjdGx5
IGRlZmluZWQpLgotICAgICAgICBBU1NFUlQoKChzaXplIC0gKHNpemVvZihBcnJheVN0b3JhZ2Up
IC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSAvIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pID09IHZlY3Rvckxlbmd0aCkgJiYgKHNpemUgPj0gKHNpemVvZihBcnJheVN0b3Jh
Z2UpIC0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKSk7Ci0gICAgCi0gICAgICAgIHJl
dHVybiBzaXplOwotICAgIH0KLQogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3Qm
IHZhbHVlcykKICAgICB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvdW5kRnVuY3RpCiAK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBib3VuZEFyZ3MtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGFyZ3MuYXBwZW5kKGJvdW5k
QXJncy0+Z2V0SW5kZXgoaSkpOworICAgICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldElu
ZGV4UXVpY2tseShpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKQogICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVudChpKSk7
CiAKQEAgLTY1LDcgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBib3VuZEZ1
bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICBhcmdzLmFwcGVu
ZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdz
LT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVj
LT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBlbmQoZXhlYy0+YXJndW1l
bnQoaSkpOwogCkBAIC0xMTIsOCArMTEyLDggQEAgdm9pZCBKU0JvdW5kRnVuY3Rpb246OmZpbmlz
aENyZWF0aW9uKEV4ZQogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGV4ZWN1dGFibGUs
IGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAotICAgIHB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cywgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4
ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7Ci0gICAgcHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyLCBn
bG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxl
dGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKKyAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2Fs
bGVyLCBnbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERv
bnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAogdm9pZCBKU0JvdW5kRnVuY3Rp
b246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTI3
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxMSBAQCB2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxs
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwogU3RyaW5nIEpTQ2VsbDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlOwog
ICAgICAgICB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgICAg
IFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS51
bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKQEAgLTE2MCw2ICsxNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92ZXJyaWRlLWFibGUg
c3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIgTWV0aG9kVGFibGUK
ICAgICAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKICAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgZ2V0
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqKTsKICAgICAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAx
Mjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgp
LT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0yNTUs
NyArMjU1LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZQogICAg
ICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAg
ICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQp
IHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5n
bG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRo
cm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBB
Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBl
RXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29y
KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQCBib29sIEpTRnVu
Y3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5q
c0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJy
b3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsK
KyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRl
clNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgSlNG
dW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8KICAgICAgICAgaWYgKHRoaXNPYmplY3Qt
PmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVF
cnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3Ip
OworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0
dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBK
U0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAg
ICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsK
ICAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdEZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykpIHsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpOwogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC0zOTYsMTQgKzM5NiwxNCBAQCBib29sIEpTRnVu
Y3Rpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0
LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGlmICghQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8
IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERp
cmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9u
KTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8
fCBzYW1lVmFsdWUoZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigp
LT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwogICAgIH0g
ZWxzZSBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZXIpIHsK
ICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkg
ewogICAgICAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICB0
aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0
dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAg
ICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhl
YyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVy
biBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIHZhbHVlQ2hlY2sg
PSAhZGVzY3JpcHRvci52YWx1ZSgpIHx8IHNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVjLCB0
aGlzT2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAg
ICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURv
bnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
cmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlBh
cnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBP
YmplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTIxMyw2ICsyMTQsNyBAQCBKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgcmVnRXhwU3RydWN0dXJl
LnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgc2hhcmVkU3ltYm9sVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTaGFyZWRTeW1ib2xU
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0cnVjdHVy
ZUNoYWluU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlQ2hhaW46OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBzcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJl
LnNldCgqdGhpcywgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjc5MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHNo
YXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1
Y3R1cmVDaGFpblN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3BhcnNlQXJy
YXlWYWx1ZU1hcFN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZp
ZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgR2V0dGVyU2V0dGVyKiBwcm90
b0FjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHJvdG9BY2Nlc3Nv
ci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9HZXR0ZXIpKTsKICAgICBwcm90b0Fj
Y2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUo
ZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwotICAgIG1f
b2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vz
c29yIHwgRG9udEVudW0pOworICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3Nv
cihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vz
c29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1
Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIxLDggKzUyMSw4IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5k
TmV4dFByb3AKICAgICBpZiAobV9pc0FycmF5KSB7CiAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUu
CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmIChtX2lzSlNBcnJheSAmJiBhc0Fy
cmF5KG1fb2JqZWN0LmdldCgpKS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgdmFs
dWUgPSBhc0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICBp
ZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4UXVp
Y2tseShpbmRleCkpCisgICAgICAgICAgICB2YWx1ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkp
LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90KG1fb2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGlmICghbV9vYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgobV9vYmplY3QuZ2V0
KCksIGV4ZWMsIGluZGV4LCBzbG90KSkKQEAgLTY4Nyw4ICs2ODcsOCBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3Rh
Y2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYgYXJyYXktPmNh
bkdldEluZGV4KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5n
ZXRJbmRleChpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheShhcnJheSkgJiYg
YXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGlu
VmFsdWUgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhcnJheS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChhcnJheSwgbV9leGVjLCBpbmRleCwgc2xvdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJp
Y0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5
SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXJJbmxp
bmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxUaGlzLmgiCkBAIC0zOCwxMiArNDAsMTkgQEAK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gV2Uga2VlcCB0cmFjayBv
ZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uIFdlIHVzZSB0
aGlzCisvLyBhcyBhIHNpbXBsZSBoZXVyaXN0aWMgZm9yIGFzIHRoZSB2YWx1ZSB0byBncm93IHRo
ZSBuZXh0IGFycmF5IGZyb20gc2l6ZSAwLgorLy8gVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYnkgdGhl
IGNvbnN0YW50IEZJUlNUX1ZFQ1RPUl9HUk9XIGRlZmluZWQgYWJvdmUuCitzdGF0aWMgdW5zaWdu
ZWQgbGFzdEFycmF5U2l6ZSA9IDA7CisKIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpT
Q2VsbCogY2VsbCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSgpOwpAQCAtODYsMjkgKzk1LDgxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3Bl
cnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRP
dXRPZkxpbmVTdG9yYWdlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBQcm9wZXJ0eVN0b3JhZ2Ugc3Rv
cmFnZSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKLSAgICBBU1NFUlQoc3RvcmFnZSk7Ci0gICAgQVNTRVJU
KHN0b3JhZ2VTaXplKTsKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAotICAgIHNpemVfdCBjYXBh
Y2l0eSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChjYXBh
Y2l0eSk7Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IGNhcGFjaXR5ICogc2l6ZW9mKFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIFByb3BlcnR5U3RvcmFnZSBiYXNlT2ZTdG9y
YWdlID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weUFuZFBpbk90aGVyd2lzZShiYXNlT2ZTdG9yYWdlLCBjYXBhY2l0eUluQnl0ZXMpKSB7
Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdCYXNlT2ZTdG9yYWdlID0gc3RhdGljX2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVz
KSk7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QmFzZU9mU3Rv
cmFnZSArIGNhcGFjaXR5OwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IGN1
cnJlbnRUYXJnZXQgKyAxOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9
IHN0b3JhZ2UgLSAxOworICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3Qg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9
IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAg
aWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9
IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgKKyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaWYgKHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCisgICAgICAgICAgICBidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0
ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRpZXMu
CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2Ug
PSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3Vu
dCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAg
ICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsK
ICAgICAgICAgfQotICAgICAgICBtX291dE9mTGluZVN0b3JhZ2Uuc2V0KG5ld1N0b3JhZ2UsIFN0
b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxLCBzdG9yYWdlU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAg
ICAgICAqbmV3QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpID0gKmJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbmQgY29weSB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5jb3B5SGVhZGVyRnJvbUR1cmlu
Z0dDKCpidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1
cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykgeworICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkVmFsdWUoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQr
KyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXApCisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1dHRlcmZseSA9
IG5ld0J1dHRlcmZseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0
aWVzLgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8v
IE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlm
IChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTIyLDkgKzE4Myw5IEBAIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0b3Jh
Z2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAoc3Rv
cmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0b3Is
IHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25O
b25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bk5vbkZpbmFsT2JqZWN0KCkpOwogCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMTQyLDkgKzIwMyw5IEBA
IHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBQcm9wZXJ0eVN0
b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBpZiAo
c3RvcmFnZSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRPdXRPZkxpbmVTdG9yYWdlKHZpc2l0
b3IsIHN0b3JhZ2UsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25v
d25GaW5hbE9iamVjdCgpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCkpOwogCiAgICAgc2l6ZV90IHN0b3Jh
Z2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlubGluZVNpemVGb3JLbm93bkZpbmFs
T2JqZWN0KCk7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+aW5saW5lU3Rv
cmFnZSgpLCBzdG9yYWdlU2l6ZSk7CkBAIC0xNjEsMTAgKzIyMiw1MCBAQCBTdHJpbmcgSlNPYmpl
Y3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjCiAgICAgcmV0dXJuIGluZm8tPmNsYXNzTmFtZTsK
IH0KIAotYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CisgICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIg
aW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKKyAgICAvLyBsZWdhbCBmb3Ig
YW55b25lIHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVy
cmlkaW5nCisgICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgorICAgIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAg
IAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOworICAgIAorICAgIHN3aXRjaCAodGhpc09i
amVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToK
KyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKKyAgICAgICAgICAgIGlm
IChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmdl
dChzbG90KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBFQ01BIDguNi4yLjIKQEAgLTE3NCw2ICsyNzUs
MTMgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEFTU0VS
VCh2YWx1ZSk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZh
bHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKICAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0
IGZpcnN0LgorICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlm
IChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBv
ciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KICAgICBKU1ZhbHVlIHByb3RvdHlwZTsK
QEAgLTIzNSw5ICszNDMsMTQ1IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGEKIAogdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3Vs
ZFRocm93KQogewotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICB0aGlzT2JqZWN0LT5j
aGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBpZiAoVU5MSUtFTFkocHJvcGVy
dHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZh
bHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJy
YXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdl
OiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUg
Pj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92
ZWN0b3JbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+
bGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgbGVuZ3RoICYgbV9udW1WYWx1
ZXNJblZlY3RvciBhcyBuZWNlc3NhcnkuCisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gbGVu
Z3RoKSB7CisgICAgICAgICAgICBsZW5ndGggPSBwcm9wZXJ0eU5hbWUgKyAxOworICAgICAgICAg
ICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlU2xvdCkKKyAgICAg
ICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgCisgICAgICAg
IHZhbHVlU2xvdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cisg
ICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7Cit9CisKK0FycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwLmdldCgpOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoZ2xvYmFsRGF0YSk7CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisg
ICAgICAgIHJldHVybiBzdG9yYWdlOworCisgICAgbWFwLT5zZXRTcGFyc2VNb2RlKCk7CisKKyAg
ICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBiZSBhIG5l
dyBlbnRyeSBpbiB0aGUgbWFwLCBzbyBubyBuZWVkIHRvIGNoZWNrIHdlIGNhbiB3cml0ZSwKKyAg
ICAgICAgLy8gYW5kIGF0dHJpYnV0ZXMgYXJlIGRlZmF1bHQgc28gbm8gbmVlZCB0byBzZXQgdGhl
bS4KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbWFwLT5hZGQodGhpcywgaSkuaXRl
cmF0b3ItPnNlY29uZC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFy
cmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkp
OworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIAorICAgIG1f
YnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKKyAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1hcCk7CisgICAgCisgICAgcmV0dXJuIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgc3dp
dGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
Z2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCit7CisgICAg
SW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCk7CisgICAg
QVNTRVJUX1VOVVNFRChvbGRUeXBlLCBvbGRUeXBlID09IE5vbkFycmF5IHx8IG9sZFR5cGUgPT0g
QXJyYXkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPmdyb3dB
cnJheVJpZ2h0KAorICAgICAgICBnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAgICBBcnJheVN0b3JhZ2U6OnNp
emVGb3IodmVjdG9yTGVuZ3RoKSk7CisgICAgaWYgKCFuZXdCdXR0ZXJmbHkpCisgICAgICAgIENS
QVNIKCk7CisgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgIHJlc3VsdC0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgcmVzdWx0LT5zZXRW
ZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICByZXN1bHQtPm1fc3BhcnNlTWFwLmNsZWFy
KCk7CisgICAgcmVzdWx0LT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICByZXN1bHQtPm1f
aW5kZXhCaWFzID0gMDsKKyNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgIHJlc3VsdC0+
bV9pbml0aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICByZXN1bHQtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgQWxs
b2NhdGVBcnJheVN0b3JhZ2UpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0
ZXJmbHksIG5ld1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCAw
LCBCQVNFX1ZFQ1RPUl9MRU4pOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhnbG9iYWxEYXRhLCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICAKKyAgICBjYXNlIEFycmF5OgorICAgIGNhc2Ug
Tm9uQXJyYXk6IHsKKyAgICAgICAgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEsIDAsIDAp
OworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKGdsb2JhbERhdGEpOworICAgICAgICBtYXAtPnNldFNwYXJzZU1vZGUoKTsKKyAgICAgICAg
cmV0dXJuIGFycmF5U3RvcmFnZSgpOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIH0K
IAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0yNjksMTAgKzUxMywxOCBAQCBib29sIEpTT2JqZWN0Ojph
bGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0CiAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+YWxsb3dzQWNjZXNzRnJvbShnbG9iYWxPYmplY3QsIGV4ZWMp
OwogfQogCi12b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCit2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYg
KGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwogCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpIHsKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIHZhbHVlLCBhdHRyaWJ1
dGVzLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9k
ZURlZmluZU93blByb3BlcnR5PihnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRy
aWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwogCkBAIC0zMDQsNiArNTU2
LDEwIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXgKIGJvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CisgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAg
ICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkpOwogCiAgICAgaWYgKCF0aGlzT2JqZWN0LT5zdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rp
b25zRm9yRGVsZXRlKGV4ZWMpOwpAQCAtMzMyLDEwICs1ODgsNDUgQEAgYm9vbCBKU09iamVjdDo6
aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLWJvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewogICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSk7CisgICAgCisgICAg
aWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CisgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAg
ICAgICAgdmFsdWVTbG90LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CisgICAg
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsK
KyAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpc09iamVjdC0+Y2hl
Y2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNPYmpl
Y3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTQ2NSw2ICs3NTYsNTEg
QEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2b2lkIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQogeworICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0
byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9w
ZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKKyAgICAv
LyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBk
aWZmZXJlbnQgYXBwcm9hY2gsCisgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFucyBh
IGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgorICAgIHN3aXRjaCAo
b2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5
OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
eworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9y
YWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBr
ZXlzOworICAgICAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtYXAtPmVuZCgpOworICAgICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAh
KGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICAgICAg
a2V5cy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5maXJzdCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBr
ZXlzLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQg
SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3sKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0
LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlv
bnNSZWlmaWVkKCkpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CkBAIC01MTUsOCArODUxLDcgQEAgdm9pZCBKU09iamVjdDo6ZnJlZXplKEpTR2xvYmFsRGF0YSYg
Z2xvYgogCiB2b2lkIEpTT2JqZWN0OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiB7Ci0gICAgaWYgKGlzSlNBcnJheSh0aGlzKSkKLSAgICAgICAgYXNBcnJheSh0
aGlzKS0+ZW50ZXJEaWN0aW9uYXJ5TW9kZShnbG9iYWxEYXRhKTsKKyAgICBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzRXh0ZW5zaWJsZSgpKQogICAg
ICAgICBzZXRTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9u
c1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCkpKTsKIH0KQEAgLTU3MywxMSArOTA4
LDExIEBAIGJvb2wgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChKU0dsb2JhbERhdGEKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9w
ZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBs
b2NhdGlvbikKK05FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlm
IChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dldHRlclNldHRlcihsb2NhdGlvbi0+Z2V0
KCkpLT5nZXR0ZXIoKSkgeworICAgIGlmIChKU09iamVjdCogZ2V0dGVyRnVuY3Rpb24gPSBhc0dl
dHRlclNldHRlcihnZXREaXJlY3RPZmZzZXQob2Zmc2V0KSktPmdldHRlcigpKSB7CiAgICAgICAg
IGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc2xvdC5zZXRD
YWNoZWFibGVHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXRGb3JMb2NhdGlv
bihsb2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVHZXR0ZXJTbG90KHRo
aXMsIGdldHRlckZ1bmN0aW9uLCBvZmZzZXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
bG90LnNldEdldHRlclNsb3QoZ2V0dGVyRnVuY3Rpb24pOwogICAgIH0gZWxzZQpAQCAtNjAzLDI2
ICs5MzgsNTI4IEBAIFN0cnVjdHVyZSogSlNPYmplY3Q6OmNyZWF0ZUluaGVyaXRvcklEKEoKICAg
ICByZXR1cm4gaW5oZXJpdG9ySUQ7CiB9CiAKLVByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jv
d091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpCit2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQog
ewotICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCisgICAg
ICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlw
dG9yLnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRl
cyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3Ip
ICYgfkFjY2Vzc29yOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSXQncyBpbXBv
cnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQot
ICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgorICAgIGlm
IChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgSlNPYmplY3Qq
IGdldHRlciA9IDA7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKKyAg
ICAgICAgICAgIGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIGVs
c2UgaWYgKG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKKyAgICAgICAgICAg
IGdldHRlciA9IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7CisgICAgICAgIEpTT2JqZWN0
KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCisg
ICAgICAgICAgICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworICAgICAgICBl
bHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCisgICAgICAgICAg
ICBzZXR0ZXIgPSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOworCisgICAgICAgIEdldHRl
clNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKKyAgICAgICAg
aWYgKGdldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnZXR0ZXIpOworICAgICAgICBpZiAoc2V0dGVyKQorICAgICAgICAgICAgYWNjZXNz
b3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7CisKKyAgICAgICAgZW50
cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgICAg
ICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQob2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAg
IGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChvbGREZXNjcmlwdG9yKTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkK
K2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhy
b3dFeGNlcHRpb24pCit7CisgICAgQVNTRVJUKGluZGV4ICE9IDB4RkZGRkZGRkYpOworCisgICAg
aWYgKCFpblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2Un
cmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAg
IC8vIEZJWE1FOiB0aGlzIHdpbGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJp
YnV0ZXMgYXJlIG1pc3NpbmcgdGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKKyAgICAgICAg
Ly8gaG93ZXZlciBpZiB0aGUgcHJvcGVydHkgY3VycmVudGx5IGV4aXN0cyBtaXNzaW5nIGF0dHJp
YnV0ZXMgd2lsbCBvdmVycmlkZSBmcm9tIHRoZWlyIGN1cnJlbnQgJ3RydWUnCisgICAgICAgIC8v
IHN0YXRlIChpLmUuIGRlZmluZU93blByb3BlcnR5IGNvdWxkIGJlIHVzZWQgdG8gc2V0IGEgdmFs
dWUgd2l0aG91dCBuZWVkaW5nIHRvIGVudGVyaW5nICdTcGFyc2VNb2RlJykuCisgICAgICAgIGlm
ICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleChleGVjLCBpbmRleCwgZGVzY3JpcHRvci52YWx1ZSgpLCAwLCB0aHJvd0V4Y2VwdGlv
biA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRo
cm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKwor
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgQVNTRVJUKG1hcCk7CisKKyAgICAvLyAxLiBMZXQg
Y3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBp
bnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOworICAg
IFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7
CisKKyAgICAvLyAyLiBMZXQgZXh0ZW5zaWJsZSBiZSB0aGUgdmFsdWUgb2YgdGhlIFtbRXh0ZW5z
aWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCisgICAgLy8gMy4gSWYgY3VycmVudCBpcyB1
bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMgZmFsc2UsIHRoZW4gUmVqZWN0LgorICAgIC8vIDQu
IElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIHRydWUsIHRoZW4KKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkg
eworICAgICAgICAgICAgbWFwLT5yZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmlu
ZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIDQuYS4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBvciBJc0Rh
dGFEZXNjcmlwdG9yKERlc2MpIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIG93biBkYXRhIHByb3Bl
cnR5CisgICAgICAgIC8vIG5hbWVkIFAgb2Ygb2JqZWN0IE8gd2hvc2UgW1tWYWx1ZV1dLCBbW1dy
aXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2
YWx1ZXMKKyAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiBJZiB0aGUgdmFsdWUgb2Yg
YW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRo
ZSBuZXdseQorICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlzIHNldCB0byBpdHMgZGVmYXVs
dCB2YWx1ZS4KKyAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11c3QgYmUgYW4gYWNjZXNzb3Ig
UHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBhY2Nlc3NvciBwcm9wZXJ0eSBu
YW1lZCBQIG9mCisgICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtbR2V0XV0sIFtbU2V0XV0sIFtb
RW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGRl
c2NyaWJlZCBieQorICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRl
IGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseSBjcmVh
dGVkIHByb3BlcnR5CisgICAgICAgIC8vIGlzIHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAg
ICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KKworICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
ZGVmYXVsdHM7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBSZWFkT25seTsKKyAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRz
KTsKKworICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNj
cmlwdG9yLCBkZWZhdWx0cyk7CisgICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJz
ZW50LgorICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28g
b2NjdXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlz
IHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hl
biBjb21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGN1cnJlbnQ7CisgICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwor
ICAgIGlmIChkZXNjcmlwdG9yLmlzRW1wdHkoKSB8fCBkZXNjcmlwdG9yLmVxdWFsVG8oZXhlYywg
Y3VycmVudCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gNy4gSWYgdGhlIFtbQ29u
ZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSB0aGVuCisgICAgaWYgKCFjdXJy
ZW50LmNvbmZpZ3VyYWJsZSgpKSB7CisgICAgICAgIC8vIDcuYS4gUmVqZWN0LCBpZiB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBEZXNjIGlzIHRydWUuCisgICAgICAgIGlmIChkZXNjcmlw
dG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9m
IGN1cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIu
CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5l
bnVtZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCisgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51
bWVyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgfQor
CisgICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5v
IGZ1cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIWRlc2NyaXB0b3IuaXNH
ZW5lcmljRGVzY3JpcHRvcigpKSB7CisgICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2Ny
aXB0b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQg
cmVzdWx0cywgdGhlbgorICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0g
ZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDkuYS4gUmVq
ZWN0LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAg
ICAgICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0
aGVuIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCisgICAg
ICAgICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2
ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHkncworICAgICAg
ICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBh
bmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSdzIGF0dHJpYnV0ZXMgdG8KKyAgICAgICAg
ICAgIC8vIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAgICAgLy8gOS5jLiBFbHNlLCBj
b252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYW4gYWNjZXNzb3Ig
cHJvcGVydHkgdG8gYSBkYXRhIHByb3BlcnR5LgorICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhl
IGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR5J3MgW1tDb25maWd1cmFi
bGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KKyAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5kIHNl
dCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQg
dmFsdWVzLgorICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYm
IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyAxMC4gRWxz
ZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNj
KSBhcmUgYm90aCB0cnVlLCB0aGVuCisgICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25m
aWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgeworICAg
ICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxk
IG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBp
cyB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRl
bXB0aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CisgICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gMTAu
YS5paS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50
IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxz
ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUo
ZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3Io
KSAmJiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7
CisgICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkg
YW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBb
W0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEx
LmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBT
YW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgorICAgICAg
ICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNl
dHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0
dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8v
IDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBh
bmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KKyAg
ICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRv
ci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhl
IGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQg
b2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0
dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUg
b2YgdGhlIGZpZWxkLgorICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAs
IGRlc2NyaXB0b3IsIGN1cnJlbnQpOworICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworU3BhcnNlQXJyYXlWYWx1ZU1hcCogSlNPYmplY3Q6OmFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIHJlc3VsdCA9IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZShnbG9iYWxEYXRh
KTsKKyAgICBhcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU09iamVjdDo6ZGVhbGxv
Y2F0ZVNwYXJzZUluZGV4TWFwKCkKK3sKKyAgICBpZiAoQXJyYXlTdG9yYWdlKiBhcnJheVN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKSkKKyAgICAgICAgYXJyYXlTdG9yYWdlLT5tX3NwYXJz
ZU1hcC5jbGVhcigpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3csIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKKyAgICAv
LyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUg
Y3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICBB
U1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgCisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgCisgICAg
Ly8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHNw
YXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAgICAgICAvLyBJZiB0aGUgYXJy
YXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVudGVyZWQgZGljdGlvbmFyeSBt
b2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAgICBBU1NFUlQoaXNFeHRlbnNp
YmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5Lgor
ICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHN0b3JhZ2Ut
PnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJs
ZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZl
Y3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFs
RGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9y
YWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRo
ZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0
IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBt
YXAgJiBhZGQgdGhlIHZhbHVlLgorICAgICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywg
aSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CisgICAgaWYgKGkgPj0gbGVuZ3RoKSB7CisgICAgICAgIC8vIFByb2hp
Yml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisgICAgICAg
IGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSB8fCAhaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9y
YWdlLT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5
IHVzaW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNv
LgorICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNl
TW9kZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRp
b24gZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkg
fHwgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IobGVuZ3RoLCBudW1WYWx1ZXNJbkFycmF5KSB8fCAh
aW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBsZW5ndGgpKSB7CisgICAg
ICAgIG1hcC0+cHV0RW50cnkoZXhlYywgdGhpcywgaSwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5j
cmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3Jh
Z2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
bnVtVmFsdWVzSW5BcnJheTsKKworICAgIC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAg
aW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0
LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhN
YXAoKTsKKworICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlm
ICghdmFsdWVTbG90KQorICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Cisg
ICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOwogICAgIAotICAgIFByb3Bl
cnR5U3RvcmFnZSBvbGRQcm9wZXJ0eVN0b3JhZ2UgPSBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7
Ci0gICAgUHJvcGVydHlTdG9yYWdlIG5ld1Byb3BlcnR5U3RvcmFnZSA9IDA7CisgICAgc3dpdGNo
IChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAg
IGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKGluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSkgewor
ICAgICAgICAgICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93LCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIDAp
IHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgeworICAgICAgICAgICAgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIHNo
b3VsZFRocm93LCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGNyZWF0ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhLCBpICsgMSwgZ2V0TmV3VmVj
dG9yTGVuZ3RoKDAsIDAsIGkgKyAxKSk7CisgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIE5vbkFycmF5
V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAg
ICAgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwg
dmFsdWUsIHNob3VsZFRocm93LCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK2Jvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0
aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlLCBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwogCi0gICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFr
ZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlw
ZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgdm9pZCogdGVtcCA9IG5ld1Byb3BlcnR5U3RvcmFnZTsK
LSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZW9mKFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4pICogbmV3U2l6ZSwgJnRlbXApKQorICAgIC8vIGkgc2hvdWxk
IGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZl
Y3Rvci4KKyAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSB8fCBhdHRyaWJ1
dGVzKTsKKyAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworCisgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisKKyAgICAvLyBG
aXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3BhcnNl
IG1hcC4KKyAgICBpZiAoTElLRUxZKCFtYXApKSB7CisgICAgICAgIC8vIElmIHRoZSBhcnJheSBp
cyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1vZGUs
IGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCisgICAgICAgIEFTU0VSVChpc0V4dGVuc2libGUo
KSk7CisgICAgCisgICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCisgICAg
ICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgc3RvcmFnZS0+c2V0
TGVuZ3RoKGkgKyAxKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxlIHRv
IHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVjdG9y
LgorICAgICAgICBpZiAoTElLRUxZKAorICAgICAgICAgICAgICAgICFhdHRyaWJ1dGVzCisgICAg
ICAgICAgICAgICAgJiYgKGlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcikpCisgICAgICAgICAgICAgICAgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgo
Z2xvYmFsRGF0YSwgaSArIDEpKSkgeworICAgICAgICAgICAgLy8gc3VjY2VzcyEgLSByZXJlYWQg
bV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiByZWFsbG9jYXRlZCwgYW5kIHN0b3Jl
IHRvIHRoZSB2ZWN0b3IuCisgICAgICAgICAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7Cisg
ICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOworICAgICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
bywgb3IgY2FuJ3QgdXNlIGEgdmVjdG9yIHRvIGhvbGQgdGhpcyBwcm9wZXJ0eSAtIGFsbG9jYXRl
IGEgc3BhcnNlIG1hcCAmIGFkZCB0aGUgdmFsdWUuCisgICAgICAgIG1hcCA9IGFsbG9jYXRlU3Bh
cnNlSW5kZXhNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1hcC0+cHV0
RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAgICB9CisK
KyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0aCkgeworICAgICAgICBp
ZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpIHsKKyAgICAgICAgICAgIC8v
IFByb2hpYml0IGdyb3dpbmcgdGhlIGFycmF5IGlmIGxlbmd0aCBpcyBub3Qgd3JpdGFibGUuCisg
ICAgICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBpZiAoIWlz
RXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9
PSBQdXREaXJlY3RJbmRleFNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVy
dHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2libGUuIik7CisgICAgICAgIH0KKyAgICAg
ICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOwor
ICAgIH0KKworICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0
aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcgc28uCisgICAgLy8gV2Ugd2lsbCBjb250aW51
ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291
bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KKyAgICB1bnNpZ25lZCBu
dW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6
ZSgpOworICAgIGlmIChtYXAtPnNwYXJzZU1vZGUoKSB8fCBhdHRyaWJ1dGVzIHx8ICFpc0RlbnNl
RW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVj
dG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIG1h
cC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKwor
ICAgIC8vIFJlcmVhZCBtX3N0b3JhZ2UgYWZ0ZXIgaW5jcmVhc2VWZWN0b3JMZW5ndGgsIHVwZGF0
ZSBtX251bVZhbHVlc0luVmVjdG9yLgorICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKKyAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKKworICAg
IC8vIENvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVs
ZXRlIHRoZSBtYXAuCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdl
LT5tX3ZlY3RvcjsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtYXAtPmVuZCgpOworICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdmVjdG9yW2l0
LT5maXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpKTsKKyAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKKworICAgIC8vIFN0b3JlIHRo
ZSBuZXcgcHJvcGVydHkgaW50byB0aGUgdmVjdG9yLgorICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWVTbG90ID0gdmVjdG9yW2ldOworICAgIGlmICghdmFsdWVTbG90KQorICAgICAgICAr
K3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgdmFsdWVTbG90LnNldChnbG9iYWxE
YXRhLCB0aGlzLCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhN
b2RlIG1vZGUpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlz
IG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1BWF9BUlJB
WV9JTkRFWCk7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgaWYgKGlu
ZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSB8fCBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpKTsKKyAgICAgICAgaWYgKCFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGksIDApIHx8IGkgPj0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNyZWF0ZUFy
cmF5U3RvcmFnZShnbG9iYWxEYXRhLCAwLCAwKSk7CisgICAgICAgIAorICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgaSArIDEsIGdl
dE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rv
cltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0FMV0FZU19JTkxJTkUg
dW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBjdXJyZW50VmVj
dG9yTGVuZ3RoLCB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoLCB1bnNpZ25lZCBkZXNpcmVkTGVuZ3Ro
KQoreworICAgIEFTU0VSVChkZXNpcmVkTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5H
VEgpOworCisgICAgdW5zaWduZWQgaW5jcmVhc2VkTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heElu
aXRMZW5ndGggPSBzdGQ6Om1pbihjdXJyZW50TGVuZ3RoLCAxMDAwMDBVKTsKKworICAgIGlmIChk
ZXNpcmVkTGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKKyAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0g
bWF4SW5pdExlbmd0aDsKKyAgICBlbHNlIGlmICghY3VycmVudFZlY3Rvckxlbmd0aCkKKyAgICAg
ICAgaW5jcmVhc2VkTGVuZ3RoID0gc3RkOjptYXgoZGVzaXJlZExlbmd0aCwgbGFzdEFycmF5U2l6
ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgdG86
CisgICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKG5ld0xlbmd0aCAqIDMgKyAxKSAvIDI7
CisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9ICh1bnNpZ25l
ZCljZWlsKG5ld0xlbmd0aCAqIDEuNSkpOworICAgICAgICAvLyBUaGlzIGZvcm0gaXMgbm90IHBy
b25lIHRvIGludGVybmFsIG92ZXJmbG93LgorICAgICAgICBpbmNyZWFzZWRMZW5ndGggPSBkZXNp
cmVkTGVuZ3RoICsgKGRlc2lyZWRMZW5ndGggPj4gMSkgKyAoZGVzaXJlZExlbmd0aCAmIDEpOwor
ICAgIH0KKworICAgIEFTU0VSVChpbmNyZWFzZWRMZW5ndGggPj0gZGVzaXJlZExlbmd0aCk7CisK
KyAgICBsYXN0QXJyYXlTaXplID0gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNU
T1JfR1JPVyk7CisKKyAgICByZXR1cm4gc3RkOjptaW4oaW5jcmVhc2VkTGVuZ3RoLCBNQVhfU1RP
UkFHRV9WRUNUT1JfTEVOR1RIKTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVj
dDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCit7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICAKKyAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKKyAgICAgICAgbGVuZ3Ro
ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIGxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9y
YWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIG5ld1NpemUgKyAxOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGdldE5ld1ZlY3Rvckxlbmd0aCh2
ZWN0b3JMZW5ndGgsIGxlbmd0aCwgZGVzaXJlZExlbmd0aCk7Cit9CisKK2Jvb2wgSlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
bmV3TGVuZ3RoKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBhcnJheSBpbiBh
biBpbnRlcm5hbGx5IGluY29uc2lzdGVudCBzdGF0ZSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBtb3Zl
IGFueSB2YWx1ZXMgZnJvbSBzcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gdG8gdGhlIHZlY3Rvci4g
Q2FsbGVycyBoYXZlIHRvIGFjY291bnQgZm9yIHRoYXQsIGJlY2F1c2UgdGhleSBjYW4gZG8gaXQg
bW9yZSBlZmZpY2llbnRseS4KKyAgICBpZiAobmV3TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gYXJyYXlTdG9yYWdlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEJpYXMgPSBzdG9yYWdl
LT5tX2luZGV4QmlhczsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdG9yYWdlLT52ZWN0
b3JMZW5ndGgoKTsKKyAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3RoKTsKKyAgICB1
bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3TGVuZ3RoKTsK
KworICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJbiB0aGVzZSBj
YXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCisgICAgaWYgKExJS0VMWSghaW5kZXhCaWFzKSkg
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgp
LT5ncm93QXJyYXlSaWdodChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5n
dGgpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobmV3VmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIGlm
ICghbmV3QnV0dGVyZmx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2J1
dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBSZW1vdmUgc29tZSwgYnV0IG5vdCBhbGwgb2YgdGhl
IHByZWNhcGFjaXR5LiBBdG9taWMgZGVjYXksICYgY2FwcGVkIHRvIG5vdCBvdmVyZmxvdyBhcnJh
eSBsZW5ndGguCisgICAgdW5zaWduZWQgbmV3SW5kZXhCaWFzID0gc3RkOjptaW4oaW5kZXhCaWFz
ID4+IDEsIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggLSBuZXdWZWN0b3JMZW5ndGgpOworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnJlc2l6ZUFy
cmF5KAorICAgICAgICBnbG9iYWxEYXRhLAorICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCksCisg
ICAgICAgIG5ld0luZGV4QmlhcywgdHJ1ZSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rv
ckxlbmd0aCkpOworICAgIGlmICghbmV3QnV0dGVyZmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBvbGRQ
cm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4pICogb2xkU2l6ZSk7CisgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBu
ZXdJbmRleEJpYXM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBDSEVDS19BUlJBWV9DT05T
SVNURU5DWQordm9pZCBKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KENvbnNpc3Rl
bmN5Q2hlY2tUeXBlIHR5cGUpCit7CisgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYXJyYXlT
dG9yYWdlT3JaZXJvKCk7CisgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICByZXR1cm47CiAKLSAg
ICBBU1NFUlQobmV3UHJvcGVydHlTdG9yYWdlKTsKLSAgICByZXR1cm4gbmV3UHJvcGVydHlTdG9y
YWdlOworICAgIEFTU0VSVCghc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisK
KyAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgaWYgKHR5cGUgPT0gU29ydENvbnNpc3RlbmN5Q2hl
Y2spCisgICAgICAgIEFTU0VSVCghc3RvcmFnZS0+bV9zcGFyc2VNYXApOworCisgICAgdW5zaWdu
ZWQgbnVtVmFsdWVzSW5WZWN0b3IgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwg
c3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0gRGVzdHJ1Y3RvckNv
bnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgdmFsdWUuaXNVbmRlZmluZWQoKTsgLy8g
TGlrZWx5IHRvIGNyYXNoIGlmIHRoZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICAg
ICAgKytudW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIEFTU0VSVChp
ID49IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICB9CisgICAgfQorICAg
IEFTU0VSVChudW1WYWx1ZXNJblZlY3RvciA9PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
KTsKKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPD0gc3RvcmFnZS0+bGVuZ3RoKCkpOwor
CisgICAgaWYgKG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zcGFyc2VWYWx1ZU1hcC0+ZW5kKCk7CisgICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3NwYXJzZVZh
bHVlTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaXQtPmZpcnN0OworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgc3RvcmFnZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4ID49IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpOwor
ICAgICAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYgKHR5cGUgIT0g
RGVzdHJ1Y3RvckNvbnNpc3RlbmN5Q2hlY2spCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5n
ZXROb25TcGFyc2VNb2RlKCkuaXNVbmRlZmluZWQoKTsgLy8gTGlrZWx5IHRvIGNyYXNoIGlmIHRo
ZSBvYmplY3Qgd2FzIGRlYWxsb2NhdGVkLgorICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8v
IENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisKK0J1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRP
ZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQoreworICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CisKKyAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIGZvciB0aGUgcHJvcGVydHkKKyAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2
ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KKyAgICAKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmdyb3dQcm9wZXJ0eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KCksIG9sZFNpemUsIG5ld1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC02MzAs
MTAgKzE0NjcsNDYgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwOwogICAgIEpTQ2VsbCogY2VsbCA9IDA7CiAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBjZWxsKTsKLSAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQpCisgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQo
b2Zmc2V0KSwgYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSA9PSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3Iob2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0KSwgYXR0
cmlidXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgc3dpdGNoIChvYmplY3QtPnN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHZhbHVl
LmdldCgpLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQo
KSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAt
PmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgPT0gbWFwLT5ub3RGb3VuZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2Ny
aXB0b3IpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9CiAKIGJvb2wg
SlNPYmplY3Q6OmdldFByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTY1
OCw3ICsxNTMxLDcgQEAgc3RhdGljIGJvb2wgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQog
ICAgICAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBv
bGREZXNjcmlwdG9yLmdldHRlck9iamVjdCgpKTsKICAgICAgICAgICAgIGlmIChvbGREZXNjcmlw
dG9yLnNldHRlclByZXNlbnQoKSkKICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0U2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmplY3QoKSk7Ci0gICAg
ICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAg
IHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBhY2Nlc3Nvciwg
YXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIEpTVmFsdWUgbmV3VmFsdWUgPSBqc1VuZGVmaW5lZCgpOwpAQCAtNjgzLDEw
ICsxNTU2LDE5IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAg
ICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSkKICAgICAgICAgYWNjZXNz
b3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iuc2V0dGVyT2Jq
ZWN0KCkpOwogCi0gICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CisgICAg
dGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBh
dHRyaWJ1dGVzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3RNYXlCZUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICB1bnNpZ25lZCBhc0luZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoYXNJbmRleCA9PSBQcm9wZXJ0eU5hbWU6Ok5v
dEFuSW5kZXgpCisgICAgICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgcHV0RGlyZWN0SW5kZXgoZXhlYywgYXNJ
bmRleCwgdmFsdWUpOworfQorCiBjbGFzcyBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHsKIHB1Ymxp
YzoKICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTcwNCwy
NiArMTU4NiwyNiBAQCBwcml2YXRlOgogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwog
fTsKIAotYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCitib29sIEpTT2JqZWN0Ojpk
ZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQogewogICAgIC8vIFRyYWNrIG9uIHRoZSBnbG9iYWxkYXRhIHRoYXQgd2UncmUgaW4g
ZGVmaW5lIHByb3BlcnR5LgogICAgIC8vIEN1cnJlbnRseSBEZWZpbmVPd25Qcm9wZXJ0eSB1c2Vz
IGRlbGV0ZSB0byByZW1vdmUgcHJvcGVydGllcyB3aGVuIHRoZXkgYXJlIGJlaW5nIHJlcGxhY2Vk
CiAgICAgLy8gKHBhcnRpY3VsYXJseSB3aGVuIGNoYW5naW5nIGF0dHJpYnV0ZXMpLCBob3dldmVy
IGRlbGV0ZSB3b24ndCBhbGxvdyBub24tY29uZmlndXJhYmxlIChpLmUuCiAgICAgLy8gRG9udERl
bGV0ZSkgcHJvcGVydGllcyB0byBiZSBkZWxldGVkLiBGb3Igbm93LCB3ZSBjYW4gdXNlIHRoaXMg
ZmxhZyB0byBtYWtlIHRoaXMgd29yay4KICAgICBEZWZpbmVPd25Qcm9wZXJ0eVNjb3BlIHNjb3Bl
KGV4ZWMpOwotCisgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5ldyBwcm9wZXJ0eSB3ZSBjYW4g
anVzdCBwdXQgaXQgb24gbm9ybWFsbHkKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsK
LSAgICBpZiAoIW9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KSkgeworICAgIGlmICghbWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgY3VycmVudCkpIHsKICAgICAgICAgLy8gdW5sZXNzIGV4dGVuc2lvbnMgYXJlIHByZXZlbnRl
ZCEKLSAgICAgICAgaWYgKCFvYmplY3QtPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIGlmICgh
aXNFeHRlbnNpYmxlKCkpIHsKICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5v
dCBleHRlbnNpYmxlLiIpKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIG9sZERlc2NyaXB0b3I7CiAgICAgICAgIG9sZERl
c2NyaXB0b3Iuc2V0VmFsdWUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBwdXREZXNj
cmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXMoKSwgb2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiBwdXREZXNjcmlw
dG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRy
aWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOwogICAgIH0KIAogICAgIGlmIChkZXNjcmlwdG9yLmlz
RW1wdHkoKSkKQEAgLTc0OSw4ICsxNjMxLDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplYwogICAgIC8vIEEgZ2VuZXJpYyBkZXNjcmlwdG9yIGlzIHNpbXBseSBjaGFu
Z2luZyB0aGUgYXR0cmlidXRlcyBvZiBhbiBleGlzdGluZyBwcm9wZXJ0eQogICAgIGlmIChkZXNj
cmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQuYXR0
cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7Ci0gICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50
KSwgY3VycmVudCk7CisgICAgICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0
aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0
b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJp
YnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzYyLDggKzE2NDQsOCBAQCBib29sIEpTT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRv
IGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KSkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
Y3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRv
cihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKICAgICB9CiAKICAgICAv
LyBDaGFuZ2luZyB0aGUgdmFsdWUgYW5kIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3RpbmcgcHJvcGVy
dHkKQEAgLTc4NCw4ICsxNjY2LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplYwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChk
ZXNjcmlwdG9yKSAmJiAhZGVzY3JpcHRvci52YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVj
LCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVz
T3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKICAgICB9CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIG9mIGFu
IGV4aXN0aW5nIGFjY2Vzc29yIHByb3BlcnR5CkBAIC04MDIsNyArMTY4NCw3IEBAIGJvb2wgSlNP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICBKU1ZhbHVlIGFjY2Vzc29yID0gb2JqZWN0LT5nZXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgYWNj
ZXNzb3IgPSBnZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmICghYWNjZXNzb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBHZXR0ZXJTZXR0ZXIq
IGdldHRlclNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKTsKQEAgLTgxMiwxMiArMTY5
NCwzNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAgICAgICAg
IGdldHRlclNldHRlci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZGVzY3JpcHRvci5n
ZXR0ZXJPYmplY3QoKSk7CiAgICAgaWYgKGN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0
b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICBtZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIHVuc2ln
bmVkIGF0dHJzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVu
dCk7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZSwgZ2V0dGVyU2V0dGVyLCBhdHRycyB8IEFjY2Vzc29yKTsKKyAgICBwdXREaXJl
Y3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBBY2Nl
c3Nvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQoreworICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgaW5kZXgsIHRoZW4gdXNlIHRoZSBp
bmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
IHsKKyAgICAgICAgLy8gYy4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
dGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45
KSBvbiBBIHBhc3NpbmcgUCwgRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAg
Ly8gZC4gUmVqZWN0IGlmIHN1Y2NlZWRlZCBpcyBmYWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5k
ZXggPj0gb2xkTGVuCisgICAgICAgIC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRv
IGluZGV4ICsgMS4KKyAgICAgICAgLy8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3Ro
Iiwgb2xkTGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3
YXlzIHJldHVybiB0cnVlLgorICAgICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0
dXJuIG9iamVjdC0+ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KGV4ZWMsIGluZGV4LCBkZXNjcmlw
dG9yLCB0aHJvd0V4Y2VwdGlvbik7CisgICAgfQorICAgIAorICAgIHJldHVybiBvYmplY3QtPmRl
ZmluZU93bk5vbkluZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0
aHJvd0V4Y2VwdGlvbik7Cit9CisKK2Jvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdFNs
b3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzLCBleGVjLCBpLCBzbG90KTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQot
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNyArMjQsMjIg
QEAKICNkZWZpbmUgSlNPYmplY3RfaAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUg
IkFycmF5Q29udmVudGlvbnMuaCIKKyNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKKyNpbmNsdWRl
ICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25J
ZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5o
IgorI2luY2x1ZGUgIlB1dERpcmVjdEluZGV4TW9kZS5oIgogI2luY2x1ZGUgIlB1dFByb3BlcnR5
U2xvdC5oIgogCi0jaW5jbHVkZSAiU3RvcmFnZUJhcnJpZXIuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzksNiArODQsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFjY2Vzc29yICAgICA9IDEgPDwgNSwgIC8vIHByb3BlcnR5IGlzIGEgZ2V0
dGVyL3NldHRlcgogICAgIH07CiAKKyAgICBDT01QSUxFX0FTU0VSVChOb25lIDwgRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRP
bmx5X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJU
KERvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3dfRmly
c3RJbnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRG9udERlbGV0ZSA8IEZp
cnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0
dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoRnVuY3Rpb24gPCBGaXJzdEludGVybmFsQXR0
cmlidXRlLCBGdW5jdGlvbl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKKyAgICBD
T01QSUxFX0FTU0VSVChBY2Nlc3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFjY2Vzc29y
X2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworCiAgICAgY2xhc3MgSlNGaW5hbE9i
amVjdDsKIAogICAgIGNsYXNzIEpTT2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CkBAIC05Niw3ICsx
MDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKLQorICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7
CkBAIC0xMjAsMTggKzEzMiwxOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBh
bGxvd3NBY2Nlc3NGcm9tKEV4ZWNTdGF0ZSopOwogCisgICAgICAgIHVuc2lnbmVkIGdldEFycmF5
TGVuZ3RoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAg
ICAgICBjYXNlIEFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5sZW5ndGgoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGdldFZlY3Rv
ckxlbmd0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmlu
ZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5OgorICAgICAgICAgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2Ug
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICAKKyAgICAgICAgLy8gVGhp
cyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CisgICAgICAgIC8vICAtIHRo
ZSBwcm90b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAorICAgICAgICAvLyAgLSBhY2Nlc3Nv
cnMgYXJlIG5vdCBjYWxsZWQuCisgICAgICAgIC8vICAtIGl0IHdpbGwgaWdub3JlIGV4dGVuc2li
aWxpdHkgYW5kIHJlYWQtb25seSBwcm9wZXJ0aWVzIGlmIFB1dERpcmVjdEluZGV4TGlrZVB1dERp
cmVjdCBpcyBwYXNzZWQgYXMgdGhlIG1vZGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAgLy8gVGhp
cyBtZXRob2QgY3JlYXRlcyBhIHByb3BlcnR5IHdpdGggYXR0cmlidXRlcyB3cml0YWJsZSwgZW51
bWVyYWJsZSBhbmQgY29uZmlndXJhYmxlIGFsbCBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgYm9vbCBw
dXREaXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlcyAmJiBjYW5TZXRJbmRleFF1
aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIHNldEluZGV4UXVpY2tseShl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG1vZGUpOworICAgICAgICB9CisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQSBub24tdGhyb3dpbmcgdmVyc2lvbiBvZiBwdXREaXJlY3QgYW5kIHB1dERp
cmVjdEluZGV4LgorICAgICAgICB2b2lkIHB1dERpcmVjdE1heUJlSW5kZXgoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgY2FuR2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5Ogor
ICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFs
dWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNh
blNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25B
cnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
aSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgICAgICBpZiAo
IXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgICAgICArK3N0b3JhZ2UtPm1f
bnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IHN0b3JhZ2Ut
Pmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGkg
KyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeC5zZXQoZ2xvYmFsRGF0
YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRpYWxp
emVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdikK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisjaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBhcmUgaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgorICAgICAgICAg
ICAgICAgIEFTU0VSVChpID09IHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCk7CisgICAg
ICAgICAgICAgICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBzZXQgbV9udW1WYWx1ZXNJblZl
Y3RvciB0byB0aGUgaW5pdGlhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB3ZSBk
byBub3QgdHJ5IHRvIGluaXRpYWxpemUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRp
ZXMuCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRl
eCA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIHN0b3Jh
Z2UtPm1faW5pdGlhbGl6YXRpb25JbmRleCsrOworI2VuZGlmCisgICAgICAgICAgICAgICAgQVNT
RVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGkgPCBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGNvbXBsZXRlSW5pdGlhbGl6YXRpb24odW5zaWduZWQgbmV3TGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgaW5pdGlhbGl6ZWQgYXMgbWVueSBwcm9w
ZXJ0aWVzIGFzIHdlIHRoaW5rIHdlIGhhdmUuCisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KHN0b3JhZ2UpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdM
ZW5ndGggPT0gc3RvcmFnZS0+bGVuZ3RoKCkpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZ
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIHByb3ByZXRpZXMg
aW5pdGlhbGl6ZWQgbWF0Y2hlcyB0aGUgaW5pdGlhbExlbmd0aC4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4ID09IG1fc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3Rvcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0
SW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBpblNwYXJzZUluZGV4aW5nTW9kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIC8vIHB1dERpcmVjdCBpcyBlZmZlY3RpdmVseSBhbiB1bmNoZWNr
ZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CiAgICAgICAgIC8vICAtIHRoZSBwcm90
b3R5cGUgY2hhaW4gaXMgbm90IGNvbnN1bHRlZAogICAgICAgICAvLyAgLSBhY2Nlc3NvcnMgYXJl
IG5vdCBjYWxsZWQuCiAgICAgICAgIC8vICAtIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXNwZWN0ZWQg
KGFmdGVyIHRoZSBjYWxsIHRoZSBwcm9wZXJ0eSB3aWxsIGV4aXN0IHdpdGggdGhlIGdpdmVuIGF0
dHJpYnV0ZXMpCisgICAgICAgIC8vICAtIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8g
bm90IGJlIGFuIGluZGV4LgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBw
dXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3QoSlNHbG9i
YWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCk7
CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzID0gMCk7Ci0gICAgICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoSlNHbG9iYWxE
YXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgdm9pZCBwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiAgICAgICAgIGJvb2wgcHJvcGVydHlJc0VudW1l
cmFibGUoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKSBjb25zdDsK
IApAQCAtMTQ3LDYgKzMzNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBoYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpT
VmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwpAQCAtMjAzLDggKzM5NCwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX291dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0K
LSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX291
dE9mTGluZVN0b3JhZ2UuZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgICAgICBDb25z
dFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRP
ZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9
CiAKICAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7CkBAIC0yMjcsNyAr
NDIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0SW5JbmxpbmVT
dG9yYWdlIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKQogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG9mZnNldEluSW5saW5lU3RvcmFnZTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2Nh
dGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgLSAxKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCkt
PnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KQEAgLTI2NSwyMSArNDU5LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlz
U2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlz
U2VhbGVkKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNGcm96ZW4oZ2xvYmFsRGF0YSk7
IH0KICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+aXNF
eHRlbnNpYmxlKCk7IH0KKyAgICAgICAgYm9vbCBpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFpc0V4dGVuc2libGUoKQorICAgICAgICAgICAg
ICAgIHx8IHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKTsKKyAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgc3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0
aWNGdW5jdGlvbnNSZWlmaWVkKCk7IH0KICAgICAgICAgdm9pZCByZWlmeVN0YXRpY0Z1bmN0aW9u
c0ZvckRlbGV0ZShFeGVjU3RhdGUqIGV4ZWMpOwogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IFByb3BlcnR5U3RvcmFnZSBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmLCBzaXpl
X3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgICAgICB2b2lkIHNldE91dE9mTGluZVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlTdG9yYWdlLCBTdHJ1Y3R1cmUqKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShKU0ds
b2JhbERhdGEmLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgICAgICB2b2lk
IHNldEJ1dHRlcmZseShKU0dsb2JhbERhdGEmLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICAgICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5
Kik7IC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcy4KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBvbGRDYXBhY2l0eSwgU3RydWN0dXJlKik7CiAgICAgICAg
IHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKIAotICAgICAgICB2b2lkKiBhZGRyZXNzT2ZPdXRPZkxpbmVT
dG9yYWdlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZtX291dE9mTGluZVN0b3Jh
Z2U7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0dXJl
KCktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKGdsb2JhbERhdGEsIHRoaXMpOwpAQCAtMjkz
LDcgKzQ4OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKLSAgICAgICAgc3RhdGlj
IHNpemVfdCBvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU09iamVjdCwgbV9idXR0ZXJmbHkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkKiBidXR0ZXJmbHlBZGRyZXNzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICZtX2J1dHRlcmZseTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTMxNiwxNCAr
NTIwLDc4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFRvIGluc3RhbnRpYXRlIG9i
amVjdHMgeW91IGxpa2VseSB3YW50IEpTRmluYWxPYmplY3QsIGJlbG93LgogICAgICAgICAvLyBU
byBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwg
YmVsb3cuCi0gICAgICAgIEpTT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAg
ICAgICBKU09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0SW5oZXJpdG9ySUQoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICByZW1vdmVEaXJlY3QoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5tX2luaGVyaXRvcklES2V5KTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgdm9pZCB2aXNpdE91dE9mTGluZVN0b3JhZ2UoU2xvdFZpc2l0b3ImLCBQcm9wZXJ0eVN0
b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworCisgICAgICAg
IC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdo
ZXJlIGl0IGhhcyBhcnJheQorICAgICAgICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90
aGVyd2lzZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpIHwgSGFzQXJy
YXlTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2Fu
dCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQorICAgICAg
ICAvLyBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgorICAg
ICAgICBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZU9yWmVybygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFy
cmF5IHN0b3JhZ2UuIFVzZQorICAgICAgICAvLyB0aGlzIGlmIHlvdSdyZSBhYm91dCB0byBwZXJm
b3JtIGFjdGlvbnMgdGhhdCB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoZQorICAgICAgICAvLyBvYmpl
Y3QgdG8gYmUgY29udmVydGVkIHRvIGhhdmUgYXJyYXkgc3RvcmFnZSwgaWYgaXQgZGlkbid0IGhh
dmUgaXQKKyAgICAgICAgLy8gYWxyZWFkeS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVB
cnJheVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBOb25BcnJheToK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUlu
aXRpYWxBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEm
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5U3RvcmFnZShKU0dsb2JhbERhdGEmKTsKKyAgICAg
ICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYpOworICAgICAgICAKKyAgICAg
ICAgYm9vbCBkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CisKKyAgICAgICAg
ZW51bSBDb25zaXN0ZW5jeUNoZWNrVHlwZSB7IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2ssIERlc3Ry
dWN0b3JDb25zaXN0ZW5jeUNoZWNrLCBTb3J0Q29uc2lzdGVuY3lDaGVjayB9OworI2lmICFDSEVD
S19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICB2b2lkIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShDb25zaXN0ZW5jeUNoZWNrVHlwZSA9IE5vcm1hbENvbnNpc3RlbmN5Q2hlY2spIHsgfQorI2Vs
c2UKKyAgICAgICAgdm9pZCBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVj
a1R5cGUgPSBOb3JtYWxDb25zaXN0ZW5jeUNoZWNrKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cs
IEFycmF5U3RvcmFnZSopOworCisgICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNH
bG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXAoKTsKKyAgICAgICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHko
RXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNl
cHRpb24pOworICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBhbGxvY2F0ZVNwYXJzZUluZGV4
TWFwKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTMzNiwxNyArNjA0LDMzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsK
ICAgICAgICAgCisgICAgICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoSlNHbG9iYWxEYXRhJiwgQXJyYXlTdG9y
YWdlKik7CisgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgICAgICBib29s
IHB1dERpcmVjdEludGVybmFsKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7CiAKICAgICAgICAgYm9v
bCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJv
cGVydHlTbG90KFByb3BlcnR5U2xvdCYsIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0
aW9uKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYsIFByb3BlcnR5T2Zmc2V0KTsKIAogICAgICAgICBjb25zdCBIYXNo
RW50cnkqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNv
bnN0OwogICAgICAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUq
LCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlw
dG9yJiBvbGQpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7CisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5n
dGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlLCBBcnJheVN0b3Jh
Z2UqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSk7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxl
bmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Cisg
ICAgICAgIHVuc2lnbmVkIGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3Ro
KTsKIAotICAgICAgICBTdG9yYWdlQmFycmllciBtX291dE9mTGluZVN0b3JhZ2U7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvdyhFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgICAgIAogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCogbV9wYWRkaW5nOwogI2VuZGlm
CiAgICAgfTsKQEAgLTM3Miw4ICs2NTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU05vbkZpbmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6
IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgZXhwbGljaXQgSlNOb25G
aW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IDApCisgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAt
NDU2LDExICs3NDAsNiBAQCBpbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
CiAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0ZpbmFsT2JqZWN0LCBtX2lubGluZVN0b3Jh
Z2UpOwogfQogCi1pbmxpbmUgc2l6ZV90IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKQotewotICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fb3V0T2ZMaW5l
U3RvcmFnZSk7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbE9iamVjdCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA9PSBHbG9i
YWxPYmplY3RUeXBlOwpAQCAtNDkxLDE4ICs3NzAsMTcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OmlzR2xvYmFsVGhpcygpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50
eXBlKCkgPT0gR2xvYmFsVGhpc1R5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRP
dXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNl
dEJ1dHRlcmZseShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBp
ZiAoIXN0b3JhZ2UpIHsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOwotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6ZSgpKTsKLSAgICB9Cisg
ICAgQVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
JiYgIWhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSk7CiAgICAg
c2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgbV9vdXRPZkxpbmVTdG9y
YWdlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdG9yYWdlKTsKKyAgICBtX2J1dHRlcmZseSA9IGJ1
dHRlcmZseTsKK30KKworaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK3sKKyAgICBtX2J1dHRlcmZs
eSA9IGJ1dHRlcmZseTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNTQwLDkgKzgxOCw5
IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4g
YXNPYmplY3QodmFsdWUuYXNDZWxsKCkpOwogfQogCi1pbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitpbmxpbmUg
SlNPYmplY3Q6OkpTT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSkKLSAgICAsIG1fb3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCB0aGlzLCAw
KQorICAgICwgbV9idXR0ZXJmbHkoYnV0dGVyZmx5KQogewogfQogCkBAIC01OTAsMTUgKzg2OCwx
NyBAQCBpbmxpbmUgSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdChFCiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbiA9IGdldERpcmVjdExv
Y2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBpZiAo
c3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2NhdGlvbi0+aXNH
ZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwg
bG9jYXRpb24pOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChMSUtFTFkoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGlyZWN0T2Zm
c2V0KG9mZnNldCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCisgICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIG9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgbG9jYXRpb24tPmdldCgpLCBvZmZzZXRGb3JMb2NhdGlvbihs
b2NhdGlvbikpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKIC8vIEl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFy
Z2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLApAQCAtNjg0LDYgKzk2NCw3IEBAIGlu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBBU1NFUlQodmFsdWUp
OwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2
YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTsKIAogICAgIGlmIChzdHJ1Y3R1cmUo
KS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
CkBAIC03MTIsMTEgKzk5MywxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwoCiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNFeHRlbnNpYmxl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUHJvcGVydHlTdG9yYWdl
IG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2ls
bEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dl
c3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAgc2V0T3V0T2ZM
aW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUoKSk7CisgICAgICAg
IHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKIAog
ICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CkBAIC03MzAsMTMgKzEwMTEsMTMgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgp
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsK
LSAgICAgICAgUHJvcGVydHlTdG9yYWdlIG5ld1N0b3JhZ2UgPSBvdXRPZkxpbmVTdG9yYWdlKCk7
IAorICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAg
ICBpZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkK
LSAgICAgICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRh
LCBjdXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBj
dXJyZW50Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAKICAgICAg
ICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxE
YXRhLCBuZXdTdG9yYWdlLCBzdHJ1Y3R1cmUpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFs
RGF0YSwgbmV3QnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwogICAgICAgICBwdXREaXJlY3RPZmZzZXQo
Z2xvYmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJv
cGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5
IGNhY2hhYmxlLAogICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxl
IHN0YXRlLgpAQCAtODAzLDkgKzEwODQsOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3Ry
dWN0dXJlQW5kUmVhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUHJvcGVydHlT
dG9yYWdlIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKKyAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKAogICAgICAgICBnbG9iYWxEYXRh
LCBvbGRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBz
ZXRPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG5ld1N0b3JhZ2UsIG5ld1N0cnVjdHVyZSk7
CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgbmV3U3RydWN0dXJl
KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVT
dG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSkKQEAgLTgzOSwxMSArMTEyMCwxMSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0KEpTR2xvYmFsCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VS
VCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwot
ICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOworICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHk7CiAgICAgaWYgKHN0cnVjdHVy
ZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3U3RvcmFnZSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFj
aXR5KCkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVl
KSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdTdG9yYWdlLCBzdHJ1
Y3R1cmUoKSk7CisgICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3Ry
dWN0dXJlKCkpOwogICAgIHB1dERpcmVjdE9mZnNldChnbG9iYWxEYXRhLCBvZmZzZXQsIHZhbHVl
KTsKIH0KIApAQCAtOTM1LDYgKzEyMTYsMTEgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciBSZWdp
c3Rlcjo6d2l0aENhbAogICAgIHJldHVybiByOwogfQogCitpbmxpbmUgc2l6ZV90IG9mZnNldElu
QnV0dGVyZmx5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gb2Zmc2V0SW5P
dXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKyBCdXR0ZXJmbHk6OmluZGV4T2ZQcm9wZXJ0eVN0b3Jh
Z2UoKTsKK30KKwogLy8gVGhpcyBpcyBhIGhlbHBlciBmb3IgcGF0Y2hpbmcgY29kZSB3aGVyZSB5
b3Ugd2FudCB0byBlbWl0IGEgbG9hZCBvciBzdG9yZSBhbmQKIC8vIHRoZSBiYXNlIGlzOgogLy8g
Rm9yIGlubGluZSBvZmZzZXRzOiBhIHBvaW50ZXIgdG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2Ug
cG9pbnRlci4KQEAgLTk0MiwxNCArMTIyOCwxNCBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyIFJl
Z2lzdGVyOjp3aXRoQ2FsCiBpbmxpbmUgc2l6ZV90IG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3Rv
cmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5lT2Zmc2V0
KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSAtIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSAr
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2Uob2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZs
eShvZmZzZXQpOworICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkg
LSBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
b2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CiAKIGlubGluZSBpbnQgaW5kZXhSZWxh
dGl2ZVRvQmFzZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKGlzT3V0T2ZMaW5l
T2Zmc2V0KG9mZnNldCkpCi0gICAgICAgIHJldHVybiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uo
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQp
ICsgQnV0dGVyZmx5OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7CiAgICAgQVNTRVJUKCEoSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OwogICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7CiB9CkBAIC05
NTcsNyArMTI0Myw3IEBAIGlubGluZSBpbnQgaW5kZXhSZWxhdGl2ZVRvQmFzZShQcm9wZXJ0eU8K
IGlubGluZSBpbnQgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgICAgICByZXR1cm4gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICsgQnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpOwog
ICAgIHJldHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNiArNjcsOSBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAg
ICAgaWYgKG8tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMoKSkKICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CiAgICAgCisgICAg
aWYgKGhhc0luZGV4aW5nSGVhZGVyKG8tPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkpCisg
ICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOworICAgIAogICAgIHNpemVfdCBj
b3VudCA9IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIG8pOwogICAgIFN0cnVjdHVyZUNo
YWluKiBzdHJ1Y3R1cmVDaGFpbiA9IG8tPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbihleGVj
KTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogc3RydWN0dXJlID0gc3RydWN0dXJlQ2hh
aW4tPmhlYWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpT
U3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwogICAgIFN5bWJv
bFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5l
bmQoKTsKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUlu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJ
bmZvLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UgPSAxIDw8IDM7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIElzRW52aXJvbm1lbnRS
ZWNvcmQgPSAxIDw8IDQ7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCA9IDEgPDwgNTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiA9IDEgPDwgNjsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA4OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvID0gMSA8PCA2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuID0gMSA8PCA3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBPdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzID0gMSA8PCA4OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDk7CiAKICAgICBjbGFzcyBUeXBlSW5mbyB7
CiAgICAgcHVibGljOgpAQCAtNzUsOCArNzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBvdmVycmlkZXNIYXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEo
T3ZlcnJpZGVzSGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgaW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEoSW1wbGVtZW50c0RlZmF1
bHRIYXNJbnN0YW5jZSk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCk7IH0KKyAgICAgICAgYm9vbCBpbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
KTsgfQogICAgICAgICBib29sIG92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pOyB9Ci0gICAgICAgIGJvb2wg
b3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczEo
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyk7IH0KKyAgICAgICAgYm9vbCBvdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMihPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzKTsgfQogICAgICAgICBib29sIHByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczIoUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKTsg
fQogCiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgZmxhZ3NPZmZzZXQoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiTGl0ZXJhbFBhcnNlci5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5l
TWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkxleGVyLmgi
CkBAIC02NDAsNyArNjQyLDEzIEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBh
cnNlKFAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRG9QYXJzZU9iamVjdEVuZEV4
cHJlc3Npb246CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNPYmplY3Qob2JqZWN0
U3RhY2subGFzdCgpKS0+cHV0RGlyZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudGlmaWVy
U3RhY2subGFzdCgpLCBsYXN0VmFsdWUpOworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOworICAgICAgICAgICAgICAgIFByb3Bl
cnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaSA9IGlkZW50LmFzSW5kZXgoKTsKKyAgICAgICAgICAgICAgICBpZiAoaSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0
RGlyZWN0SW5kZXgobV9leGVjLCBpLCBsYXN0VmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT5nbG9iYWxEYXRh
KCksIGlkZW50LCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCku
dHlwZSA9PSBUb2tDb21tYSkKICAgICAgICAgICAgICAgICAgICAgZ290byBkb1BhcnNlT2JqZWN0
U3RhcnRFeHByZXNzaW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYgQEAg
QVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChPYmplY3RQcm90b3R5cAogCiBPYmplY3RQcm90b3R5
cGU6Ok9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3R1Y3R1cmUp
CiAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3R1Y3R1cmUpCi0g
ICAgLCBtX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyh0cnVlKQogewogfQogCkBAIC03
NywzNCArNzYsNiBAQCB2b2lkIE9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oSlNHCiAg
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAotdm9pZCBPYmplY3RQcm90b3R5cGU6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIE9iamVj
dFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxsKTsK
LSAgICBCYXNlOjpwdXQoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Ci0K
LSAgICBpZiAodGhpc09iamVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgJiYg
cHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAg
ICAgIHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzID0gZmFsc2U7
Ci19Ci0KLWJvb2wgT2JqZWN0UHJvdG90eXBlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKLXsKLSAgICBPYmpl
Y3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2JqZWN0UHJvdG90eXBlKj4ob2JqZWN0
KTsKLSAgICBib29sIHJlc3VsdCA9IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Ci0KLSAgICBpZiAodGhp
c09iamVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMgJiYgcHJvcGVydHlOYW1l
LmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCi0gICAgICAgIHRoaXNPYmpl
Y3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzID0gZmFsc2U7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgT2JqZWN0UHJvdG90eXBlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PE9iamVjdFByb3RvdHlwZSo+KGNlbGwpOwotICAgIGlmICh0aGlzT2JqZWN0
LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lcykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KIGJvb2wgT2JqZWN0UHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xvdCkKIHsKICAgICByZXR1cm4gZ2V0
U3RhdGljRnVuY3Rpb25TbG90PEpTTm9uRmluYWxPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6b2Jq
ZWN0UHJvdG90eXBlVGFibGUoZXhlYyksIGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxsKSwg
cHJvcGVydHlOYW1lLCBzbG90KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMTQgKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBP
YmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7Ci0KICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLQotICAgICAgICBib29sIG1faGFz
Tm9Qcm9wZXJ0aWVzV2l0aFVJbnQzMk5hbWVzOwogICAgIH07CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU9mZnNldC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4
LDcgQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNl
dCkpOwotICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgLSBmaXJzdE91
dE9mTGluZU9mZnNldCkgLSAyOworICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihv
ZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldCkgLSAxOwogfQogCiBpbmxpbmUgc2l6ZV90IG9m
ZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2Uu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUHJvcGVydHlTdG9yYWdlX2gKKyNkZWZpbmUgUHJvcGVydHlTdG9yYWdlX2gKKworI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Cit0eXBlZGVmIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFByb3BlcnR5U3RvcmFnZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhN
b2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQdXREaXJlY3RJbmRleE1v
ZGVfaAorI2RlZmluZSBQdXREaXJlY3RJbmRleE1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBQdXREaXJlY3RJbmRleE1vZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QsIFB1
dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXREaXJlY3RJbmRleE1vZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1
ICsyNiwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNB
cnJheS5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUg
IlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCisKIG5hbWVzcGFjZSBKU0Mgewog
CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJlZ0V4cE1hdGNoZXNBcnJheSk7CiAKIGNvbnN0
IENsYXNzSW5mbyBSZWdFeHBNYXRjaGVzQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNBcnJh
eTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJlZ0V4cE1hdGNoZXNBcnJheSl9
OwogCitSZWdFeHBNYXRjaGVzQXJyYXk6OlJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCByZXN1
bHQpCisgICAgOiBKU0FycmF5KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hl
c0FycmF5U3RydWN0dXJlKCksIGJ1dHRlcmZseSkKKyAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAg
ICAsIG1fc3RhdGUoUmVpZmllZE5vbmUpCit7CisgICAgbV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgaW5wdXQpOworICAgIG1fcmVnRXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZWdFeHAp
OworfQorCitSZWdFeHBNYXRjaGVzQXJyYXkqIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1
bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChyZXN1bHQpOworICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IGNyZWF0ZUFycmF5QnV0dGVyZmx5KGdsb2JhbERhdGEsIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMo
KSArIDEpOworICAgIFJlZ0V4cE1hdGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1h
dGNoZXNBcnJheShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgaW5wdXQsIHJlZ0V4cCwgcmVzdWx0KTsKKyAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCiB2b2lkIFJlZ0V4cE1hdGNoZXNB
cnJheTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG1fcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiB9CiAKIHZvaWQg
UmVnRXhwTWF0Y2hlc0FycmF5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDI4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE1hdGNo
ZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWdFeHBN
YXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwLCBNYXRjaFJlc3VsdCBy
ZXN1bHQpCi0gICAgICAgICAgICA6IEpTQXJyYXkoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgICwgbV9yZXN1bHQocmVz
dWx0KQotICAgICAgICAgICAgLCBtX3N0YXRlKFJlaWZpZWROb25lKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2lucHV0LnNldChnbG9iYWxEYXRhLCB0aGlzLCBpbnB1dCk7Ci0gICAgICAgICAg
ICBtX3JlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKLSAgICAgICAgfQorICAg
ICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxEYXRhJiwgQnV0dGVyZmx5KiwgSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKIAogICAgICAgICBl
bnVtIFJlaWZpZWRTdGF0ZSB7IFJlaWZpZWROb25lLCBSZWlmaWVkTWF0Y2gsIFJlaWZpZWRBbGwg
fTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7CiAKLSAgICAg
ICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKLSAgICAgICAgICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgIFJlZ0V4cE1h
dGNoZXNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRj
aGVzQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE1hdGNoZXNBcnJheShnbG9iYWxEYXRh
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7Ci0g
ICAgICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAg
ICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNB
cnJheSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgUmVnRXhwKiwgTWF0Y2hSZXN1bHQp
OwogCiAgICAgICAgIEpTU3RyaW5nKiBsZWZ0Q29udGV4dChFeGVjU3RhdGUqKTsKICAgICAgICAg
SlNTdHJpbmcqIHJpZ2h0Q29udGV4dChFeGVjU3RhdGUqKTsKQEAgLTU4LDcgKzQ0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtMTEzLDEx
ICsxMTUsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwog
fQogCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYg
KG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIEJh
c2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgUmVqZWN0X2gKKyNkZWZpbmUgUmVqZWN0X2gKKworI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUg
Ym9vbCByZWplY3QoRXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQoreworICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgbWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlamVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKworI2luY2x1ZGUgIkNsYXNzSW5mby5o
IgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6c19pbmZv
ID0geyAiU3BhcnNlQXJyYXlWYWx1ZU1hcCIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
U3BhcnNlQXJyYXlWYWx1ZU1hcCkgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3BhcnNl
QXJyYXlWYWx1ZU1hcF9oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorCisjaW5jbHVk
ZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIlByb3BlcnR5
RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlB1dERpcmVjdEluZGV4TW9kZS5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRy
eSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4geworICAgIHR5cGVkZWYgV3JpdGVCYXJy
aWVyPFVua25vd24+IEJhc2U7CisKKyAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVz
KDApIHsgfQorCisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBjb25zdDsK
KyAgICB2b2lkIGdldChQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICB2b2lkIGdldChQcm9wZXJ0
eURlc2NyaXB0b3ImKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Cit9OworCitjbGFzcyBTcGFyc2VBcnJheVZh
bHVlTWFwIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKyAgICAKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VB
cnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKKworICAgIGVudW0gRmxhZ3MgeworICAgICAg
ICBOb3JtYWwgPSAwLAorICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgTGVuZ3RoSXNS
ZWFkT25seSA9IDIsCisgICAgfTsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAoSlNHbG9iYWxE
YXRhJik7CisgICAgflNwYXJzZUFycmF5VmFsdWVNYXAoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJl
RmxhZ3M7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHR5cGVkZWYgTWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAg
ICB0eXBlZGVmIE1hcDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRl
ZiBNYXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7CisKKyAgICBzdGF0aWMgU3BhcnNlQXJyYXlWYWx1
ZU1hcCogY3JlYXRlKEpTR2xvYmFsRGF0YSYpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgYm9vbCBzcGFyc2VNb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZsYWdzICYgU3Bh
cnNlTW9kZTsKKyAgICB9CisKKyAgICB2b2lkIHNldFNwYXJzZU1vZGUoKQorICAgIHsKKyAgICAg
ICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Cisg
ICAgfQorCisgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2ZsYWdzICYgTGVuZ3RoSXNSZWFkT25seTsKKyAgICB9CisKKyAgICB2b2lkIHNldExlbmd0
aElzUmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdz
PihtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFkT25seSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0
aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwCisgICAgdm9pZCBwdXRFbnRy
eShFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBib29sIHB1dERpcmVjdChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVk
LCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUpOworICAg
IEFkZFJlc3VsdCBhZGQoSlNPYmplY3QqLCB1bnNpZ25lZCk7CisgICAgaXRlcmF0b3IgZmluZCh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkpOyB9CisgICAgLy8gVGhpcyBzaG91bGQg
QVNTRVJUIHRoZSByZW1vdmUgaXMgdmFsaWQgKGNoZWNrIHRoZSByZXN1bHQgb2YgdGhlIGZpbmQp
LgorICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KKyAg
ICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBkbyBub3QgbXV0YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbWFwLgorICAg
IGl0ZXJhdG9yIG5vdEZvdW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRh
aW5zKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNvbnRhaW5zKGkpOyB9CisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KKyAgICAvLyBPbmx5
IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCisgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CisgICAgY29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBNYXAg
bV9tYXA7CisgICAgRmxhZ3MgbV9mbGFnczsKKyAgICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZhbHVl
TWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElu
bGluZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTcGFyc2VB
cnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisjZGVmaW5lIFNwYXJzZUFycmF5VmFsdWVNYXBJ
bmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUgIlJl
amVjdC5oIgorI2luY2x1ZGUgIlNwYXJzZUFycmF5VmFsdWVNYXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjpTcGFyc2VBcnJheVZhbHVlTWFwKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICA6IEJhc2UoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5zcGFyc2VBcnJheVZhbHVlTWFwU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9mbGFncyhOb3Jt
YWwpCisgICAgLCBtX3JlcG9ydGVkQ2FwYWNpdHkoMCkKK3sKK30KKworaW5saW5lIFNwYXJzZUFy
cmF5VmFsdWVNYXA6On5TcGFyc2VBcnJheVZhbHVlTWFwKCkKK3sKK30KKworaW5saW5lIHZvaWQg
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworfQorCitpbmxp
bmUgU3BhcnNlQXJyYXlWYWx1ZU1hcCogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTcGFyc2VBcnJheVZhbHVlTWFwPihnbG9iYWxE
YXRhLmhlYXApKSBTcGFyc2VBcnJheVZhbHVlTWFwKGdsb2JhbERhdGEpOworICAgIHJlc3VsdC0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8U3BhcnNlQXJyYXlWYWx1ZU1hcCo+KGNlbGwpLT5TcGFyc2VBcnJheVZh
bHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgpOworfQorCitpbmxpbmUgU3RydWN0dXJlKiBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCBTcGFyc2VBcnJh
eVZhbHVlTWFwOjphZGQoSlNPYmplY3QqIGFycmF5LCB1bnNpZ25lZCBpKQoreworICAgIFNwYXJz
ZUFycmF5RW50cnkgZW50cnk7CisgICAgZW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1Vu
ZGVmaW5lZCgpKTsKKworICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoaSwgZW50cnkp
OworICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fbWFwLmNhcGFjaXR5KCk7CisgICAgaWYgKGNhcGFj
aXR5ICE9IG1fcmVwb3J0ZWRDYXBhY2l0eSkgeworICAgICAgICBIZWFwOjpoZWFwKGFycmF5KS0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KChjYXBhY2l0eSAtIG1fcmVwb3J0ZWRDYXBhY2l0eSkgKiAo
c2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAg
ICAgIG1fcmVwb3J0ZWRDYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXRFbnRyeShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBBZGRSZXN1bHQgcmVzdWx0ID0gYWRkKGFycmF5LCBp
KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
OworCisgICAgLy8gVG8gc2F2ZSBhIHNlcGFyYXRlIGZpbmQgJiBhZGQsIHdlIGZpcnN0IGFsd2F5
cyBhZGQgdG8gdGhlIHNwYXJzZSBtYXAuCisgICAgLy8gSW4gdGhlIHVuY29tbW9uIGNhc2UgdGhh
dCB0aGlzIGlzIGEgbmV3IHByb3BlcnR5LCBhbmQgdGhlIGFycmF5IGlzIG5vdAorICAgIC8vIGV4
dGVuc2libGUsIHRoaXMgaXMgbm90IHRoZSByaWdodCB0aGluZyB0byBoYXZlIGRvbmUgLSBzbyBy
ZW1vdmUgYWdhaW4uCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5ICYmICFhcnJheS0+aXNFeHRl
bnNpYmxlKCkpIHsKKyAgICAgICAgcmVtb3ZlKHJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgIGlm
IChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7CisgICAgICAgIGlmIChl
bnRyeS5hdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJv
dykKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZW50cnkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXJyYXksIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWUgYWNjZXNzb3IgPSBlbnRyeS5TcGFy
c2VBcnJheUVudHJ5OjpCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJT
ZXR0ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29y
KS0+c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0ZXIpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gc2V0dGVyLT5tZXRob2RU
YWJsZSgpLT5nZXRDYWxsRGF0YShzZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKKyAgICBjYWxsKGV4ZWMsIHNl
dHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgYXJncyk7Cit9CisKK2lubGluZSBib29s
IFNwYXJzZUFycmF5VmFsdWVNYXA6OnB1dERpcmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
UHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCit7CisgICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChh
cnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3It
PnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJz
dCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIEluIHRoZSB1bmNvbW1vbiBj
YXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKKyAg
ICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25l
IC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChtb2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1
dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7
CisgICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8g
ZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxlLiIpOworICAg
IH0KKworICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIGVudHJ5LnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0eVNsb3QmIHNsb3QpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgpOworICAgIEFTU0VSVCh2YWx1
ZSk7CisKKyAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNldHRlcigpKSkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpT
T2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSktPmdldHRlcigpOworICAgIGlm
ICghZ2V0dGVyKSB7CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0dGVyKTsKK30KKworaW5saW5l
IHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikgY29uc3QKK3sKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoQmFzZTo6Z2V0KCksIGF0
dHJpYnV0ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBCYXNlOjpnZXQoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGlmIChMSUtFTFko
IXJlc3VsdC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAg
IEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAg
ICBpZiAoIWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFi
bGUoKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhl
YywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7
Cit9CisKK2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUo
KSBjb25zdAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIEJhc2U6Omdl
dCgpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogdGhpc09iamVjdCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogdGhpc01hcCA9IGpzQ2FzdDxTcGFyc2VBcnJheVZhbHVlTWFwKj4odGhp
c09iamVjdCk7CisgICAgaXRlcmF0b3IgZW5kID0gdGhpc01hcC0+bV9tYXAuZW5kKCk7CisgICAg
Zm9yIChpdGVyYXRvciBpdCA9IHRoaXNNYXAtPm1fbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9yYWdlQmFycmll
ci5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dG9yYWdlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFN0b3JhZ2VCYXJyaWVyX2gKLSNkZWZpbmUgU3RvcmFnZUJhcnJpZXJfaAot
Ci0jaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIFBy
b3BlcnR5U3RvcmFnZTsKLXR5cGVkZWYgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
Q29uc3RQcm9wZXJ0eVN0b3JhZ2U7Ci0KLWNsYXNzIFN0b3JhZ2VCYXJyaWVyIHsKLXB1YmxpYzoK
LSAgICBlbnVtIFVuY2hlY2tlZFRhZyB7IFVuY2hlY2tlZCB9OwotICAgIFN0b3JhZ2VCYXJyaWVy
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUHJvcGVydHlTdG9yYWdl
IHN0b3JhZ2UpCi0gICAgewotICAgICAgICBzZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0b3JhZ2Up
OwotICAgIH0KLSAgICAKLSAgICBTdG9yYWdlQmFycmllcihQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFn
ZSwgVW5jaGVja2VkVGFnKQotICAgIHsKLSAgICAgICAgc2V0KHN0b3JhZ2UsIFVuY2hlY2tlZCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIFByb3Bl
cnR5U3RvcmFnZSBuZXdTdG9yYWdlKQotICAgIHsKLSAgICAgICAgbV9zdG9yYWdlID0gbmV3U3Rv
cmFnZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoUHJvcGVydHlTdG9yYWdlIG5ld1N0b3Jh
Z2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7
Ci0gICAgfQotICAgIAotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLSAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBvcGVyYXRvci0+KCkgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9zdG9yYWdlOyB9Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiBvcGVyYXRvciooKSB7IHJldHVybiAqbV9zdG9y
YWdlOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlW2ldOyB9Ci0gICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9zdG9yYWdlW2ld
OyB9Ci0gICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zdG9yYWdlOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdlIGdldCgpIHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotCi0gICAgYm9vbCBvcGVyYXRvciEoKSB7IHJldHVybiAhbV9zdG9yYWdlOyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIFByb3BlcnR5U3RvcmFnZSBtX3N0b3JhZ2U7Ci19OwotCi19Ci0KLSNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxNyBAQCB2b2lk
IFN0cmluZ09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgSlNPYmplY3Q6OnB1dChj
ZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAordm9pZCBTdHJpbmdP
YmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBT
dHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgocHJvcGVydHlO
YW1lKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEpTT2JqZWN0OjpwdXRCeUluZGV4KGNlbGwsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKwogYm9vbCBTdHJpbmdPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHRocm93RXhjZXB0aW9uKQogewogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpAQCAtMTMzLDYgKzE0NCwxNCBAQCBib29sIFN0
cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29s
IFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpKQoreworICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpLT5jYW5HZXRJbmRleChpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGkp
OworfQorCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsOCArNTAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKIAogICAgICAg
ICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCkBAIC02Niw3ICs2OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTU3RyaW5nKik7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVj
dHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IEpTV3JhcHBlck9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIFN0cmluZ09iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKIAor
I2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDYWNoZWRDYWxs
LmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRXJy
b3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDkgKzE0OSwxMCBAQCB2b2lk
IFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogI2VuZGlmCiB9CiAKLVN0cnVjdHVyZTo6U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCitTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGds
b2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90eXBlSW5mbyh0eXBl
SW5mbykKKyAgICAsIG1faW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSkKICAgICAsIG1fZ2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbE9iamVjdCwgV3JpdGVCYXJyaWVyPEpTR2xv
YmFsT2JqZWN0Pjo6TWF5QmVOdWxsKQogICAgICwgbV9wcm90b3R5cGUoZ2xvYmFsRGF0YSwgdGhp
cywgcHJvdG90eXBlKQogICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQpAQCAtMTc2LDYgKzE3
Nyw3IEBAIGNvbnN0IENsYXNzSW5mbyBTdHJ1Y3R1cmU6OnNfaW5mbyA9IHsgIlMKIFN0cnVjdHVy
ZTo6U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICA6IEpTQ2VsbChDcmVh
dGluZ0Vhcmx5Q2VsbCkKICAgICAsIG1fdHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuKQorICAgICwgbV9pbmRleGluZ1R5cGUoMCkKICAgICAsIG1fcHJvdG90eXBl
KGdsb2JhbERhdGEsIHRoaXMsIGpzTnVsbCgpKQogICAgICwgbV9jbGFzc0luZm8oJnNfaW5mbykK
ICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykKQEAg
LTE5Nyw2ICsxOTksNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
CiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFN0
cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5z
dHJ1Y3R1cmVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3R5cGVJbmZvKHByZXZpb3VzLT50eXBl
SW5mbygpKQorICAgICwgbV9pbmRleGluZ1R5cGUocHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fcHJvdG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByZXZp
b3VzLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAsIG1fY2xhc3NJbmZvKHByZXZpb3VzLT5tX2Ns
YXNzSW5mbykKICAgICAsIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRj
aGluZykKQEAgLTI1MSw2ICsyNTQsOCBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChKCiAKICAgICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5zaXplKCkgLSAy
OyBpID49IDA7IC0taSkgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOworICAg
ICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3Ry
dWN0dXJlLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1
ZUluUHJldmlvdXMuZ2V0KCkpOwogICAgICAgICBtX3Byb3BlcnR5VGFibGUtPmFkZChlbnRyeSk7
CiAgICAgfQpAQCAtNTAyLDYgKzUwNywzOCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVu
dEV4dGVuc2lvbnNUCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5k
KQoreworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktp
bmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsK
KyAgICAKKyAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkgeworICAgICAgICBBU1NFUlQo
ZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGF0dHJpYnV0ZXMp
OworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgdHJhbnNpdGlvbi0+bV9wcmV2aW91cy5zZXQo
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2F0
dHJpYnV0ZXNJblByZXZpb3VzID0gYXR0cmlidXRlczsKKyAgICB0cmFuc2l0aW9uLT5tX2luZGV4
aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsKKyAgICAKKyAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3Bl
cnR5VGFibGUpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFi
bGUpCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxl
LnJlbGVhc2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3ByZXZp
b3VzKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9i
YWxEYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJv
cGVydHlNYXAoKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJs
ZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgcmV0dXJuIHRyYW5zaXRpb247Cit9
CisKIC8vIEluIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBjYWNoZSB0aGlzIHByb3BlcnR5LgogYm9v
bCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdHJ1Y3R1cmVfaAogCiAjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgpAQCAtNjgs
NyArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENs
YXNzSW5mbyopOworICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSAwKTsKIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCkBAIC0x
MDAsNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHNlYWxUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSop
OwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24o
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIG5v
blByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24pOwogCiAgICAgICAgIGJvb2wgaXNTZWFsZWQoSlNHbG9iYWxEYXRhJik7CiAg
ICAgICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CkBAIC0xNDAsNiArMTQyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0
IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsgcmV0dXJuIG1f
dHlwZUluZm87IH0KICAgICAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJ
bmZvKCkuaXNPYmplY3QoKTsgfQogCisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4aW5nVHlwZSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICAg
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4aW5nVHlwZTsgfQogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICB2
b2lkIHNldEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpIHsgbV9nbG9iYWxPYmplY3Quc2V0KGdsb2JhbERhdGEsIHRoaXMs
IGdsb2JhbE9iamVjdCk7IH0KQEAgLTMzNCw2ICszMzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBt
X2NsYXNzSW5mbyk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZm
X3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmKTsK
ICAgICAgICAgCkBAIC0zNjMsNyArMzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8q
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3Qg
Q2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmKTsKICAgICAgICAgU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVy
ZSopOwogCkBAIC00MTYsNiArNDI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwogCiAg
ICAgICAgIFR5cGVJbmZvIG1fdHlwZUluZm87CisgICAgICAgIEluZGV4aW5nVHlwZSBtX2luZGV4
aW5nVHlwZTsKICAgICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4g
bV9nbG9iYWxPYmplY3Q7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Byb3RvdHlw
ZTsKQEAgLTQ0Nyw3ICs0NTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2hh
c0dldHRlclNldHRlclByb3BlcnRpZXMgOiAxOwogICAgICAgICBib29sIG1faGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA6IDE7CiAgICAgICAgIGJvb2wg
bV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXR0
cmlidXRlc0luUHJldmlvdXMgOiA3OworICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblBy
ZXZpb3VzIDogMjI7CiAgICAgICAgIHVuc2lnbmVkIG1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50IDogMjsKICAgICAgICAgdW5zaWduZWQgbV9wcmV2ZW50RXh0ZW5zaW9ucyA6IDE7CiAgICAg
ICAgIHVuc2lnbmVkIG1fZGlkVHJhbnNpdGlvbiA6IDE7CkBAIC00NjUsMTEgKzQ3NSwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpbmxp
bmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorICAgIGlubGlu
ZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5
cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUpCiAgICAgewogICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGds
b2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXAp
KSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZv
LCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSk7CiAgICAgICAgIHN0cnVjdHVyZS0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAjZGVm
aW5lIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZV9oCiAKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUu
aCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTM3LDYgKzM4LDMwIEBAIG5hbWVzcGFjZSBK
U0MgewogY2xhc3MgSlNDZWxsOwogY2xhc3MgU3RydWN0dXJlOwogCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0
aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8gd2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCisKKy8v
IFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgdXNlZCB0byBpbmRpY2F0ZSB0cmFuc2l0aW9ucyBub3Qg
cmVsYXRlZCB0byBwcm9wZXJ0aWVzLgorLy8gSWYgYW55IG9mIHRoZXNlIGFyZSB1c2VkLCB0aGUg
c3RyaW5nIHBvcnRpb24gb2YgdGhlIGtleSBzaG91bGQgYmUgMC4KK2VudW0gTm9uUHJvcGVydHlU
cmFuc2l0aW9uIHsKKyAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZQorfTsKKworaW5saW5lIHVuc2ln
bmVkIHRvQXR0cmlidXRlcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAg
ICByZXR1cm4gdHJhbnNpdGlvbiArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7Cit9CisKK2lubGlu
ZSBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBvbGRUeXBlLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24p
IHsKKyAgICBjYXNlIEFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gb2xkVHlw
ZSB8IEhhc0FycmF5U3RvcmFnZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG9sZFR5cGU7CisgICAgfQorfQorCiBjbGFzcyBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBVc2luZ1Np
bmdsZVNsb3RGbGFnID0gMTsKIApAQCAtNDQsNyArNjksMTAgQEAgY2xhc3MgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlIHsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8UmVmUHRyPFN0cmluZ0lt
cGw+LCB1bnNpZ25lZD4gS2V5OwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBL
ZXkmIHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwLmZpcnN0LT5leGlzdGluZ0hh
c2goKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IHAuc2Vjb25kOworICAgICAgICAg
ICAgaWYgKHAuZmlyc3QpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHAuZmlyc3QtPmV4aXN0
aW5nSGFzaCgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemlsbGEvanMxXzYvQXJyYXkvcmVncmVzcy0z
MDQ4MjguanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL21vemls
bGEvanMxXzYvQXJyYXkvcmVncmVzcy0zMDQ4MjguanMJKHJldmlzaW9uIDEyNzkzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0
ODI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHJlcG9ydENvbXBhcmUoZXhw
ZWN0LCBhY3R1YWwsIHN1bW1hcnkgKyAKIAogLy8gcmV2ZXJzZQogdmFsdWUgID0gJzEyMyc7Ci1l
eHBlY3QgPSAnMTIzJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24g
dG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5
cGUucmV2ZXJzZS5jYWxsKHZhbHVlKSArICcnOwpAQCAtNzMsNyArNzMsNyBAQCByZXBvcnRDb21w
YXJlKGV4cGVjdCwgYWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHNvcnQKIHZhbHVlICA9ICdjYmEn
OwotZXhwZWN0ID0gJ2NiYSc7CitleHBlY3QgPSAnVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNz
aWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAgYWN0dWFsID0gQXJyYXkucHJv
dG90eXBlLnNvcnQuY2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTExNCw3ICsxMTQsNyBAQCByZXBvcnRD
b21wYXJlKCdhYmMnLCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHVuc2hpZnQKIHZhbHVlICA9
ICdkZWYnOwotZXhwZWN0ID0gNjsKK2V4cGVjdCA9ICJUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBh
c3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuIjsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5w
cm90b3R5cGUudW5zaGlmdC5jYWxsKHZhbHVlLCAnYScsICdiJywgJ2MnKTsKQEAgLTEyOCw3ICsx
MjgsNyBAQCByZXBvcnRDb21wYXJlKCdkZWYnLCB2YWx1ZSwgc3VtbWFyeSArICc6CiAKIC8vIHNo
aWZ0CiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxl
dGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24g
dG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5
cGUuc2hpZnQuY2FsbCh2YWx1ZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgcmVwb3J0Q29tcGFyZSgn
YWJjJywgdmFsdWUsIHN1bW1hcnkgKyAnOgogCiAvLyBzcGxpY2UKIHZhbHVlICA9ICdhYmMnOwot
ZXhwZWN0ID0gJ1R5cGVFcnJvcjogVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4nOworZXhwZWN0
ID0gJ1R5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4n
OwogdHJ5CiB7CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh2YWx1ZSwg
MSwgMSkgKyAnJzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODAwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTA5
LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3Vs
ZCBoYXZlIHByb3BlcnR5IGJ1dHRlcmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MTkzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlYWNoIHRoZSBET00gdGhhdCB0byBpbnRlcmNlcHQgZ2V0L3B1
dCBvbiBpbmRleGVkIHByb3BlcnRpZXMsIHlvdSBub3cgaGF2ZQorICAgICAgICB0byBvdmVycmlk
ZSBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4IGFuZCBwdXRCeUluZGV4LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4gT25lIHRlc3Qgd2FzIHJlYmFzZWQg
YmVjYXVzZSBpbmRleGVkCisgICAgICAgIHByb3BlcnR5IGl0ZXJhdGlvbiBvcmRlciBub3cgbWF0
Y2hlcyBvdGhlciBlbmdpbmVzIChpbmRleGVkIHByb3BlcnRpZXMgYWx3YXlzCisgICAgICAgIGNv
bWUgZmlyc3QpLgorCisgICAgICAgICogYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBcnJheVZhbHVlOjpnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Jsb2JDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNCbG9iKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0V2Via2l0TGluZURhc2gpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0RPTVN0cmluZ0xpc3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdCk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpw
dXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
U2hlbGw6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d1NoZWxsLmg6CisgICAgICAgIChKU0RPTVdpbmRvd1NoZWxsKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cG9wdWxhdGVDb250ZXh0TWVudUl0ZW1zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNXZWJTb2NrZXQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVG9JbnNwZWN0b3JW
YWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
SGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpSdW50
aW1lQXJyYXkpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5Lmg6CisgICAgICAgIChK
U0M6OlJ1bnRpbWVBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFJ1bnRpbWVBcnJh
eSk6CisKIDIwMTItMDktMDkgIEx1Y2FzIEZvcnNjaGxlciAgPGxmb3JzY2hsZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIEJ1aWxkIEZpeC4gIDxyZGFyOi8vcHJvYmxlbS8xMjI2MDg5Mz4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCShyZXZpc2lvbiAxMjc5
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsMTAgKzczLDExIEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBp
bmRleCwgRGljdGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNBcnJheSogYXJyYXkg
PSBhc0FycmF5KG1fdmFsdWUpOwotICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGluZGV4KSkK
KyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgIGlmICghYXJyYXkt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTVmFsdWUgaW5kZXhlZFZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAgICBKU1Zh
bHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAgIGlm
IChpbmRleGVkVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCAhaW5kZXhlZFZhbHVlLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNyArMTE4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0Jsb2JDb25zdAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJh
eS0+Z2V0SW5kZXgoaSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBp
biBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
NjEwCisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAj
aWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZKU0FycmF5QnVmZmVy
OjpzX2luZm8pKQogICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChjb250ZXh0LCB0b0Fy
cmF5QnVmZmVyKGl0ZW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw5
IEBAIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFdlYmsKIAogICAgIERhc2hB
cnJheSBkYXNoOwogICAgIEpTQXJyYXkqIHZhbHVlQXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKKyAg
ICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB2YWx1ZUFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGVs
ZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleChpKS50b0Zsb2F0KGV4ZWMpOworICAgICAgICBmbG9h
dCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvRmxvYXQoZXhlYyk7CiAg
ICAgICAgIGlmIChlbGVtIDw9IDAgfHwgIWlzZmluaXRlKGVsZW0pKQogICAgICAgICAgICAgcmV0
dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
U3RyaW5nTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDggKzMzLDkgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0b0RPTVN0cmluZ0xpcwog
CiAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gc3RyaW5nTGlzdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIC8vIEZJ
WE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjEwCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKQotICAgICAgICBzdHJpbmdMaXN0LT5hcHBlbmQoYXJy
YXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIHN0
cmluZ0xpc3QtPmFwcGVuZChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1cm4gc3RyaW5nTGlzdC5yZWxlYXNlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEx
IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6OmRlbGV0ZVByb3BlcnR5KEpTQ2UKICAgICByZXR1cm4g
IWVjOwogfQogCitib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVy
biBkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4
KSk7Cit9CisKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JikKIHsKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwx
MiArMTYwLDEyIEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAg
ICAvLyBpcyBhbGxvd2VkLgogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAgICAgYm9vbCBhbGxv
d3NBY2Nlc3MgPSBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3Qt
PmltcGwoKSwgZXJyb3JNZXNzYWdlKTsKLQorICAgIAogICAgIC8vIExvb2sgZm9yIG92ZXJyaWRl
cyBiZWZvcmUgbG9va2luZyBhdCBhbnkgb2Ygb3VyIG93biBwcm9wZXJ0aWVzLCBidXQgaWdub3Jl
IG92ZXJyaWRlcyBjb21wbGV0ZWx5CiAgICAgLy8gaWYgdGhpcyBpcyBjcm9zcy1kb21haW4gYWNj
ZXNzLgogICAgIGlmIChhbGxvd3NBY2Nlc3MgJiYgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQorICAgIAogICAgIC8vIFdlIG5lZWQgdGhpcyBjb2RlIGhlcmUgYmVjYXVz
ZSBvdGhlcndpc2UgSlNET01XaW5kb3dCYXNlIHdpbGwgc3RvcCB0aGUgc2VhcmNoIGJlZm9yZSB3
ZSBldmVuIGdldCB0byB0aGUKICAgICAvLyBwcm90b3R5cGUgZHVlIHRvIHRoZSBibGFua2V0IHNh
bWUgb3JpZ2luIChzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KSBjaGVjayBhdCB0aGUgZW5k
IG9mIGdldE93blByb3BlcnR5U2xvdC4KICAgICAvLyBBbHNvLCBpdCdzIGltcG9ydGFudCB0byBn
ZXQgdGhlIGltcGxlbWVudGF0aW9uIHN0cmFpZ2h0IG91dCBvZiB0aGUgRE9NV2luZG93IHByb3Rv
dHlwZSByZWdhcmRsZXNzIG9mCkBAIC0yNjksNiArMjY5LDgyIEBAIGJvb2wgSlNET01XaW5kb3c6
OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNE
T01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNE
T01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICAK
KyAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkgeworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBtZXNzYWdlIGhlcmUgdGhhdCBleHBsYWlucyB3aHkgdGhlIHBy
b3BlcnR5IGFjY2Vzcy9mdW5jdGlvbiBjYWxsIHdhcworICAgICAgICAvLyBub3QgYWxsb3dlZC4g
CisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGNyb3NzLWRvbWFpbiBhY2Nlc3MgaGVy
ZSB3aXRob3V0IHByaW50aW5nIHRoZSBnZW5lcmljIHdhcm5pbmcgbWVzc2FnZQorICAgIC8vIGJl
Y2F1c2Ugd2UgYWx3YXlzIGFsbG93IGFjY2VzcyB0byBzb21lIGZ1bmN0aW9uLCBqdXN0IGRpZmZl
cmVudCBvbmVzIGRlcGVuZGluZyB3aGV0aGVyIGFjY2VzcworICAgIC8vIGlzIGFsbG93ZWQuCisg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBib29sIGFsbG93c0FjY2VzcyA9IHNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLCBlcnJvck1lc3Nh
Z2UpOworCisgICAgLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29raW5nIGF0IGFueSBv
ZiBvdXIgb3duIHByb3BlcnRpZXMsIGJ1dCBpZ25vcmUgb3ZlcnJpZGVzIGNvbXBsZXRlbHkKKyAg
ICAvLyBpZiB0aGlzIGlzIGNyb3NzLWRvbWFpbiBhY2Nlc3MuCisgICAgaWYgKGFsbG93c0FjY2Vz
cyAmJiBKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpbmRleCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KTsK
KyAgICAKKyAgICAvLyBDaGVjayBmb3IgY2hpbGQgZnJhbWVzIGJ5IG5hbWUgYmVmb3JlIGJ1aWx0
LWluIHByb3BlcnRpZXMgdG8KKyAgICAvLyBtYXRjaCBNb3ppbGxhLiBUaGlzIGRvZXMgbm90IG1h
dGNoIElFLCBidXQgc29tZSBzaXRlcyBlbmQgdXAKKyAgICAvLyBuYW1pbmcgZnJhbWVzIHRoaW5n
cyB0aGF0IGNvbmZsaWN0IHdpdGggd2luZG93IHByb3BlcnRpZXMgdGhhdAorICAgIC8vIGFyZSBp
biBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNlLCB3ZSBoYXZlIHRv
IGRvCisgICAgLy8gaXQgdGhlIE1veiB3YXkuCisgICAgaWYgKHRoaXNPYmplY3QtPmltcGwoKS0+
ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhw
cm9wZXJ0eU5hbWUpKSkgeworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjaGls
ZEZyYW1lR2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8v
IERvIHByb3RvdHlwZSBsb29rdXAgZWFybHkgc28gdGhhdCBmdW5jdGlvbnMgYW5kIGF0dHJpYnV0
ZXMgaW4gdGhlIHByb3RvdHlwZSBjYW4gaGF2ZQorICAgIC8vIHByZWNlZGVuY2Ugb3ZlciB0aGUg
aW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAorICAgIEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0
LT5wcm90b3R5cGUoKTsKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkgeworICAgICAgICBpZiAo
YXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKSB7Cisg
ICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgeworICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgc2xv
dC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IFNlYXJjaCB0aGUgd2hvbGUgZnJh
bWUgaGllcmFyY2h5IHNvbWV3aGVyZSBhcm91bmQgaGVyZS4KKyAgICAvLyBXZSBuZWVkIHRvIHRl
c3QgdGhlIGNvcnJlY3QgcHJpb3JpdHkgb3JkZXIuCisKKyAgICAvLyBhbGxvdyB3aW5kb3dbMV0g
b3IgcGFyZW50WzFdIGV0Yy4gKCM1Njk4MykKKyAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5p
bXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGRDb3VudCgpKSB7CisgICAgICAgIEFT
U0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOworICAgICAgICBzbG90LnNl
dEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghYWxsb3dzQWNjZXNzKSB7CisgICAgICAgIHRo
aXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAgIHNsb3Qu
c2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEFs
bG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLklt
YWdlMQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAg
ICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gZmluZEF0b21pY1N0
cmluZyhwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoYXRvbWljUHJvcGVydHlOYW1lICYmIChz
dGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCktPmhhc05hbWVkSXRlbShhdG9taWNQ
cm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNFbGVtZW50V2l0aElkKGF0b21pY1Byb3BlcnR5
TmFtZSkpKSB7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lZEl0
ZW1HZXR0ZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBl
eGVjLCBpbmRleCwgc2xvdCk7Cit9CisKIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBK
U0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkBA
IC0zNjIsNiArNDM4LDI1IEBAIHZvaWQgSlNET01XaW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWMKICAgICAgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOwogfQogCit2b2lkIEpTRE9NV2luZG93OjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RP
TVdpbmRvdyo+KGNlbGwpOworICAgIGlmICghdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpOworCisgICAgLy8gT3B0aW1pemF0aW9uOiBhY2Nl
c3MgSmF2YVNjcmlwdCBnbG9iYWwgdmFyaWFibGVzIGRpcmVjdGx5IGJlZm9yZSBpbnZvbHZpbmcg
dGhlIERPTS4KKyAgICBpZiAodGhpc09iamVjdC0+SlNHbG9iYWxPYmplY3Q6Omhhc093blByb3Bl
cnR5Rm9yV3JpdGUoZXhlYywgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmlt
cGwoKSkpCisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdDo6cHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIEJhc2U6OnB1dEJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKIGJv
b2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTRE9NV2luZG93KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CkBAIC0zNzEsNiArNDY2LDE1IEBA
IGJvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCoKICAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAor
Ym9vbCBKU0RPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNET01XaW5kb3cq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAgICAvLyBPbmx5IGFs
bG93IGRlbGV0aW5nIHByb3BlcnRpZXMgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVj
LCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCiB2b2lkIEpTRE9NV2luZG93OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAxMjc5MzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcsNiArOTcsMTIgQEAgYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9w
ZXJ0eVNsbwogICAgIHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogfQogCitib29sIEpTRE9NV2luZG93U2hlbGw6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpOworICAgIHJldHVybiB0aGlz
T2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwog
Ym9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01XaW5kb3dTaGVsbCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsKQEAgLTEwOSw2ICsx
MTUsMTIgQEAgdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXQoSlNDZWxsKiBjZWxsLAogICAgIHRo
aXNPYmplY3QtPndpbmRvdygpLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdC0+d2luZG93
KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit2b2lkIEpTRE9NV2lu
ZG93U2hlbGw6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93U2hlbGwq
PihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkVGhyb3cpOworfQorCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dERpcmVjdFZpcnR1YWwo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEpTRE9NV2lu
ZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KG9iamVjdCk7
CkBAIC0xMjcsNiArMTM5LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6ZGVsZXRlUHJvcGVy
dHkoSlMKICAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5hbWUpOwog
fQogCitib29sIEpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIEpT
RE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNl
bGwpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OmdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5kb3dTaGVsbCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDEy
NzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU0M6OkpTT2JqZWN0Kik7CiAg
ICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTUgQEAgYm9vbCBKU0hpc3Rvcnk6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29sIEpTSGlzdG9yeTo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTSGlzdG9y
eSo+KGNlbGwpOworICAgIC8vIE9ubHkgYWxsb3cgZGVsZXRpbmcgYnkgZnJhbWVzIGluIHRoZSBz
YW1lIG9yaWdpbi4KKyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShleGVjLCB0aGlz
T2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOworfQorCiB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0hpc3RvcnkqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNIaXN0b3J5Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5j
cHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODks
OCBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KEV4CiBzdGF0aWMgdm9p
ZCBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJh
eSwgQ29udGV4dE1lbnUmIG1lbnUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJh
eS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogaXRlbSA9IGFzT2JqZWN0KGFy
cmF5LT5nZXRJbmRleChpKSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBp
cyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk1NjEwCisgICAgICAgIEpTT2JqZWN0KiBpdGVtID0gYXNPYmplY3QoYXJyYXktPmdldEluZGV4
UXVpY2tseShpKSk7CiAgICAgICAgIEpTVmFsdWUgbGFiZWwgPSBpdGVtLT5nZXQoZXhlYywgSWRl
bnRpZmllcihleGVjLCAibGFiZWwiKSk7CiAgICAgICAgIEpTVmFsdWUgdHlwZSA9IGl0ZW0tPmdl
dChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ0eXBlIikpOwogICAgICAgICBKU1ZhbHVlIGlkID0g
aXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImlkIikpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEy
NzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDE1IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0xvY2F0aW9uOjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TG9jYXRpb24qPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBp
biB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoZXhl
YywgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTTG9jYXRpb24qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkz
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDExIEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBKU1N0b3JhZ2U6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworfQorCiB2b2lkIEpTU3Rv
cmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdlKj4ob2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tl
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAgICAgICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7CiAgICAgICAgICAgICBKU0FycmF5KiBwcm90b2NvbHNB
cnJheSA9IGFzQXJyYXkocHJvdG9jb2xzVmFsdWUpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xzQXJyYXktPmdldEluZGV4KGkpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBp
ZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIFN0cmluZyBwcm90b2NvbCA9IHBy
b3RvY29sc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgIHByb3RvY29scy5hcHBlbmQocHJvdG9jb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTI3OTM2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsNyArMTQ0LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9Jbgog
ICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIEpTVmFsdWUgZWxlbWVu
dCA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICAgICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBlbGVtZW50VmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3Rh
dGUsIGVsZW1lbnQsIG1heERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRWYWx1
ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOSBAQCBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0
YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXgoaW5kZXgpKQot
ICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4KTsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1v
ZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAg
ICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBib29sIGhhc0luZGV4ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRTcGFyc2VJbmRleChhcnJh
eSwgaW5kZXgsIGhhc0luZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjc5MzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBj
b3B5KQpAQCAtNzc3LDIzICs3NzcsMjUgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAkaW1w
bEluY2x1ZGVzeyIke2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAhJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21IZWFkZXIifSAmJiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9KTsKIAotICAgIG15ICRoYXNHZXR0ZXIg
PSAkbnVtQXR0cmlidXRlcyA+IDAKLSAgICAgICAgICAgICAgICAgfHwgISRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9Ci0gICAgICAgICAgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQotICAgICAg
ICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5k
ZXhlZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9Ci0gICAgICAgICAgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90QW5kRGVzY3JpcHRvciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKKyAgICBteSAk
aGFzQ29tcGxleEdldHRlciA9CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkluZGV4ZWRHZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9CisgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90QW5kRGVzY3JpcHRvciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkR2V0dGVyIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKKyAgICAKKyAgICBteSAkaGFzR2V0dGVyID0g
JG51bUF0dHJpYnV0ZXMgPiAwIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJP
bWl0Q29uc3RydWN0b3IifSB8fCAkaGFzQ29tcGxleEdldHRlcjsKIAogICAgICMgR2V0dGVycwog
ICAgIGlmICgkaGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTtcbiIpIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRl
eGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0lu
ZGV4ZWRHZXR0ZXIifSkgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU5hbWVkR2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYg
KCRoYXNDb21wbGV4R2V0dGVyKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBi
b29sIGdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvckRlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IifTsKICAgICAgICAg
JHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCJ9ID0gMTsK
KyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAgfQogCiAgICAgIyBD
aGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJsZSBwcm9wZXJ0aWVzCkBAIC04MDQsMTUgKzgwNiwx
NyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIG15ICRoYXNT
ZXR0ZXIgPSAkaGFzUmVhZFdyaXRlUHJvcGVydGllcwotICAgICAgICAgICAgICAgICB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9Ci0gICAgICAg
ICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVk
U2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9OworICAgIG15ICRoYXNDb21wbGV4U2V0dGVyID0K
KyAgICAgICAgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rp
b24ifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21O
YW1lZFNldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUluZGV4ZWRTZXR0ZXIifTsKKyAgICAgICAgCisgICAgbXkgJGhhc1NldHRlciA9ICRo
YXNSZWFkV3JpdGVQcm9wZXJ0aWVzIHx8ICRoYXNDb21wbGV4U2V0dGVyOwogCiAgICAgIyBHZXR0
ZXJzCiAgICAgaWYgKCRoYXNTZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpO1xuIikgaWYgKCRoYXNDb21wbGV4U2V0dGVyKTsKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBib29sIHB1dERlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkU2V0dGVyIn07CiAg
ICAgfQogCkBAIC04NDgsNiArODUyLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAjIEN1
c3RvbSBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CiAKICAgICAjIEN1c3RvbSBnZXRQcm9wZXJ0
eU5hbWVzIGZ1bmN0aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKICAgICBpZiAoJGludGVyZmFjZU5h
bWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTE3NDEsMjEgKzE3NDYsNzkgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51
bWVyaWNJbmRleGVkR2V0dGVyIn0pCi0gICAgICAgICAgICAgICAgJiYgISRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQorICAgICAgICAgICAgICAgIHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifQorICAgICAgICAgICAg
ICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90
KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganND
YXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAocHJvcGVydHlO
YW1lIDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5s
ZW5ndGgoKSkge1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5k
ZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5k
ZXgodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5pbmRleEdldHRlcik7XG4i
KTsKKworICAgICAgICAgICAgIyBUaGlzIGF0dGVtcHRzIHRvIHNpbmsgdGhlIHNvbWV3aGF0IGV4
cGVuc2l2ZSBpbnQtdG8tc3RyaW5nIGNvbnZlcnNpb24gdGhhdCBoYXBwZW5zIHdoZW4gd2UgY3Jl
YXRlIFByb3BlcnR5TmFtZQorICAgICAgICAgICAgIyB0byB0aGUgcG9pbnQgd2hlcmUgd2UgYWN0
dWFsbHkgbmVlZCBpdC4gSW4gcGFydGljdWxhciwgd2hlbiB3ZSBnZW5lcmF0ZSB0aGlzIG1ldGhv
ZCBmb3IgY2xhc3NlcyB0aGF0IGNhbgorICAgICAgICAgICAgIyBhdHRlbXB0IHRoZWlyIGluZGV4
ZWQgZ2V0dGVyIGZpcnN0LCB3ZSB0cnkgdG8gZW5zdXJlIHRoYXQgaWYgdGhhdCBnZXR0ZXIgc3Vj
Y2VlZHMgdGhlbiB3ZSBkb24ndCBwYXkgZm9yIHRoZQorICAgICAgICAgICAgIyBjcmVhdGlvbiBv
ZiB0aGUgUHJvcGVydHlOYW1lLgorICAgICAgICAgICAgbXkgJGdlbmVyYXRlZFByb3BlcnR5TmFt
ZSA9IDA7CisgICAgICAgICAgICBteSAkcHJvcGVydHlOYW1lR2VuZXJhdGlvbiA9IHN1YiB7Cisg
ICAgICAgICAgICAgICAgaWYgKCRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAkZ2VuZXJhdGVkUHJv
cGVydHlOYW1lID0gMTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG15ICRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uID0gc3ViIHsKKyAgICAgICAgICAgICAg
ICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
TmFtZWRHZXR0ZXIifTsKKyAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVzTWFudWFsTG9va3Vw
KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNvbnN0IEhh
c2hFbnRyeSogZW50cnkgPSAke2NsYXNzTmFtZX1UYWJsZS5lbnRyeShleGVjLCBwcm9wZXJ0eU5h
bWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChlbnRyeSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJvcGVydHlHZXR0ZXIo
KSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJO
YW1lZEdldHRlciJ9ICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21O
YW1lZEdldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9u
KCk7CisgICAgICAgICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uKCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpO1xuIik7CisKKyAgICAgICAg
ICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIi
fSkgeworICAgICAgICAgICAgICAgIGlmIChJbmRleEdldHRlclJldHVybnNTdHJpbmdzKCRpbXBs
Q2xhc3NOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSB7XG4iKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
aW5kZXggPCBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSkt
Pmxlbmd0aCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0p
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgaW5kZXgsIHRoaXNP
YmplY3QtPmluZGV4R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2Vu
ZXJhdGlvbigpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChj
YW5HZXRJdGVtc0Zvck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlz
T2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhp
c09iamVjdC0+bmFtZUdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21OYW1lZEdldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5l
cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9u
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERl
c2NyaXB0b3IifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKVxu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIGluZGV4LCBzbG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOwogICAgICAgICB9CiAKQEAgLTE5NDYsMTYgKzIwMDksMzAgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0gfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIifSkgeworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpwdXRC
eUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4oY2VsbCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSB7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBVTlVT
RURfUEFSQU0oc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgaW5k
ZXgsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRo
cm93KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6cHV0QnlJbmRleChj
ZWxsLCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9u
IDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNvbnN0IENsYXNz
SW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIsICZKU0FycmF5Ojpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9OwogCiBSdW50
aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKKyAgICA6
IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDApCiAgICAgLCBtX2FycmF5
KDApCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlz
aW9uIDEyNzkzNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDEzICs3MywxMyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8s
IEFycmF5KTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpBcnJheSopOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNBcnJheTo6U3RydWN0dXJl
RmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgUnVudGltZUFycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MDAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMDkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgcHJvcGVydHkg
YnV0dGVyZmxpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxOTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW9kaWZ5IHRoZSB0ZXN0IHRvIGluZGljYXRlIHRoYXQgaXRlcmF0aW5nIG92ZXIgcHJvcGVy
dGllcyBub3cgcmV0dXJucworICAgICAgICBpbmRleGVkIHByb3BlcnRpZXMgZmlyc3QuIFRoaXMg
aXMgYSBiZWhhdmlvciBjaGFuZ2UgdGhhdCBtYWtlcyB1cyBtb3JlCisgICAgICAgIGNvbXBsaWFu
dCB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAqIGZhc3QvanMvcmVzb3Vy
Y2VzL0pTT04tc3RyaW5naWZ5LmpzOgorCiAyMDEyLTA5LTA5ICBEb21pbmljIE1henpvbmkgIDxk
bWF6em9uaUBnb29nbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMjc5MzYpOiBNdWx0
aXBsZSBhY2Nlc3NpYmlsaXR5IHRlc3RzIGZhaWxpbmcgb24gTGlvbgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMJKHJldmlzaW9uIDEy
NzkzNikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgZnVuY3Rpb24gY3JlYXRlVGVzdHMo
KSB7CiAgICAgICAgIGpzb25PYmplY3Quc3RyaW5naWZ5KHthOiJhIiwgYjoiYiIsIGM6ImMiLCAz
OiAiZCIsIDI6ICJlIiwgMTogImYifSwgcmVwbGFjZUZ1bmMpOwogICAgICAgICByZXR1cm4gcmVw
bGFjZVRyYWNrZXI7CiAgICAgfSk7Ci0gICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5leHBl
Y3RlZCA9ICcoc3RyaW5nKXsiYSI6ImEiLCJiIjoiYiIsImMiOiJjIiwiMyI6ImQiLCIyIjoiZSIs
IjEiOiJmIn07YShzdHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0cmluZykiYyI7MyhzdHJpbmcp
ImQiOzIoc3RyaW5nKSJlIjsxKHN0cmluZykiZiI7JzsKKyAgICByZXN1bHRbcmVzdWx0Lmxlbmd0
aCAtIDFdLmV4cGVjdGVkID0gJyhzdHJpbmcpeyIxIjoiZiIsIjIiOiJlIiwiMyI6ImQiLCJhIjoi
YSIsImIiOiJiIiwiYyI6ImMifTsxKHN0cmluZykiZiI7MihzdHJpbmcpImUiOzMoc3RyaW5nKSJk
IjthKHN0cmluZykiYSI7YihzdHJpbmcpImIiO2Moc3RyaW5nKSJjIjsnOwogICAgIHJlc3VsdC5w
dXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpewogICAgICAgICB2YXIgY291bnQgPSAwOwogICAgICAg
ICB2YXIgYXJyYXkgPSBbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7Y291bnQrKzsgYXJyYXlbMF09J2En
OyBhcnJheVsxXT0nYyc7IGFycmF5WzJdPSdiJzsgcmV0dXJuICdhJ319XTsK
</data>
<flag name="commit-queue"
          id="174321"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163022</attachid>
            <date>2012-09-09 18:32:17 -0700</date>
            <delta_ts>2012-09-11 18:04:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>butterflies_patch_39.diff</filename>
            <type>text/plain</type>
            <size>523779</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4MCBA
QAorMjAxMi0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEpTQyBvYmplY3Qg
bW9kZWwuIFByZXZpb3VzbHksIGFsbCBvYmplY3RzIGhhZCBmYXN0IGxvb2t1cCBmb3IKKyAgICAg
ICAgbmFtZWQgcHJvcGVydGllcy4gSW50ZWdlciBpbmRleGVkIHByb3BlcnRpZXMgd2VyZSBvbmx5
IGZhc3QgaWYgeW91IHVzZWQgYQorICAgICAgICBKU0FycmF5LiBXaXRoIHRoaXMgY2hhbmdlLCBh
bGwgb2JqZWN0cyBoYXZlIGZhc3QgaW5kZXhlZCBwcm9wZXJ0aWVzLiBUaGlzIGlzCisgICAgICAg
IGFjY29tcGxpc2hlZCB3aXRob3V0IGFueSBzcGFjZSBvdmVyaGVhZCBieSB1c2luZyBhIGJpZGly
ZWN0aW9uYWwgb2JqZWN0IGxheW91dCwKKyAgICAgICAgYWthIGJ1dHRlcmZsaWVzLiBFYWNoIEpT
T2JqZWN0IGhhcyBhIG1fYnV0dGVyZmx5IHBvaW50ZXIgd2hlcmUgcHJldmlvdXNseSBpdAorICAg
ICAgICBoYWQgYSBtX291dE9mTGluZVN0b3JhZ2UgcG9pbnRlci4gVG8gdGhlIGxlZnQgb2YgdGhl
IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKKyAgICAgICAgbV9idXR0ZXJmbHksIHdlIHBsYWNlIGFs
bCBuYW1lZCBvdXQtb2YtbGluZSBwcm9wZXJ0aWVzLiBUbyB0aGUgcmlnaHQsIHdlIHBsYWNlCisg
ICAgICAgIGFsbCBpbmRleGVkIHByb3BlcnRpZXMgYWxvbmcgd2l0aCBpbmRleGluZyBtZXRhLWRh
dGEuIFRob3VnaCwgc29tZSBpbmRleGluZworICAgICAgICBtZXRhLWRhdGEgaXMgcGxhY2VkIGlu
IHRoZSA4LWJ5dGUgd29yZCBpbW1lZGlhdGVseSBsZWZ0IG9mIHRoZSBwb2ludGVkLXRvCisgICAg
ICAgIGxvY2F0aW9uOyB0aGlzIGlzIGluIGFudGljaXBhdGlvbiBvZiB0aGUgaW5kZXhpbmcgbWV0
YS1kYXRhIGJlaW5nIHNtYWxsIGVub3VnaAorICAgICAgICBpbiB0aGUgY29tbW9uIGNhc2UgdGhh
dCBtX2J1dHRlcmZseSBhbHdheXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBpbmRleGVkCisgICAgICAg
IHByb3BlcnR5LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZSBuZXV0cmFs
LCBleGNlcHQgb24gdGVzdHMgdGhhdCB1c2UgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uCisgICAgICAg
IHBsYWluIG9iamVjdHMsIHdoZXJlIHRoZSBzcGVlZC11cCBpcyBpbiBleGNlc3Mgb2YgYW4gb3Jk
ZXIgb2YgbWFnbml0dWRlLgorICAgICAgICAKKyAgICAgICAgT25lIG5vdGFibGUgYXNwZWN0IG9m
IHdoYXQgdGhpcyBjaGFuZ2UgYnJpbmdzIGlzIHRoYXQgaXQgYWxsb3dzIGluZGV4aW5nCisgICAg
ICAgIHN0b3JhZ2UgdG8gbW9ycGggb3ZlciB0aW1lLiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVz
ZWQgdG8gYWxsb3cgYWxsIG5vbi1hcnJheQorICAgICAgICBvYmplY3RzIHRvIHN0YXJ0IG91dCB3
aXRob3V0IGFueSBpbmRleGVkIHN0b3JhZ2UuIEJ1dCBpdCBjb3VsZCBiZSB1c2VkIGZvcgorICAg
ICAgICBzb21lIGtpbmRzIG9mIGFycmF5IHR5cGUgaW5mZXJlbmNlIGluIHRoZSBmdXR1cmUuCisK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDYWxsYmFja09i
amVjdCk6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBB
UEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OmFycmF5TW9kZUZyb21TdHJ1Y3R1cmUpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RGlyZWN0UHV0QnlJZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWRq
YWNlbmN5TGlzdDo6QWRqYWNlbmN5TGlzdCk6CisgICAgICAgIChBZGphY2VuY3lMaXN0KToKKyAg
ICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpmcm9tT2Jz
ZXJ2ZWQpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVBbHJlYWR5Q2hlY2tlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6bW9kZVRvU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6
CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om1vZGVVc2VzQnV0dGVyZmx5KToK
KyAgICAgICAgKEpTQzo6REZHOjptb2RlSXNKU0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpp
c0luQm91bmRzQWNjZXNzKToKKyAgICAgICAgKEpTQzo6REZHOjptb2RlU3VwcG9ydHNMZW5ndGgp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0UHJvcGVydHlTdG9yYWdlTG9h
ZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVD
U0UpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6
OmFkZE5vZGUpOgorICAgICAgICAoRml4dXBQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoTm9kZSk6CisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwdXRCeVZhbCk6CisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpT
Qzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0
QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAg
ICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNh
bGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxs
b2NhdGVCYXNpY0pTT2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjYWNoZWRHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmg6CisgICAgICAgIChDb3BpZWRTcGFjZSk6CisgICAg
ICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX25ld19hcnJheSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVHZXRCeUlkSG90UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQpOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAg
ICAqIGpzYy5jcHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAg
ICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToK
KyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50
czo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpkZWZp
bmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKiBydW50aW1lL0FycmF5Q29udmVudGlvbnMuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjppc0RlbnNlRW5vdWdoRm9yVmVjdG9yKToKKyAgICAgICAgKEpT
Qzo6aW5kZXhpbmdIZWFkZXJGb3JBcnJheSk6CisgICAgICAgIChKU0M6OmJhc2VJbmRleGluZ0hl
YWRlckZvckFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90b3R5cGUpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNK
b2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTb3J0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY01hcCk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jUmVkdWNlUmlnaHQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUu
aDoKKyAgICAgICAgKEFycmF5UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9BcnJheVN0b3JhZ2UuaDog
QWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoQXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6QXJyYXlTdG9yYWdlOjpBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpBcnJheVN0
b3JhZ2U6OmZyb20pOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OmJ1dHRlcmZseSk6Cisg
ICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlND
OjpBcnJheVN0b3JhZ2U6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6c2V0
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6
OkFycmF5U3RvcmFnZTo6Y29weUhlYWRlckZyb21EdXJpbmdHQyk6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6aW5TcGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6QXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCk6CisgICAgICAg
IChKU0M6OkFycmF5U3RvcmFnZTo6aW5kZXhCaWFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJy
YXlTdG9yYWdlOjpzcGFyc2VNYXBPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
OnNpemVGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6
QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojp0b3RhbFNpemUpOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmZyb21CYXNlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5Ojpv
ZmZzZXRPZkluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmluZGV4aW5nSGVhZGVyKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5Ojpwcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpCdXR0
ZXJmbHk6OmluZGV4aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkJ1dHRlcmZseTo6YmFzZSk6CisgICAgICAgICogcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWRE
dXJpbmdDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpiYXNlKToKKyAgICAg
ICAgKEpTQzo6QnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
QnV0dGVyZmx5Ojpncm93QXJyYXlSaWdodCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cmVz
aXplQXJyYXkpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6OnVuc2hpZnQpOgorICAgICAgICAo
SlNDOjpCdXR0ZXJmbHk6OnNoaWZ0KToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgor
ICAgICAgICAoTWV0aG9kVGFibGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1l
L0luZGV4aW5nSGVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEluZGV4
aW5nSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6SW5kZXhpbmdIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6dmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SW5kZXhpbmdIZWFkZXI6OnNldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjpwdWJsaWNMZW5ndGgpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0
UHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OmZyb20pOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6ZnJvbUVuZE9mKToKKyAgICAgICAgKEpTQzo6SW5k
ZXhpbmdIZWFkZXI6OnByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVh
ZGVyOjphcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YnV0dGVy
Zmx5KToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpwcmVD
YXBhY2l0eSk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjppbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ1R5cGUuaDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246
OkpTQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNBY3Rp
dmF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjp0ZWFyT2ZmKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlQXJyYXlCdXR0ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRl
ZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZGVs
ZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAgICAoSlNDOjpK
U0FycmF5OjpzaGlmdENvdW50KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6c29ydE51bWVyaWMpOgorICAgICAgICAoSlNDOjpK
U0FycmF5Ojpzb3J0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6ZmlsbEFyZ0xpc3QpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5Ojpjb21wYWN0Rm9yU29ydGluZyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OkpTQXJyYXkpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpsZW5ndGgpOgorICAgICAgICAoSlND
OjpKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojppc0xl
bmd0aFdyaXRhYmxlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQXJyYXlCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OmJvdW5kRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Ym91
bmRGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0Z1bmN0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5oOgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6
SG9sZGVyOjphcHBlbmROZXh0UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGsp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpj
cmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3Vy
ZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJldmVudEV4dGVuc2lvbnMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YWxs
b2NhdGVTcGFyc2VJbmRleE1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWFsbG9jYXRl
U3BhcnNlSW5kZXhNYXApOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRleEJleW9u
ZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0TmV3VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93
T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdE1heUJlSW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RTbG93KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU09iamVjdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0RGlyZWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0SW5kZXhR
dWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6c2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluaXRp
YWxpemVJbmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb21wbGV0ZUluaXRpYWxpemF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluU3BhcnNlSW5kZXhpbmdNb2RlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om9mZnNldEZvckxv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nU2hvdWxkQmVTcGFyc2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmJ1dHRlcmZseUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
YXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFycmF5U3RvcmFnZU9yWmVy
byk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpT
Qzo6SlNOb25GaW5hbE9iamVjdDo6SlNOb25GaW5hbE9iamVjdCk6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0QnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6Om9mZnNldEluQnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6b2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6aW5kZXhSZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChKU0M6Om9mZnNldFJlbGF0aXZlVG9C
YXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1N5bWJvbFRhYmxlT2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OlR5cGVJbmZvOjppbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvKToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHA6Cisg
ICAgICAgIChKU0M6Ojo6cGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAoT2JqZWN0UHJv
dG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmg6CisgICAgICAgIChK
U0M6Om9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0
eVN0b3JhZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvUHV0
RGlyZWN0SW5kZXhNb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNB
cnJheTo6UmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6
OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hl
c0FycmF5OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVz
QXJyYXkuaDoKKyAgICAgICAgKFJlZ0V4cE1hdGNoZXNBcnJheSk6CisgICAgICAgIChKU0M6OlJl
Z0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAg
ICAgICAoUmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlamVjdC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OnJlamVjdCk6CisgICAgICAgICogcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChTcGFyc2VBcnJheUVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlF
bnRyeTo6U3BhcnNlQXJyYXlFbnRyeSk6CisgICAgICAgIChTcGFyc2VBcnJheVZhbHVlTWFwKToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c3BhcnNlTW9kZSk6CisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNldFNwYXJzZU1vZGUpOgorICAgICAgICAoSlND
OjpTcGFyc2VBcnJheVZhbHVlTWFwOjpsZW5ndGhJc1JlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6
U3BhcnNlQXJyYXlWYWx1ZU1hcDo6c2V0TGVuZ3RoSXNSZWFkT25seSk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmQpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpub3RG
b3VuZCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmlzRW1wdHkpOgorICAg
ICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpjb250YWlucyk6CisgICAgICAgIChKU0M6
OlNwYXJzZUFycmF5VmFsdWVNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZh
bHVlTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmVuZCk6
CisgICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6
OlNwYXJzZUFycmF5VmFsdWVNYXApOgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFw
Ojp+U3BhcnNlQXJyYXlWYWx1ZU1hcCk6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1ZU1hcDo6ZGVzdHJveSk6Cisg
ICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZCk6CisgICAgICAgIChKU0M6OlNwYXJz
ZUFycmF5VmFsdWVNYXA6OnB1dEVudHJ5KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlWYWx1
ZU1hcDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0KToK
KyAgICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IHJ1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6cHV0QnlJbmRleCk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAg
KFN0cmluZ09iamVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVy
dHlNYXApOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbik6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAg
IChTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjp0b0F0dHJpYnV0ZXMp
OgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhhc2gpOgorICAgICAgICAqIHRlc3RzL21vemlsbGEv
anMxXzYvQXJyYXkvcmVncmVzcy0zMDQ4MjguanM6CisKIDIwMTItMDktMDkgIFBhdHJpY2sgR2Fu
c3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSB0aGUgU3RyaW5nIGlu
aXRpYWxpemF0aW9uIG9uIHRoZSBmdW5jdGlvbiBzaWRlIG9mIFN0cmluZzo6bnVtYmVyKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyODAwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjQ1LDYgKzI0NSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwCiAgICAgcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCiAgICAgcnVu
dGltZS9TbWFsbFN0cmluZ3MuY3BwCisgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cAogICAgIHJ1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwCiAgICAgcnVudGltZS9TdHJp
bmdDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL1N0cmluZ09iamVjdC5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjgwMDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtNDUzLDggKzQ1MywxMCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb252ZW50aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5U3RvcmFnZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CYXRjaGVkVHJh
bnNpdGlvbk9wdGltaXplci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJ
bnRlZ2VyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAgXApAQCAtNDYzLDYgKzQ2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmggXApAQCAtNTA3LDYgKzUxMSw5IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRl
ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwIFwKQEAgLTYxMSw3ICs2MTgsOSBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU9mZnNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RlY3QuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0RGlyZWN0SW5kZXhNb2RlLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENhY2hlLmggXApAQCAtNjI4LDExICs2MzcsMTQgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWplY3QuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdDb3VudGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdDb3VudGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NtYWxsU3RyaW5ncy5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdG9y
YWdlQmFycmllci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJ
KHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50
aW1lL1JlZ0V4cENhY2hlLmNwcCBcCiAgICAgcnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwK
ICAgICBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAorICAgIHJ1bnRpbWUvU3BhcnNlQXJyYXlW
YWx1ZU1hcC5jcHAgXAogICAgIHJ1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIFwKICAg
ICBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEJqb2VybiBHcmFmIChiam9lcm4uZ3JhZkBnbWFp
bC5jb20pCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgi
CiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUGFyZW50OjptZXRob2RUYWJsZTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92
ZXJyaWRlc0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBQYXJlbnQ6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBP
dmVycmlkZXNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKICAg
ICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtMTc4LDYgKzE3
OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICAKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTE4Nyw3ICsxODgsNyBAQCBwcml2YXRl
OgogCiAgICAgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBKU1ZhbHVlIHByb3RvKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogCiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJik7CiAgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCos
IENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Myw2ICsxODMsMTIgQEAgYm9vbCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmdldE93blBybwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgorYm9vbCBKU0NhbGxiYWNr
T2JqZWN0PFBhcmVudD46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
Y2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsK
K30KKwordGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQ
YXJlbnQ+OjpkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7CiAgICAgY29uc3QgSlNDYWxsYmFj
a09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxjb25zdCBKU0NhbGxiYWNrT2JqZWN0Kj4ob2Jq
ZWN0KTsKQEAgLTQ0OSw3ICs0NTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpTQ2FsbGJhY2tP
YmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
SlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4o
b2JqZWN0KTsKICAgICBKU0NvbnRleHRSZWYgZXhlY1JlZiA9IHRvUmVmKGV4ZWMpOwpAQCAtNDg0
LDcgKzQ5MCw3IEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Qcm8KICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBQYXJlbnQ6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUGFyZW50OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDkgQEAKICNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkFQ
SUNhc3QuaCIKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCiAjaW5j
bHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiAxMjgwMDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QCBFWFBPUlRTCiAgICAgPz8wUmVnRXhwT2JqZWN0QEpTQ0BASUFFQFBBVkpTR2xvYmFsT2JqZWN0
QDFAUEFWU3RydWN0dXJlQDFAUEFWUmVnRXhwQDFAQFoKICAgICA/PzBTSEExQFdURkBAUUFFQFha
CiAgICAgPz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVj
dHVyZUAxQEBaCi0gICAgPz8wU3RydWN0dXJlQEpTQ0BAQUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBB
VkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBBQlZUeXBlSW5mb0AxQFBCVUNsYXNzSW5mb0Ax
QEBaCisgICAgPz8wU3RydWN0dXJlQEpTQ0BAQUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xv
YmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBBQlZUeXBlSW5mb0AxQFBCVUNsYXNzSW5mb0AxQEVAWgog
ICAgID8/MFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRUBYWgogICAgID8/MFdURlRocmVhZERhdGFA
V1RGQEBRQUVAWFoKICAgICA/PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlN0cmluZ0BX
VEZAQF9OMVBBUEJEQFoKQEAgLTE3OSwxMyArMTc5LDEyIEBAIEVYUE9SVFMKICAgICA/ZmFzdFJl
YWxsb2NAV1RGQEBZQVBBWFBBWElAWgogICAgID9mYXN0U3RyRHVwQFdURkBAWUFQQURQQkRAWgog
ICAgID9mYXN0WmVyb2VkTWFsbG9jQFdURkBAWUFQQVhJQFoKLSAgICA/ZmlsbEdldHRlclByb3Bl
cnR5U2xvdEBKU09iamVjdEBKU0NAQEFBRVhBQVZQcm9wZXJ0eVNsb3RAMkBQQVY/JFdyaXRlQmFy
cmllckJhc2VAVzRVbmtub3duQEpTQ0BAQDJAQFoKKyAgICA/ZmlsbEdldHRlclByb3BlcnR5U2xv
dEBKU09iamVjdEBKU0NAQEFBRVhBQVZQcm9wZXJ0eVNsb3RAMkBIQFoKICAgICA/ZmluYWxpemVA
V2Vha0hhbmRsZU93bmVyQEpTQ0BAVUFFWFY/JEhhbmRsZUBXNFVua25vd25ASlNDQEBAMkBQQVhA
WgogICAgID9maW5kQWxsb2NhdG9yQFdlYWtTZXRASlNDQEBBQUVQQVVGcmVlQ2VsbEBXZWFrQmxv
Y2tAMkBYWgogICAgID9maW5pc2hDcmVhdGlvbkBCb29sZWFuT2JqZWN0QEpTQ0BASUFFWEFBVkpT
R2xvYmFsRGF0YUAyQEBaCiAgICAgP2ZpbmlzaENyZWF0aW9uQERhdGVJbnN0YW5jZUBKU0NAQElB
RVhBQVZKU0dsb2JhbERhdGFAMkBOQFoKICAgICA/ZmluaXNoQ3JlYXRpb25ASW50ZXJuYWxGdW5j
dGlvbkBKU0NAQElBRVhBQVZKU0dsb2JhbERhdGFAMkBBQlZTdHJpbmdAV1RGQEBAWgotICAgID9m
aW5pc2hDcmVhdGlvbkBKU0FycmF5QEpTQ0BASUFFWEFBVkpTR2xvYmFsRGF0YUAyQElAWgogICAg
ID9maW5pc2hDcmVhdGlvbkBSZWdFeHBPYmplY3RASlNDQEBJQUVYUEFWSlNHbG9iYWxPYmplY3RA
MkBAWgogICAgID9maW5pc2hDcmVhdGlvbkBTdHJpbmdPYmplY3RASlNDQEBJQUVYQUFWSlNHbG9i
YWxEYXRhQDJAUEFWSlNTdHJpbmdAMkBAWgogICAgID9mb2N1c0BQcm9maWxlQEpTQ0BAUUFFWFBC
VlByb2ZpbGVOb2RlQDJAQFoKQEAgLTE5OCwxMyArMTk3LDE0IEBAIEVYUE9SVFMKICAgICA/Z2V0
Q2FsbGFibGVPYmplY3RTbG93QEpTQ0BAWUFQQVZKU0NlbGxAMUBQQVYyMUBAWgogICAgID9nZXRD
b25zdHJ1Y3REYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENvbnN0cnVjdFR5cGVAMkBQQVYxMkBBQVRD
b25zdHJ1Y3REYXRhQDJAQFoKICAgICA/Z2V0T2JqZWN0QEpTQ2VsbEBKU0NAQFFBRVBBVkpTT2Jq
ZWN0QDJAWFoKKyAgICA/Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzQEpTT2JqZWN0QEpTQ0BA
U0FYUEFWMTJAUEFWRXhlY1N0YXRlQDJAQUFWUHJvcGVydHlOYW1lQXJyYXlAMkBXNEVudW1lcmF0
aW9uTW9kZUAyQEBaCisgICAgP2dldE93bk5vbkluZGV4UHJvcGVydHlOYW1lc0BKU1N5bWJvbFRh
YmxlT2JqZWN0QEpTQ0BAU0FYUEFWSlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBBQVZQcm9wZXJ0
eU5hbWVBcnJheUAyQFc0RW51bWVyYXRpb25Nb2RlQDJAQFoKICAgICA/Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yQEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FfTlBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0
YXRlQDJAVlByb3BlcnR5TmFtZUAyQEFBVlByb3BlcnR5RGVzY3JpcHRvckAyQEBaCiAgICAgP2dl
dE93blByb3BlcnR5RGVzY3JpcHRvckBKU09iamVjdEBKU0NAQFNBX05QQVYxMkBQQVZFeGVjU3Rh
dGVAMkBWUHJvcGVydHlOYW1lQDJAQUFWUHJvcGVydHlEZXNjcmlwdG9yQDJAQFoKICAgICA/Z2V0
T3duUHJvcGVydHlOYW1lc0BKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4ZWNTdGF0ZUAyQEFB
VlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBAWgotICAgID9nZXRPd25Q
cm9wZXJ0eU5hbWVzQEpTU3ltYm9sVGFibGVPYmplY3RASlNDQEBTQVhQQVZKU09iamVjdEAyQFBB
VkV4ZWNTdGF0ZUAyQEFBVlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBA
WgogICAgID9nZXRPd25Qcm9wZXJ0eVNsb3RASlNHbG9iYWxPYmplY3RASlNDQEBTQV9OUEFWSlND
ZWxsQDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEFBVlByb3BlcnR5U2xvdEAyQEBa
Ci0gICAgP2dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhASlNBcnJheUBKU0NAQFNBX05QQVZKU0Nl
bGxAMkBQQVZFeGVjU3RhdGVAMkBJQUFWUHJvcGVydHlTbG90QDJAQFoKICAgICA/Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEBKU09iamVjdEBKU0NAQFNBX05QQVZKU0NlbGxAMkBQQVZFeGVjU3Rh
dGVAMkBJQUFWUHJvcGVydHlTbG90QDJAQFoKKyAgICA/Z2V0T3duUHJvcGVydHlTbG90U2xvd0BK
U09iamVjdEBKU0NAQEFBRV9OUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEFBVlByb3Bl
cnR5U2xvdEAyQEBaCiAgICAgP2dldFByb3BlcnR5TmFtZXNASlNPYmplY3RASlNDQEBTQVhQQVYx
MkBQQVZFeGVjU3RhdGVAMkBBQVZQcm9wZXJ0eU5hbWVBcnJheUAyQFc0RW51bWVyYXRpb25Nb2Rl
QDJAQFoKICAgICA/Z2V0U2xpY2VAQXJnTGlzdEBKU0NAQFFCRVhIQUFWMTJAQFoKICAgICA/Z2V0
U3RhY2tUcmFjZUBJbnRlcnByZXRlckBKU0NAQFNBWFBBVkpTR2xvYmFsRGF0YUAyQEFBVj8kVmVj
dG9yQFVTdGFja0ZyYW1lQEpTQ0BAJDBBQEBXVEZAQEBaCkBAIC0yMTQsOCArMjE0LDggQEAgRVhQ
T1JUUwogICAgID9nZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUJFP0FWSlNWYWx1ZUAy
QFhaCiAgICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxPYmplY3RASlNDQEBRQUVQQVZFeGVjU3RhdGVA
MkBYWgogICAgID9nbG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCi0gICAgP2dyb3dP
dXRPZkxpbmVTdG9yYWdlQEpTT2JqZWN0QEpTQ0BAUUFFUEFWPyRXcml0ZUJhcnJpZXJCYXNlQFc0
VW5rbm93bkBKU0NAQEAyQEFBVkpTR2xvYmFsRGF0YUAyQElJQFoKICAgICA/Z3Jvd0BIYW5kbGVT
ZXRASlNDQEBBQUVYWFoKKyAgICA/Z3Jvd091dE9mTGluZVN0b3JhZ2VASlNPYmplY3RASlNDQEBR
QUVQQVZCdXR0ZXJmbHlAMkBBQVZKU0dsb2JhbERhdGFAMkBJSUBaCiAgICAgP2hhc0luc3RhbmNl
QEpTT2JqZWN0QEpTQ0BAU0FfTlBBVjEyQFBBVkV4ZWNTdGF0ZUAyQFZKU1ZhbHVlQDJAMkBaCiAg
ICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBJQFoKICAg
ICA/aGFzUHJvcGVydHlASlNPYmplY3RASlNDQEBRQkVfTlBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0
eU5hbWVAMkBAWgpAQCAtMjcwLDcgKzI3MCw3IEBAIEVYUE9SVFMKICAgICA/cHV0QEpTR2xvYmFs
T2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAy
QFZKU1ZhbHVlQDJAQUFWUHV0UHJvcGVydHlTbG90QDJAQFoKICAgICA/cHV0QEpTT2JqZWN0QEpT
Q0BAU0FYUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVl
QDJAQUFWUHV0UHJvcGVydHlTbG90QDJAQFoKICAgICA/cHV0QnlJbmRleEBKU09iamVjdEBKU0NA
QFNBWFBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQElWSlNWYWx1ZUAyQF9OQFoKLSAgICA/cHV0
RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhASlNBcnJheUBKU0NAQEFBRV9OUEFWRXhlY1N0
YXRlQDJASVZKU1ZhbHVlQDJAVzRQdXREaXJlY3RJbmRleE1vZGVAMkBAWgorICAgID9wdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aEBKU09iamVjdEBKU0NAQEFBRV9OUEFWRXhlY1N0YXRl
QDJASVZKU1ZhbHVlQDJASVc0UHV0RGlyZWN0SW5kZXhNb2RlQDJAQFoKICAgICA/cHV0RGlyZWN0
VmlydHVhbEBKU0dsb2JhbE9iamVjdEBKU0NAQFNBWFBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRl
QDJAVlByb3BlcnR5TmFtZUAyQFZKU1ZhbHVlQDJASUBaCiAgICAgP3B1dERpcmVjdFZpcnR1YWxA
SlNPYmplY3RASlNDQEBTQVhQQVYxMkBQQVZFeGVjU3RhdGVAMkBWUHJvcGVydHlOYW1lQDJAVkpT
VmFsdWVAMkBJQFoKICAgICA/cmFuZG9tTnVtYmVyQFdURkBAWUFOWFoKQEAgLTM0OSwxMCArMzQ5
LDEwIEBAIEVYUE9SVFMKICAgICA/dG9UaGlzT2JqZWN0U2xvd0Nhc2VASlNWYWx1ZUBKU0NAQEFC
RVBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9XVEZTdHJpbmdTbG93Q2Fz
ZUBKU1ZhbHVlQEpTQ0BAQUJFP0FWU3RyaW5nQFdURkBAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/
dHJhbnNmZXJAQXJyYXlCdWZmZXJAV1RGQEBRQUVfTkFBVkFycmF5QnVmZmVyQ29udGVudHNAMkBB
QVY/JFZlY3RvckBWPyRSZWZQdHJAVkFycmF5QnVmZmVyVmlld0BXVEZAQEBXVEZAQCQwQUBAMkBA
WgorICAgID90cnlBbGxvY2F0ZVNsb3dDYXNlQENvcGllZFNwYWNlQEpTQ0BAQUFFP0FWQ2hlY2tl
ZEJvb2xlYW5AQElQQVBBWEBaCiAgICAgP3RyeUZhc3RDYWxsb2NAV1RGQEBZQT9BVVRyeU1hbGxv
Y1JldHVyblZhbHVlQDFASUlAWgogICAgID90cnlGYXN0TWFsbG9jQFdURkBAWUE/QVVUcnlNYWxs
b2NSZXR1cm5WYWx1ZUAxQElAWgogICAgID90cnlGYXN0UmVhbGxvY0BXVEZAQFlBP0FVVHJ5TWFs
bG9jUmV0dXJuVmFsdWVAMUBQQVhJQFoKLSAgICA/dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxp
emVkQEpTQXJyYXlASlNDQEBJQUVQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBJQFoKICAgICA/dHJ5
TG9ja0BNdXRleEBXVEZAQFFBRV9OWFoKICAgICA/dHlwZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NA
QFFCRT9BVzRUeXBlQDEyQFhaCiAgICAgP3VubG9ja0BKU0xvY2tASlNDQEBRQUVYWFoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTE0LDYgKzUxNCw1OCBAQAogCQkJTmFtZT0icnVudGltZSIKIAkJCT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJlamVjdC5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1l
XFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQXJyYXlTdG9yYWdlLmgi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcSW5kZXhpbmdUeXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHJvcGVydHlTdG9yYWdlLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHV0RGly
ZWN0SW5kZXhNb2RlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEJ1dHRl
cmZseS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFNwYXJzZUFy
cmF5VmFsdWVNYXAuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5ccnVudGltZVxBcnJheUNvbnZlbnRpb25zLmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSW5kZXhpbmdIZWFk
ZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5ccnVudGltZVxTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxBcmdMaXN0LmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDggQEAKIAkJ
MEYwQjgzQjUxNEJDRjg2MjAwODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjMxNEJDRjg1RTAw
ODg1QjRGIC8qIE1ldGhvZENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMEI4M0I3MTRCQ0Y4RTEwMDg4NUI0RiAvKiBHbG9i
YWxSZXNvbHZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwQjgzQjYxNEJDRjhERjAwODg1QjRGIC8qIEdsb2JhbFJlc29sdmVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzQjkx
NEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCODE0QkNG
OTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjBDRDRDMjE1RjFB
NjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyogUHV0
RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
Q0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovOyB9Owog
CQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEw
MEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21t
b25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjE2MDE1RDE1NjE5
OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2MDE1QTE1NjE5OEJG
MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi87IH07CkBA
IC0xODgsNiArMTkwLDE3IEBACiAJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuY3BwICovOyB9OwogCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkI1NDY3RDE0RjVDRkQ2MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5jcHAgKi87IH07CisJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3
RjM4OTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzk2MTVFRDhFNDYwMEYx
NjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjdGMzhBMTVFRDhFMzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5
NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVy
Zmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzhDMTVFRDhF
MzgwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkI3RjM5
QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM4RTE1RUQ4RTM4
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2
N0IyIC8qIEluZGV4aW5nVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCN0YzOEYxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQjdGMzlD
MTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQ
cm9wZXJ0eVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MTE1RUQ4RTM4MDBG
MTY3QjIgLyogUmVqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjdG
MzkyMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCN0YzOUYxNUVEOEU0NjAw
RjE2N0IyIC8qIFNwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI3RjM5MzE1RUQ4RTM4MDBGMTY3
QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZC
REQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmNwcCAqLzsgfTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFF
NTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUg
LyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTY2LDcgKzU3OSw2IEBA
CiAJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0OERCNTBFRTc0
Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAv
KiBKU0ludGVyZmFjZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc2RjU0QTMx
M0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJ
VFdyaXRlQmFycmllci5oICovOyB9OwotCQlBNzgxRTM1OTE0MTk3MEM3MDAwOTREOTAgLyogU3Rv
cmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODFFMzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFEMTY2
MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5o
ICovOyB9OwogCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5
OEI4RDAwNjVBMTRGIC8qIFN5bnRheENoZWNrZXIuaCAqLzsgfTsKIAkJQTdCNDhGNDkwRUU4OTM2
RjAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovOyB9OwpAQCAtODI5LDYgKzg0MSw4IEBACiAJCTBGMEI4
M0IzMTRCQ0Y4NUUwMDg4NUI0RiAvKiBNZXRob2RDYWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kQ2FsbExpbmtJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMEI4M0I2MTRCQ0Y4REYwMDg4NUI0RiAvKiBHbG9iYWxSZXNvbHZl
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbG9iYWxSZXNvbHZlSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBCODNCODE0QkNGOTVCMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1
dERpcmVjdEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRE
aXJlY3RJbmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwQ0Q0QzMx
NUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENh
bGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENhbGxM
aW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RjE1RDE0QjdBNzNB
MDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbW1vblNsb3dQYXRocy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjE2MDE1QTE1NjE5OEJGMDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0NSw2ICs5NTks
MTcgQEAKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QzE0RjVDRkQzMDAyQzI5ODkg
LyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCN0YzODkxNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5
Q29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlDb252
ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4QTE1RUQ4RTM4
MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFycmF5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4
QjE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjdGMzhEMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGluZ0hl
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RTE1RUQ4RTM4MDBG
MTY3QjIgLyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM4RjE1RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4aW5nVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyog
UHJvcGVydHlTdG9yYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3Bl
cnR5U3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MTE1RUQ4
RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI3RjM5MjE1RUQ4RTM4
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQjdGMzkzMTVFRDhFMzgwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFyc2VBcnJh
eVZhbHVlTWFwSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFBy
b2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1
IC8qIENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9y
aWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzOSw3ICsxMzY0LDYgQEAK
IAkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50
ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJmYWNl
SklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3ODFF
MzU4MTQxOTcwQzcwMDA5NEQ5MCAvKiBTdG9yYWdlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNzlFREIwODExNTMxQ0Q2MDAxOUU5MTIgLyogSlNPYmplY3RSZWZQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2JqZWN0UmVmUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyog
QVNUQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU1RCdWlsZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QTdFRTc3MTFCOThCOEQwMDY1QTE0
RiAvKiBTeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5
bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMTcsNiArMjA0
MSwyMCBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYwQ0Q0QzMxNUY2QjZCNTAw
MzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovLAorCQkJCTBGMENENEMwMTVGMUE2
MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLywKKwkJCQkwRkI3RjM4OTE1RUQ4
RTM4MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oICovLAorCQkJCTBGQjdGMzhBMTVFRDhF
MzgwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM4QjE1RUQ4RTM4MDBG
MTY3QjIgLyogQnV0dGVyZmx5LmggKi8sCisJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8q
IEJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCAqLywKKwkJCQkwRkI3RjM4RDE1RUQ4RTM4MDBGMTY3
QjIgLyogSW5kZXhpbmdIZWFkZXIuaCAqLywKKwkJCQkwRkI3RjM4RTE1RUQ4RTM4MDBGMTY3QjIg
LyogSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJMEZCN0YzOEYxNUVEOEUz
ODAwRjE2N0IyIC8qIEluZGV4aW5nVHlwZS5oICovLAorCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3
QjIgLyogUmVqZWN0LmggKi8sCisJCQkJMEZCN0YzOTIxNUVEOEUzODAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCAqLywKKwkJCQkwRkI3RjM5MzE1RUQ4RTM4MDBGMTY3QjIgLyogU3Bh
cnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCAqLywKKwkJCQlDMkQ1OEMzMzE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAz
RUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIwRTIwM0VGODAwQjlB
NjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RFNTBFMUY1MUM1MDAxNkI2QzkgLyogQXJn
dW1lbnRzLmNwcCAqLywKQEAgLTIyMDIsNyArMjI0MCw2IEBACiAJCQkJMEY3NzAwOEUxNDAyRkRE
NjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAogCQkJCTkzMzAzRkU4MEU2QTcyQjUw
MDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJCTkzMzAzRkVBMEU2QTcyQzAwMDc4
NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKLQkJCQlBNzgxRTM1ODE0MTk3MEM3MDAwOTREOTAg
LyogU3RvcmFnZUJhcnJpZXIuaCAqLywKIAkJCQlBNzMwQjYxMTEyNTAwNjhGMDA5RDI1QjEgLyog
U3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovLAogCQkJCUE3MzBCNjEwMTI1MDA2OEYwMDlEMjVC
MSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oICovLAogCQkJCUJDMThDM0MwMEUxNkVFMzMwMEIz
NDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yNzUyLDcgKzI3ODksNiBAQAog
CQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3
OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzgxRTM1OTE0
MTk3MEM3MDAwOTREOTAgLyogU3RvcmFnZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MDEsNiArMjkzNywxOCBAQAogCQkJCTE0ODc0
QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQy
ODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5OTE1RUQ4RTQ2
MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlB
MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGQjdGMzlCMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0
b3JhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBS
ZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBT
cGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI3RjM5RjE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMzUwMiw2ICszNTUwLDcgQEAKIAkJCQkxNDg3NEFFMzE1RUJE
RTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRB
RTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5
UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUsMTYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAorLy8g
VGhpcyBpcyBhIGJpdGZpZWxkIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gSW5kZXhpbmdU
eXBlIHRoYXQgd2UgaGF2ZSBzZWVuLgorLy8gVGhlcmUgYXJlIDE3IGluZGV4aW5nIHR5cGVzICgw
IHRvIDE2LCBpbmNsdXNpdmUpLCBzbyAzMiBiaXRzIGlzIG1vcmUgdGhhbiBlbm91Z2guCiB0eXBl
ZGVmIHVuc2lnbmVkIEFycmF5TW9kZXM7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc05vdEFy
cmF5ID0gMTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBJc0pTQXJyYXkgID0gMjsKKyNkZWZpbmUg
YXNBcnJheU1vZGVzKHR5cGUpIFwKKyAgICAoMSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlw
ZSkpCiAKIGlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJy
YXk6OnNfaW5mbykKLSAgICAgICAgcmV0dXJuIElzSlNBcnJheTsKLSAgICByZXR1cm4gSXNOb3RB
cnJheTsKKyAgICByZXR1cm4gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpKTsKIH0KIAogY2xhc3MgQXJyYXlQcm9maWxlIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxNSw3
ICsxNzE1LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9wZXJ0eSAhPSBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90
byk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKAorICAgICAgICBwcm9wZXJ0eSAhPSBtX2ds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bworICAgICAgICAmJiBQcm9w
ZXJ0eU5hbWUocHJvcGVydHkpLmFzSW5kZXgoKSA9PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
OwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NTIsMTEgKzg1MiwxMSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgorICAgICAgICBjYXNlIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJh
eU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQz
Mik7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKQEAgLTkxNiwx
MCArOTE2LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6SlNBcnJheToKKyAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFH
RV9NT0RFUzoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3Vu
ZHM6CisgICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgogICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTM0MSw3ICsxMzQxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAgICAgICAgbV9oYXZlU3Ry
dWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9y
YWdlOgorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOwpAQCAtMTM1OSw4ICsxMzU5LDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjU3RyaW5nKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgICAgICBj
YXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6CiAgICAgICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5n
IG1lYW5pbmdmdWwgcmlnaHQgbm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8v
IENGQSB0cmFja2luZyBvZiBhcnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhh
dmUgdGhhdCwgeWV0LgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY0NlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2Vu
Y3lMaXN0LmgJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICBlbnVtIHsgU2l6ZSA9IDMgfTsKICAgICAKKyAgICBBZGphY2VuY3lMaXN0
KCkgeyB9CisgICAgCiAgICAgQWRqYWNlbmN5TGlzdChLaW5kIGtpbmQpCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICA6IG1fa2luZChraW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4
ICs0MCwxMiBAQCBBcnJheTo6TW9kZSBmcm9tT2JzZXJ2ZWQoQXJyYXlNb2RlcyBtb2RlCiAgICAg
c3dpdGNoIChtb2RlcykgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIEFycmF5OjpVbmRl
Y2lkZWQ7Ci0gICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFy
cmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMgOiBBcnJheTo6SlNBcnJheTsKKyAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNh
ZmUgPyBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiBBcnJheTo6QXJyYXlTdG9yYWdl
OworICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAg
IHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
cyA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7CisgICAgY2FzZSBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgorICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZTsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBpcyBw
b3NzaWJseSBhIGtpbmQgb2YgYXJyYXkgZm9yIHdoaWNoLCB0aG91Z2ggdGhlcmUgaXMgbm8KICAg
ICAgICAgLy8gdXNlZnVsIGRhdGEgaW4gdGhlIGFycmF5IHByb2ZpbGUsIHdlIG1heSBiZSBhYmxl
IHRvIGV4dHJhY3QgdXNlZnVsIGRhdGEgZnJvbQpAQCAtMTIwLDEwICsxMjQsMTQgQEAgYm9vbCBt
b2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlN0cmlu
ZzoKICAgICAgICAgcmV0dXJuIGlzU3RyaW5nU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAg
ICAgICAgCi0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5
T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
Ci0gICAgICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+Y2xhc3NJbmZvKCkgPT0gJkpTQXJyYXk6OnNfaW5mbzsKKyAgICAgICAgICAgICYmICh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBI
YXNBcnJheVN0b3JhZ2UpOworCisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9E
RVM6CisgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKQorICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEhhc0FycmF5U3RvcmFnZSkKKyAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgog
ICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwpAQCAt
MTc0LDEwICsxODIsMTggQEAgY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1v
ZAogICAgICAgICByZXR1cm4gIkZvcmNlRXhpdCI7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgog
ICAgICAgICByZXR1cm4gIlN0cmluZyI7Ci0gICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAg
ICAgcmV0dXJuICJKU0FycmF5IjsKLSAgICBjYXNlIEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHM6
Ci0gICAgICAgIHJldHVybiAiSlNBcnJheU91dE9mQm91bmRzIjsKKyAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcyI7CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5U3RvcmFnZSI7CisgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiQXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlIjsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgcmV0
dXJuICJBcmd1bWVudHMiOwogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTI4MDA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOCArNDYsMTIgQEAgZW51bSBNb2RlIHsKICAgICBGb3JjZUV4aXQsIC8vIEltcGxpZXMg
dGhhdCB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24sIHNvIHdl
IHNob3VsZCBqdXN0IGdpdmUgdXAuCiAgICAgR2VuZXJpYywKICAgICBTdHJpbmcsCi0gICAgSlNB
cnJheSwKLSAgICBKU0FycmF5T3V0T2ZCb3VuZHMsCisgICAgQXJyYXlTdG9yYWdlLAorICAgIEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzLAorICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZSwKKyAgICBB
cnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKKyAgICBQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZSwKKyAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
LAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCiAgICAgSW50MTZBcnJheSwKQEAgLTYx
LDYgKzY1LDI5IEBAIGVudW0gTW9kZSB7CiB9OwogfSAvLyBuYW1lc3BhY2UgQXJyYXkKIAorLy8g
SGVscGVycyBmb3IgJ2Nhc2UnIHN0YXRlbWVudHMuIEZvciBleGFtcGxlLCBzYXlpbmcgImNhc2Ug
QWxsQXJyYXlTdG9yYWdlTW9kZXM6IgorLy8gaXMgdGhlIHNhbWUgYXMgaGF2aW5nIG11bHRpcGxl
IGNhc2Ugc3RhdGVtZW50cyBsaXN0aW5nIG9mZiBhbGwgb2YgdGhlIG1vZGVzIHRoYXQKKy8vIGhh
dmUgdGhlIHdvcmQgIkFycmF5U3RvcmFnZSIgaW4gdGhlbS4KKyNkZWZpbmUgTk9OX0FSUkFZX0FS
UkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFycmF5OjpBcnJh
eVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgICAgICAgIFwKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgXAor
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMK
KyNkZWZpbmUgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHMKKyNkZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKKyNk
ZWZpbmUgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZQorI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICBcCisgICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczogICAgICAgICAgXAorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMKKwogQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVkKEFycmF5TW9kZXMg
bW9kZXMsIGJvb2wgbWFrZVNhZmUpOwogCiBBcnJheTo6TW9kZSBmcm9tU3RydWN0dXJlKFN0cnVj
dHVyZSosIGJvb2wgbWFrZVNhZmUpOwpAQCAtNzEsMTEgKzk4LDMwIEBAIGJvb2wgbW9kZUFscmVh
ZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmLCAKIAogY29uc3QgY2hhciogbW9kZVRvU3RyaW5nKEFy
cmF5OjpNb2RlKTsKIAoraW5saW5lIGJvb2wgbW9kZVVzZXNCdXR0ZXJmbHkoQXJyYXk6Ok1vZGUg
YXJyYXlNb2RlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJh
eShBcnJheTo6TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAg
ICBjYXNlIEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5k
czoKKyAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7
CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9S
QUdFX01PREVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTQsMjUgKzE2MCw2IEBAIGlubGluZSBBcnJheTo6TW9kZSBtb2Rl
Rm9yUHV0KEFycmF5OjpNb2QKICAgICB9CiB9CiAKLWlubGluZSBib29sIG1vZGVzQ29tcGF0aWJs
ZUZvclN0b3JhZ2VMb2FkKEFycmF5OjpNb2RlIGxlZnQsIEFycmF5OjpNb2RlIHJpZ2h0KQotewot
ICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBi
b29sIGxlZnRJc0pTQXJyYXkgPQotICAgICAgICBsZWZ0ID09IEFycmF5OjpKU0FycmF5Ci0gICAg
ICAgIHx8IGxlZnQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKLSAgICAKLSAgICBib29s
IHJpZ2h0SXNKU0FycmF5ID0KLSAgICAgICAgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXkKLSAgICAg
ICAgfHwgcmlnaHQgPT0gQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczsKLSAgICAKLSAgICBpZiAo
bGVmdElzSlNBcnJheSAmJiByaWdodElzSlNBcnJheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhB
cnJheTo6TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMTQ3LDcgKzE3NCwx
NSBAQCBpbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9kZSBtCiAKIGlubGluZSBi
b29sIG1vZGVTdXBwb3J0c0xlbmd0aChBcnJheTo6TW9kZSBtb2RlKQogewotICAgIHJldHVybiBt
b2RlSXNTcGVjaWZpYyhtb2RlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEFycmF5
OjpVbmRlY2lkZWQ6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyODAwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjg1LDcgKzE2ODUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVHZXRCeU9mZnNldCgKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYmFzZTsKICAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwogICAgIHNldChkZXN0
aW5hdGlvbk9wZXJhbmQsCiAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICBHZXRCeU9m
ZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8o
cHJlZGljdGlvbiksCkBAIC0yMzE3LDcgKzIzMTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1
dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpOworICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZs
eSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZv
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJh
c2UsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKQEAgLTIzNjgsMTMgKzIzNjgsMTMgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9H
cmFwaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9u
IDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAg
Y2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0g
Y2hpbGQxKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMTYwLDcgKzExNjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CiAgICAg
ICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGVQdHItPnNl
dE9wKEdldEFycmF5TGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5mbGFncygp
ICYgTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBub2RlUHRyLT5jbGVhckZsYWdzKE5v
ZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgbm9kZVB0ci0+Y2xlYXJGbGFncyhOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAgICAgbV9ncmFwaC5kZXJl
ZihtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBub2RlUHRyLT5zZXRBcnJheU1vZGUoYXJy
YXlNb2RlKTsKICAgICAgICAgICAgIApAQCAtMzY1LDYgKzM2NSwxNiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBhZGROb2RlKGNvbnN0IE5vZGUmIG5vZGUs
IGJvb2wgc2hvdWxkR2VuZXJhdGUpCisgICAgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKG5vZGUpOworICAgICAg
ICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIG5vZGVJbmRleCk7CisgICAg
ICAgIGlmIChzaG91bGRHZW5lcmF0ZSkKKyAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5y
ZWYoKTsKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICB9CisgICAgCiAgICAgTm9kZUlu
ZGV4IGNoZWNrQXJyYXkoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE5vZGVJbmRleCBhcnJheSwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoQXJyYXk6Ok1vZGUpID0g
Y2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobW9kZUlzU3BlY2lmaWMoYXJyYXlNb2RlKSk7CkBAIC0zODEsMTUgKzM5MSwxMSBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlKQogICAgICAg
ICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwotICAgICAgICBOb2RlIGdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoCi0gICAgICAgICAgICBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3Jp
Z2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpOwotICAgICAgICBpZiAoc2hvdWxkR2VuZXJh
dGUpCi0gICAgICAgICAgICBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLnJlZigpOwotICAgICAg
ICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUluZGV4ID0gbV9ncmFwaC5zaXpl
KCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKGdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOwot
ICAgICAgICBtX2luc2VydGlvblNldC5hcHBlbmQobV9pbmRleEluQmxvY2ssIGdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2VJbmRleCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gZ2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZUluZGV4OworICAgICAgICBpZiAobW9kZVVzZXNCdXR0ZXJmbHkoYXJy
YXlNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0QnV0dGVyZmx5LCBj
b2RlT3JpZ2luLCBhcnJheSksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwg
T3BJbmZvKGFycmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCB1bnNpZ25lZCBzdG9yYWdl
Q2hpbGRJZHgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAg
ICAgICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOgorICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIG5vZGUub3Ao
KSA9PSBHZXRCeVZhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBzdHJ1Y3QgT3BJbmZvIHsKIHN0cnVjdCBOb2Rl
IHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogICAgIAorICAgIE5vZGUoKSB7IH0K
KyAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8g
aW1tZWRpYXRlIHZhbHVlLgogICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVP
cmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2Up
IFwKICAgICBtYWNybyhSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKLSAgICBtYWNybyhHZXRQ
cm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCisgICAgbWFjcm8oR2V0QnV0dGVy
Zmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlv
bnMuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCkBAIC0yMjYsMTQgKzIy
NywxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBlCiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIGlmIChp
c0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXko
YmFzZVZhbHVlKTsKLSAgICAgICAgaWYgKGFycmF5LT5jYW5TZXRJbmRleChpbmRleCkpIHsKLSAg
ICAgICAgICAgIGFycmF5LT5zZXRJbmRleChnbG9iYWxEYXRhLCBpbmRleCwgdmFsdWUpOworICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlj
a2x5KGluZGV4KSkgeworICAgICAgICAgICAgb2JqZWN0LT5zZXRJbmRleFF1aWNrbHkoZ2xvYmFs
RGF0YSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc3Ry
aWN0KTsKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwg
ZXhlYywgaW5kZXgsIHZhbHVlLCBzdHJpY3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zNDEsMTEgKzM0MiwxMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFs
KEV4CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogICAg
IAotICAgIC8vIEZJWE1FOiB0aGUgSklUIHVzZWQgdG8gaGFuZGxlIHRoZXNlIGluIGNvbXBpbGVk
IGNvZGUhCi0gICAgaWYgKGlzSlNBcnJheShiYXNlKSAmJiBhc0FycmF5KGJhc2UpLT5jYW5HZXRJ
bmRleChpbmRleCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNBcnJheShiYXNl
KS0+Z2V0SW5kZXgoaW5kZXgpKTsKKyAgICBpZiAoYmFzZS0+aXNPYmplY3QoKSkgeworICAgICAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAgICAgIGlmIChvYmplY3Qt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgfQogCi0gICAgLy8g
RklYTUU6IHRoZSBKSVRzdHViIHVzZWQgdG8gcmVsaW5rIHRoaXMgdG8gYW4gb3B0aW1pemVkIGZv
cm0hCiAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZSkgJiYgYXNTdHJpbmcoYmFzZSktPmNhbkdldElu
ZGV4KGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1N0cmluZyhiYXNl
KS0+Z2V0SW5kZXgoZXhlYywgaW5kZXgpKTsKIApAQCAtNTQ4LDE1ICs1NTAsMTUgQEAgdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbAogICAgIG9wZXJhdGlvblB1dEJ5VmFs
SW50ZXJuYWw8ZmFsc2U+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5jb2RlZFByb3Bl
cnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFy
cmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBhcnJheSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVj
LT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxE
YXRhLCBleGVjKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAvLyBXZSBz
aG91bGQgb25seSBnZXQgaGVyZSBpZiBpbmRleCBpcyBvdXRzaWRlIHRoZSBleGlzdGluZyB2ZWN0
b3IuCi0gICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4KGluZGV4KSk7Ci0gICAgICAg
IEpTQXJyYXk6OnB1dEJ5SW5kZXgoYXJyYXksIGV4ZWMsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldEluZGV4
UXVpY2tseShpbmRleCkpOworICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRl
eChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTU2NSwxNSArNTY3LDE1IEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICAgICAgYXJyYXksIGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgc2xvdCk7CiB9CiAKLXZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJy
YXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2Jh
bERhdGEsIGV4ZWMpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGluZGV4IGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHZl
Y3Rvci4KLSAgICAgICAgQVNTRVJUKCFhcnJheS0+Y2FuU2V0SW5kZXgoaW5kZXgpKTsKLSAgICAg
ICAgSlNBcnJheTo6cHV0QnlJbmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIEFTU0VSVCghYXJyYXktPmNhblNldElu
ZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJ
bmRleChhcnJheSwgZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMjc1LDIwICsxMjc3LDI5
IEBAIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlU3QKIAogY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKCFnbG9iYWxE
YXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNp
emVvZihKU1ZhbHVlKSwgJnJlc3VsdCkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkg
KyBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKyAxKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oCisgICAgICAgIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVj
LT5nbG9iYWxEYXRhKCksIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSwgZmFsc2UsIDApKTsK
IH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQogewotICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICB2b2lkKiByZXN1bHQ7Ci0gICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZyZXN1bHQp
KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihy
ZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihyZXN1bHQpICsgMSkgKyBuZXdTaXplOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAgICAgICAgQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKGV4ZWMtPmdsb2JhbERhdGEoKSwgMCwgbmV3U2l6ZSwgZmFsc2UsIDApKTsK
K30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9I
YXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091
dE9mTGluZVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7Cit9
CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jv
d1Byb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHNpemVf
dCBuZXdTaXplKQoreworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZM
aW5lU3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCksIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RP
bkludHMoaW50MzJfdCBhLCBpbnQzMl90IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcg
QEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcgogdHlwZWRlZiBzaXpl
X3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25f
RUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRl
ZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVl
KTsKLXR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUFaSikoRXhl
Y1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUNJY2YpKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RG
R09wZXJhdGlvbl9FQ0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUpOwpAQCAtMTA2LDggKzEwNiwxMCBAQCB0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX1cpKFdhdGNocG9p
bnRTZXQqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwotdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04g
KCpQX0RGR09wZXJhdGlvbl9FTykoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKK3R5cGVkZWYgY2hh
ciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VPUykoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRp
b25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKK3R5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogCiAvLyBU
aGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRh
dGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKQEAgLTE0
MCw4ICsxNDIsOCBAQCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpCiB2
b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxD
ZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChF
eGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJf
dCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdChF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQdXNoKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwg
SlNBcnJheSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7CkBAIC0xODcsNiArMTg5LDggQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uSXNG
dW5jdGlvbgogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5k
RmluaXNoUHV0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZz
ZXQsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIHNpemVfdCBuZXdTaXplKSBXVEZfSU5URVJOQUw7
CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kikg
V1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIAogLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29r
dXAgYW4gZXhjZXB0aW9uIGhhbmRlciwga2V5ZWQgYnkgZmF1bHRMb2NhdGlvbiwgd2hpY2ggaXMK
IC8vIHRoZSByZXR1cm4gbG9jYXRpb24gZnJvbSBvbmUgb2YgdGhlIGNhbGxzIG91dCB0byBvbmUg
b2YgdGhlIGhlbHBlciBvcGVyYXRpb25zIGFib3ZlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDgsNyArNDQ4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IAorICAgICAgICBjYXNlIEdldEJ1
dHRlcmZseTogCiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMiArMTk5LDEyIEBAIHN0YXRp
YyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAgICAgc3R1YkppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKICNlbmRp
ZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+YWRk
cmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0Lmxv
YWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJm
bHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNl
dCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0
SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CiAjZW5k
aWYKICAgICB9CiAKQEAgLTI1NCwxMyArMjU0LDEwIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0
QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1
cmVDYXNlczsKICAgICAgICAKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsgCi0gICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2hQdHIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSks
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNf
aW5mbykpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDgoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7CiAgICAgICAgIAotICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbGVuZ3RoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQyNyw3ICs0MjQsNyBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0
T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3Jh
dGNoR1BSKTsKICNlbHNlCkBAIC00NzcsNyArNDc0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCkBAIC02ODUsMTcg
KzY4MiwxNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAgICAgICAgIHN0dWJKaXQuc3RvcmUz
Mih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogICAgICAgICBzdHViSml0LnN0b3JlMzIo
dmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zm
c2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAg
IH0KICNlbmRpZgogICAgIApAQCAtODM0LDcgKzgzMSw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRU
cmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gb2xkU3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwogICAgICAgICAgICAgQVNT
RVJUKG5ld1NpemUgPiBvbGRTaXplKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZz
ZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIzKTsKKyAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMyk7CiAgICAgICAgICAgICBzdHViSml0LmxvYWRQ
dHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMSk7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hTdWJQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlNpZ25lZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2Ny
YXRjaEdQUjEpKTsKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZj
b3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CkBAIC04NDgsNyArODQ1LDcgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVT
dG9yYWdlKCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7
CiAgICAgICAgIHNjcmF0Y2hHUFIxSGFzU3RvcmFnZSA9IHRydWU7CiAgICAgfQogCkBAIC04NTgs
OCArODU1LDggQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBz
dHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3Jh
Z2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsK
ICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCi0gICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNl
dE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwor
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODY3LDkgKzg2NCw5
IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgc3R1YkppdC5z
dG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmUzMih2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluT3V0
T2ZMaW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsK
LSAgICAgICAgc3R1YkppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUjEpOworICAgICAgICBzdHViSml0LnN0b3JlMzIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zm
c2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAg
ICB9CiAjZW5kaWYKICAgICAgICAgICAgIApAQCAtMTAyNCw2ICsxMDIxLDExIEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICAmJiBvbGRT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTa2lwIG9wdGltaXppbmcgdGhlIGNh
c2Ugd2hlcmUgd2UgbmVlZCByZWFsbG9jLCBhbmQgdGhlIHN0cnVjdHVyZSBoYXMKKyAgICAgICAg
ICAgIC8vIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgICAgICBpZiAoaGFzSW5kZXhpbmdIZWFk
ZXIob2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBub3JtYWxpemVQcm90b3R5cGVDaGFp
bihleGVjLCBiYXNlQ2VsbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZUNo
YWluKiBwcm90b3R5cGVDaGFpbiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw3ICs1
MDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklU
Q29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CiAgICAgSklUQ29tcGls
ZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFuY2hQ
dHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29t
cGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
LTEpKSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3Bl
cnR5U3RvcmFnZUxvYWQgPSBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2Uo
KSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFj
dCB0YWdMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0
UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsK
ICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9hZFdpdGhQYXRjaCA9
IG1faml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKQEAgLTU2
NSw3ICs1NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAK
ICAgICB3cml0ZUJhcnJpZXIoYmFzZVBheWxvYWRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVVzZSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogCi0gICAgSklUQ29t
cGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBtX2ppdC5j
b252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgIEpJ
VENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gbV9q
aXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BS
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBKSVRDb21w
aWxlcjo6RGF0YUxhYmVsMzIgdGFnU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRjaCA9
IG1faml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogCkBAIC0yNTU0LDcgKzI1NTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJh
eTo6SlNBcnJheTogeworICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVT
OiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CkBAIC0yNTYzLDE0ICsyNTYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNwZWN1bGF0ZWQgdGhhdCBp
dCdzIHNvbWUga2luZCBvZiBhcnJheSwgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKQEAgLTI1ODIsMTIgKzI1NzUsMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI1OTcsMTMgKzI1OTEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFn
LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXls
b2FkLmdwcigpOwogCi0gICAgICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXks
IGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0
b3JMZW5ndGgpLgotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2Ug
dG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBz
cGVjdWxhdGVkIHRoYXQgaXQncyBzb21lIGtpbmQgb2YgYXJyYXksIGF0IHRoaXMgcG9pbnQuCiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOwogCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2gzMigKQEAgLTI3MTIsOCArMjcw
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxk
Myk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOwpA
QCAtMjc0MSw4ICsyNzMwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZSA9PSBBcnJheTo6SlNBcnJheSkKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKG5vZGUuYXJyYXlNb2RlKCkpKQogICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBi
YXNlLnVzZSgpOwpAQCAtMjc1NSw5ICsyNzQ0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogCiAgICAgICAgICAgICAvLyBJZiB3
ZSdyZSB3cml0aW5nIHRvIGEgaG9sZSB3ZSBtaWdodCBiZSBncm93aW5nIHRoZSBhcnJheTsgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsZW5ndGhEb2VzTm90TmVlZFVwZGF0ZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3Ro
RG9lc05vdE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVk
SW1tMzIoMSksIHByb3BlcnR5UmVnKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIocHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBwcm9wZXJ0eVJlZyk7CiAKICAgICAgICAgICAgIGxlbmd0aERvZXNOb3ROZWVkVXBk
YXRlLmxpbmsoJm1faml0KTsKQEAgLTI3NjcsNyArMjc1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVU
YWdSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09IEFycmF5OjpKU0FycmF5T3V0T2ZCb3VuZHMpIHsK
KyAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2Vzcyhub2RlLmFycmF5TW9kZSgpKSkgewog
ICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBiZXlvbmRBcnJheUJvdW5k
cywgdGhpcywKQEAgLTI4OTcsMTggKzI4ODYsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7
CiAKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMu
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwogICAgICAgICBtX2ppdC5zdG9y
ZTMyKHZhbHVlUGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICBtX2ppdC5zdG9yZTMy
KHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgbV9qaXQuYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIp
OwogICAgICAgICAKQEAgLTI5MzMsMTkgKzI5MjIsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
ZXRVbmRlZmluZWRDYXNlczsKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUikpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNl
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2
YWx1ZVRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCB2YWx1ZVBheWxvYWRHUFIpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7CiAKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpLCB2YWx1ZVRhZ0dQUikpOwogICAgICAgICAKQEAgLTM1ODcsMTQgKzM1NzYsMTQgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBjb21waWxl
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAotICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOiB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3Rv
cmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zOTU0LDcgKzM5NDMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0
cnVjdHVyZXNOb3RNYXRjaCA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IHJlc3VsdFBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogCiAgICAgICAgIC8vIEZhc3QgY2FzZQotICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0UGF5bG9hZEdQUik7
CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQ
Uik7CiAjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQogICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc091dE9mTGluZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9y
RXF1YWwsIHJlc29sdmVJbmZvR1BSLCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw3ICs0OTgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgSklUQ29t
cGlsZXI6OlBhdGNoYWJsZUp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5wYXRjaGFibGVCcmFu
Y2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJl
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkp
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlT
dG9yYWdlTG9hZCA9Ci0gICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
LCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0g
bV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6
OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CkBAIC01MzQsNyArNTM0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlTwogICAgIHdyaXRlQmFycmllcihi
YXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
LCBzY3JhdGNoR1BSKTsKIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBw
cm9wZXJ0eVN0b3JhZ2VMb2FkID0KLSAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0
b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHN0b3JlV2l0aFBh
dGNoID0gbV9qaXQuc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFi
ZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKQEAgLTI1ODQsOCArMjU4NCwyNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAgICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NU
T1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjU5NywyNyArMjYxNSwxOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIHRoYXQgdGhl
IGJhc2UgaXMgc29tZSBraW5kIG9mIGFycmF5LAotICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2lu
dC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpID09IEFy
cmF5OjpKU0FycmF5KQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgb3V0T2ZCb3VuZHMpOworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
ID09IEFycmF5OjpKU0FycmF5KQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0
T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgaG9sZSk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKLSAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50
LAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3MDMsNiArMjcxMyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYg
KGFscmVhZHlIYW5kbGVkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogdGhlIGJhc2UgbWF5IG5vdCBiZSBuZWNlc3NhcnkgZm9yIHNvbWUgYXJyYXkgYWNj
ZXNzIG1vZGVzLiBCdXQgd2UgaGF2ZSB0bworICAgICAgICAvLyBrZWVwIGl0IGFsaXZlIHRvIHRo
aXMgcG9pbnQsIHNvIGl0J3MgbGlrZWx5IHRvIGJlIGluIGEgcmVnaXN0ZXIgYW55d2F5LiBMaWtl
bHkKKyAgICAgICAgLy8gbm8gaGFybSBpbiBsb2NraW5nIGl0IGhlcmUuCiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsKICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIGNoaWxkMik7CiAgICAgICAgIApAQCAtMjcx
MCwxMSArMjcyMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SlNBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIGNoaWxkMyk7CiAKLSAgICAgICAgICAgIC8vIE1hcCBiYXNlLCBwcm9wZXJ0eSAmIHZhbHVl
IGludG8gcmVnaXN0ZXJzLCBhbGxvY2F0ZSBhIHNjcmF0Y2ggcmVnaXN0ZXIuCiAgICAgICAgICAg
ICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCkBAIC0yNzM4LDggKzI3NDksOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJl
eW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoYXJyYXlNb2RlID09
IEFycmF5OjpKU0FycmF5KQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25k
QXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsKIAog
ICAgICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTI3NTIsOSArMjc2Myw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKIAogICAgICAg
ICAgICAgLy8gSWYgd2UncmUgd3JpdGluZyB0byBhIGhvbGUgd2UgbWlnaHQgYmUgZ3Jvd2luZyB0
aGUgYXJyYXk7IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbGVuZ3RoRG9lc05v
dE5lZWRVcGRhdGUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxlbmd0aERvZXNOb3ROZWVkVXBkYXRlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIocHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIG1faml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlSZWcpOwogCiAgICAgICAgICAgICBsZW5ndGhE
b2VzTm90TmVlZFVwZGF0ZS5saW5rKCZtX2ppdCk7CkBAIC0yNzYzLDcgKzI3NzQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAvLyBTdG9y
ZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CiAKLSAgICAgICAgICAgIGlmIChhcnJheU1vZGUgPT0gQXJyYXk6OkpT
QXJyYXlPdXRPZkJvdW5kcykgeworICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFy
cmF5TW9kZSkpIHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgYmV5
b25kQXJyYXlCb3VuZHMsIHRoaXMsCkBAIC0yOTMyLDE3ICsyOTQzLDE3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6
YXJyZSBsZW5ndGhzLgogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwg
c3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc3Rv
cmFnZUxlbmd0aEdQUik7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIApA
QCAtMjk2OCwxOCArMjk3OSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2V0VW5kZWZpbmVkQ2FzZXM7
CiAgICAgICAgIHNldFVuZGVmaW5lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VMZW5ndGhHUFIpKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFs
dWVHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSk7CiAKICAgICAgICAgc2V0VW5kZWZpbmVkQ2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAg
ICAgIApAQCAtMzU2NSwxNCArMzU3NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6IHsKKyAgICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM5
MTUsNyArMzkyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICNlbmRpZgogICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1f
aml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIs
IEpJVENvbXBpbGVyOjpTY2FsZVB0ciwgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKICAgICAg
ICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyODAwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTUsMTkgKzMxNSwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FycmF5KE5vZGUmIG5vCiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3Rl
ZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEFycmF5OjpKU0FycmF5OgotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXlPdXRPZkJvdW5kczogewot
ICAgICAgICAvLyBUaGlzIGNvZGUgZHVwbGljYXRlcyB0aGUgY29kZSBiZWxvdyBpbiBhbnRpY2lw
YXRpb24gb2YgdGhpcyBjb2RlIGJlaW5nCi0gICAgICAgIC8vIHN1YnN0YW50aWFsbHkgY2hhbmdl
ZCBpbiB0aGUgZnV0dXJlLgorICAgIGNhc2UgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihIYXNBcnJheVN0b3JhZ2UpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBBUlJBWV9XSVRIX0FS
UkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNf
aW5mbykpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKTsKICAg
ICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMzAwNiwxMSArMzAxNyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHIKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3Jh
Z2VSZWcpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUKGRlc2NyaXB0b3IpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwpAQCAtMzEyNSwxMyArMzEzMSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5nCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAogICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkpTQXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SlNBcnJheU91dE9mQm91bmRzOiB7CisgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdlKTsK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkp
LCByZXN1bHRSZWcpOwogICAgICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpKTsKICAgICAgICAgICAgIApAQCAtMzIyNyw2ICszMjMyLDIwIEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmIG5vZGUpCiB7CisgICAgaWYgKGhhc0luZGV4
aW5nSGVhZGVyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksIHJlc3VsdC5ncHIoKSwgYmFzZUdQUik7CisgICAgICAgIAorICAgICAgICBzdG9yYWdl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIApAQCAtMzI0
OCwxMyArMzI2NywzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9w
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAg
ICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Tm9kZSYgbm9kZSkKIHsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUuc3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93
dGhGYWN0b3I7CisgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVl
KSk7CisKKyAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgCisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVy
dHlTdG9yYWdlLCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1
ZSkpOworICAgICAgICAKKyAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5k
IG9sZFN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gxKHRoaXMpOwpAQCAtMzI2Nyw5ICszMzA0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVJlYWxsb2NhdGVQcgogICAgICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aDsKICAgICAgICAgCi0gICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3Ro
RmFjdG9yOwotICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkp
OwogICAgIENvcGllZEFsbG9jYXRvciogY29waWVkQWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERh
dGEoKS0+aGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgIG1faml0LmxvYWRQ
dHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3JhdGNoR1BSMik7CkBA
IC0zMjgwLDEzICszMzE0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHIKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2Yo
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMik7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSkpOworICAgICAgICBzbG93
UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIC8vIFdlIGhh
dmUgc2NyYXRjaEdQUjIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3JhdGNoCiAgICAg
Zm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNldCArIHNpemVv
ZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICBtX2pp
dC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIs
IC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9Ci0g
ICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSkpOworICAgIG1faml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKICAgICAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hH
UFIyLCBtX2NvbXBpbGVJbmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NTYsOSArMTE1NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IHNpemVfdCBzaXplKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdP
cGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2JqZWN0KQogICAg
IHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIoc2l6ZSkpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBvYmplY3QsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKG9iamVjdCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RG
R09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgb2xkLCBzaXpl
X3Qgc2l6ZSkKQEAgLTExNjYsNiArMTE3MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvbGQsIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRVMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBzaXplX3Qgc2l6ZSkK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKQEAg
LTEzNzMsNyArMTM4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRU9aSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CkBAIC0xNDM4LDYgKzE0NDgsMjEg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
UF9ERkdPcGVyYXRpb25fRU8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsK
KyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFBfREZHT3BlcmF0aW9uX0VPUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBzaXplX3QgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9u
X0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1
c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9FUyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwpAQCAtMTY3Niw3ICsxNzAxLDcg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VB
Wkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBH
UFJSZWcgYXJnM1BheWxvYWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0RGR09wZXJhdGlvbl9FT1pKIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzNQYXlsb2FkLCBhcmczVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKQEAgLTIxNjQsNyArMjE4OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkNs
YXNzVHlwZTo6c19pbmZvKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJbml0aWFsaXpl
IHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCi0gICAgICAgIG1faml0LnN0
b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIENsYXNzVHlwZTo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkp
KTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
MCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSk7CiAgICAgfQogCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0
cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBib29sIGlzT3ZlcnNpemUoc2l6ZV90KTsKICAgICBzdGF0aWMgQ29waWVk
QmxvY2sqIG92ZXJzaXplQmxvY2tGb3Iodm9pZCogcHRyKTsKIAotICAgIENoZWNrZWRCb29sZWFu
IHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90LCB2b2lkKiopOwog
ICAgIENoZWNrZWRCb29sZWFuIHRyeUFsbG9jYXRlT3ZlcnNpemUoc2l6ZV90LCB2b2lkKiopOwog
ICAgIENoZWNrZWRCb29sZWFuIHRyeVJlYWxsb2NhdGVPdmVyc2l6ZSh2b2lkKiosIHNpemVfdCwg
c2l6ZV90KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTI4
MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDM1LDcgKzQzNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4gdm9pZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUs
IFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwotICAgICAgICB2b2lk
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3QsIFJlZ2lzdGVySUQgcmVzdWx0KTsKKyAg
ICAgICAgdm9pZCBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2Uoc2l6ZV90LCBwdHJkaWZmX3Qgb2Zm
c2V0RnJvbUJhc2UsIFJlZ2lzdGVySUQgcmVzdWx0KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3Rl
cklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxs
b2NhdGVKU0FycmF5KHVuc2lnbmVkIHZhbHVlc1JlZ2lzdGVyLCB1bnNpZ25lZCBsZW5ndGgsIFJl
Z2lzdGVySUQgY2VsbFJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUmVzdWx0LCBSZWdpc3RlcklE
IHN0b3JhZ2VQdHIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDcg
KzQyNiw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHIKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKCZDbGFzc1R5cGU6OnNfaW5mbyksIEFkZHJlc3MocmVzdWx0
LCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSk7CiAKICAgICAvLyBpbml0aWFsaXplIHRoZSBv
YmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKDApLCBBZGRyZXNzKHJlc3VsdCwgQ2xhc3NUeXBlOjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSkpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MocmVzdWx0LCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwg
UmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKQEAgLTQzNCw3ICs0MzQsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplCiAgICAgZW1pdEFsbG9j
YXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4oc3RydWN0dXJlLCByZXN1
bHQsIHNjcmF0Y2gpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3Rv
cmFnZShzaXplX3Qgc2l6ZSwgUmVnaXN0ZXJJRCByZXN1bHQpCitpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzaXplX3Qgc2l6ZSwgcHRyZGlmZl90IG9mZnNldEZyb21C
YXNlLCBSZWdpc3RlcklEIHJlc3VsdCkKIHsKICAgICBDb3BpZWRBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwogCkBAIC00NDMsMzcg
KzQ0MywzMiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnCiAgICAg
c3RvcmVQdHIocmVzdWx0LCAmYWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG5l
Z1B0cihyZXN1bHQpOwogICAgIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3MoJmFsbG9jYXRvci0+bV9j
dXJyZW50UGF5bG9hZEVuZCksIHJlc3VsdCk7Ci0gICAgc3ViUHRyKFRydXN0ZWRJbW0zMihzaXpl
KSwgcmVzdWx0KTsKKyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKHNpemUgLSBvZmZzZXRGcm9tQmFz
ZSksIHJlc3VsdCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSh1
bnNpZ25lZCB2YWx1ZXNSZWdpc3RlciwgdW5zaWduZWQgbGVuZ3RoLCBSZWdpc3RlcklEIGNlbGxS
ZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQog
ewogICAgIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgsIDRVKTsKLSAg
ICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBKU0FycmF5OjpzdG9yYWdlU2l6ZShpbml0aWFsTGVu
Z3RoKTsKKyAgICBzaXplX3QgaW5pdGlhbFN0b3JhZ2UgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgw
LCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoaW5pdGlhbExlbmd0aCkpOwogCiAgICAg
Ly8gV2UgYWxsb2NhdGUgdGhlIGJhY2tpbmcgc3RvcmUgZmlyc3QgdG8gZW5zdXJlIHRoYXQgZ2Fy
YmFnZSBjb2xsZWN0aW9uIAogICAgIC8vIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyBKU0FycmF5IGlu
aXRpYWxpemF0aW9uLgotICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShpbml0aWFsU3RvcmFn
ZSwgc3RvcmFnZVJlc3VsdCk7CisgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKGluaXRpYWxT
dG9yYWdlLCBzaXplb2YoSW5kZXhpbmdIZWFkZXIpLCBzdG9yYWdlUmVzdWx0KTsKIAogICAgIC8v
IEFsbG9jYXRlIHRoZSBjZWxsIGZvciB0aGUgYXJyYXkuCiAgICAgZW1pdEFsbG9jYXRlQmFzaWNK
U09iamVjdDxKU0FycmF5LCBmYWxzZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpLCBjZWxsUmVzdWx0LCBzdG9yYWdlUHRyKTsKIAog
ICAgIC8vIFN0b3JlIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8gaW4gdGhlIEFycmF5U3RvcmFnZS4K
LSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5
U3RvcmFnZTo6YWxsb2NCYXNlT2Zmc2V0KCkpKTsKICAgICBzdG9yZTMyKEltbTMyKGxlbmd0aCks
IEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwog
ICAgIHN0b3JlMzIoSW1tMzIobGVuZ3RoKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0
b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKEltbTMyKGlu
aXRpYWxMZW5ndGgpLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhz
dG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OmluZGV4Qmlhc09mZnNldCgpKSk7CisgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3Jh
Z2U6OnNwYXJzZU1hcE9mZnNldCgpKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3bHkgYWxsb2Nh
dGVkIEFycmF5U3RvcmFnZS4KLSAgICBzdG9yZVB0cihzdG9yYWdlUmVzdWx0LCBBZGRyZXNzKGNl
bGxSZXN1bHQsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHN0b3Jh
Z2VSZXN1bHQsIEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgdmVjdG9yIGxlbmd0aCBhbmQgaW5kZXggYmlhcy4KLSAg
ICBzdG9yZTMyKEltbTMyKGluaXRpYWxMZW5ndGgpLCBBZGRyZXNzKGNlbGxSZXN1bHQsIEpTQXJy
YXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MoY2VsbFJlc3VsdCwgSlNBcnJheTo6aW5kZXhCaWFzT2Zmc2V0KCkpKTsKLQotICAg
IC8vIEluaXRpYWxpemUgdGhlIHNwYXJzZSB2YWx1ZSBtYXAuCi0gICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cigwKSwgQWRkcmVzcyhjZWxsUmVzdWx0LCBKU0FycmF5OjpzcGFyc2VWYWx1ZU1hcE9m
ZnNldCgpKSk7Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgorICAgIC8v
IFN0b3JlIHRoZSB2YWx1ZXMgd2UgaGF2ZS4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHN0b3JhZ2VQdHIpOwpAQCAtNDg1LDE2ICs0ODAsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRk
cmVzcyhzdG9yYWdlUmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpICsgc2l6ZW9mKHVpbnQzMl90KSkpOwogI2VuZGlm
CiAgICAgfQotCi0gICAgLy8gWmVybyBvdXQgdGhlIHJlbWFpbmluZyBzbG90cy4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZW5ndGg7IGkgPCBpbml0aWFsTGVuZ3RoOyBpKyspIHsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKHN0
b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSAqIGkpKTsKLSNlbHNlCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpLCBBZGRyZXNzKHN0
b3JhZ2VSZXN1bHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSAqIGkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSkpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhzdG9yYWdl
UmVzdWx0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiBpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKSk7Ci0jZW5kaWYKLSAgICB9CiB9CiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEy
ODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NjgsNyArMTY2OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5j
X2V4cChJbnN0cnVjdGkKIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBsZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShKU0FycmF5
OjpzdG9yYWdlU2l6ZShsZW5ndGgpKSkgeworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bGVuZ3RoKSkpKSB7CiAgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9u
ZXdfYXJyYXkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAt
MTY4Nyw3ICsxNjg3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19hcnJheShJbnN0cnVj
dAogICAgIC8vIElmIHRoZSBhbGxvY2F0aW9uIHdvdWxkIGJlIG92ZXJzaXplLCB3ZSB3aWxsIGFs
cmVhZHkgbWFrZSB0aGUgcHJvcGVyIHN0dWIgY2FsbCBhYm92ZSBpbiAKICAgICAvLyBlbWl0X29w
X25ld19hcnJheS4KICAgICBpbnQgbGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoSlNBcnJheTo6c3RvcmFnZVNp
emUobGVuZ3RoKSkpCisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKEJ1dHRlcmZseTo6
dG90YWxTaXplKDAsIDAsIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIE5vdCBlbm91Z2ggc3Bh
Y2UgaW4gQ29waWVkU3BhY2UgZm9yIHN0b3JhZ2UuCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBOb3QgZW5vdWdoIHNwYWNlIGluIE1hcmtlZFNwYWNlIGZvciBjZWxsLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTAgKzIxMywxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkp
OwogICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNl
dCgpKSwgcmVnVDMpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDIsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJl
c3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgCiAg
ICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKICAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVnVDApOyAvLyBwYXlsb2FkCkBAIC0yNzIsMTEgKzI3MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
IHN0b3JlUHRyKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOwogI2VuZGlmCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoSGFzQXJyYXlTdG9yYWdlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdU
MSwgcmVnVDEsIHJlZ1QzLCBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCByZWdUMyk7CiAgICAgCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMy
KEVxdWFsLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CiAg
ICAgCkBAIC0yODgsMTAgKzI4OCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKElu
c3RydWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVk
SW1tMzIoMSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKS5saW5rVG8o
c3RvcmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMiwgQWRkcmVzcyhy
ZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7CiAgICAgCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOwot
ICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVz
dWx0LCB0aGlzKTsKICAgICAKICAgICBlbmQubGluayh0aGlzKTsKQEAgLTM0Myw3ICszNDMsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKCkKICAgICBQYXRjaGFibGVKdW1wIHN0
cnVjdHVyZUNoZWNrID0gcGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJl
LCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1
bHRTdHJ1Y3R1cmUpKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc3RydWN0dXJlQ2hlY2spOwogICAgIAot
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJs
ZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFn
ZSgpKSwgcmVnVDIpOworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxv
YWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVnVDIpOwogICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFi
ZWwxID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDIs
IHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7IC8vIHBheWxvYWQKICAgICBEYXRh
TGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsMiA9IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJl
c3NPZmZzZXRQYXRjaChBZGRyZXNzKHJlZ1QyLCBwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0KSwg
cmVnVDEpOyAvLyB0YWcKICAgICAKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgRGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29t
cGFyZTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
IFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVs
dFN0cnVjdHVyZSkpKSk7CiAgICAgCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlT
dG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZWdUMSk7CisgICAgQ29udmVydGlibGVMb2Fk
TGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgRGF0YUxhYmVs
MzIgZGlzcGxhY2VtZW50TGFiZWwxID0gc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QxLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zmc2V0KSk7IC8vIHBheWxv
YWQKICAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbDIgPSBzdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gocmVnVDMsIEFkZHJlc3MocmVnVDEsIHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQpKTsgLy8gdGFnCiAgICAgCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChJbnN0cnVjdAogdm9pZCBKSVQ6OmNvbXBpbGVQdXREaXJlY3RPZmZz
ZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHZhbHVl
UGF5bG9hZCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc091dE9m
TGluZU9mZnNldChjYWNoZWRPZmZzZXQpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7CisgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsK
ICAgICBlbWl0U3RvcmUoaW5kZXhSZWxhdGl2ZVRvQmFzZShjYWNoZWRPZmZzZXQpLCB2YWx1ZVRh
ZywgdmFsdWVQYXlsb2FkLCBiYXNlKTsKIH0KIApAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICB9CiAgICAgCiAgICAgUmVnaXN0
ZXJJRCB0ZW1wID0gcmVzdWx0UGF5bG9hZDsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgdGVtcCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXApOwogICAgIGVt
aXRMb2FkKGluZGV4UmVsYXRpdmVUb0Jhc2UoY2FjaGVkT2Zmc2V0KSwgcmVzdWx0VGFnLCByZXN1
bHRQYXlsb2FkLCB0ZW1wKTsKIH0KIApAQCAtNDY5LDkgKzQ2OSw5IEBAIHZvaWQgSklUOjpjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBsb2FkUHRyKGJhc2UtPmFkZHJlc3NPZk91dE9mTGluZVN0b3JhZ2UoKSwgcmVzdWx0VGFn
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZXN1bHRUYWcsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFn
ZShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZXN1bHRUYWcsIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShjYWNo
ZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZyk7CisgICAgbG9hZFB0cihiYXNl
LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdFRhZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVz
dWx0VGFnLCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRQYXlsb2FkKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZXN1bHRUYWcsIG9mZnNl
dEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KQpAQCAt
NjIwLDExICs2MjAsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgbV9jb2Rl
QmxvY2stPmdldE9yQWRkQXJyYXlQcm9maWxlKHN0dWJJbmZvLT5ieXRlY29kZUluZGV4KS0+YWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAjZW5kaWYKLSAgICBKdW1wIGZhaWx1cmVDYXNl
czEgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKTsKKyAgICBKdW1w
IGZhaWx1cmVDYXNlczEgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkpOwogICAgIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBm
cm9tIHRoZSBzdG9yYWdlCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTQXJyYXk6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgcmVnVDIp
OwogICAgIAogICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMiwg
VHJ1c3RlZEltbTMyKElOVF9NQVgpKTsKICAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7CkBAIC0xMDI5
LDcgKzEwMjksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAg
ICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9PSBNYXlCZUZpbmFsKSB7CiAgICAgICAgIEp1
bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoaW5s
aW5lU3RvcmFnZUNhcGFjaXR5KSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09i
amVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBiYXNlKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwogICAg
ICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAg
IGlzSW5saW5lLmxpbmsodGhpcyk7CkBAIC0xMDQxLDcgKzEwNDEsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAg
ICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7Cisg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBiYXNlKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgbG9hZDMyKEJhc2VJ
bmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRQYXlsb2FkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihy
ZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0
U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKIAotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTQXJyYXk6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCBy
ZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCkpOwpAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUK
ICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAgICAg
SnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aCk7CiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
ICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGJyZWFrcG9pbnQoKTsK
ICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2Ny
YXRjaCk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAg
c2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwpAQCAtMjM5LDEwICsyMzksMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKICAgICBzdG9yZVB0cihyZWdUMiwgY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
OjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEhhc0FycmF5U3RvcmFnZSkpKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBl
bXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogCiAgICAg
TGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgCiAgICAgZW1wdHkubGluayh0aGlz
KTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgYnJhbmNoMzIo
QmVsb3csIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX2xlbmd0aCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworICAgIGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkp
LmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CiAKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7CiAgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
CiAKQEAgLTQwMyw3ICs0MDMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGlu
dCBiYXNlCiAgICAgUGF0Y2hhYmxlSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IHBhdGNoYWJsZUJyYW5j
aFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIGFkZFNsb3dD
YXNlKHN0cnVjdHVyZUNoZWNrKTsKIAotICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5
U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIENvbnZlcnRpYmxlTG9h
ZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwogICAgIERhdGFMYWJl
bENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zm
c2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1Qw
KTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgRGF0YUxhYmVsUHRyIHN0
cnVjdHVyZVRvQ29tcGFyZTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90
RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1
cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hH
ZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKSk7CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBw
cm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlZ1QyKTsKKyAgICBDb252ZXJ0
aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBE
YXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOwog
CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRCeUlkKTsKQEAgLTUw
OSw4ICs1MDksOCBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwotICAgIHN0b3JlUHRy
KHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5l
U3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOworICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRy
ZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNl
dCkpKTsKIH0KIAogLy8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBz
dG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgpAQCAtNTIxLDggKzUyMSw4IEBAIHZvaWQgSklU
Ojpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXpl
b2YoSlNWYWx1ZSkgKiBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSksIHJl
c3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFs
dWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAKIHZv
aWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3RlcklE
IHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQpAQCAtNTMyLDggKzUzMiw4IEBA
IHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWMKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKLSAgICBsb2FkUHRyKGJhc2UtPmFkZHJlc3NPZk91dE9mTGluZVN0b3Jh
Z2UoKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbk91dE9m
TGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSwgcmVzdWx0KTsKKyAgICBsb2FkUHRyKGJhc2UtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRP
ZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHQpOwogfQogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpCkBAIC02NjAsMTEg
KzY2MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIHN0b3JlUHRyKHJlZ1QzLCBtX2NvZGVCbG9jay0+
Z2V0T3JBZGRBcnJheVByb2ZpbGUoc3R1YkluZm8tPmJ5dGVjb2RlSW5kZXgpLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZSgpKTsKICNlbmRpZgotICAgIEp1bXAgZmFpbHVyZUNhc2VzMSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMywgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZz
ZXQoKSksIFRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpOworICAgIEp1bXAgZmFpbHVy
ZUNhc2VzMSA9IGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSk7
CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3Rv
cmFnZQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSwgcmVnVDMpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZWdUMik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVt
cCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
MCkpOwogCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyODAw
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTA0LDggKzE1MDQsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCos
IG9wX3B1dF9iCiAgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVj
dCogYmFzZSA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3Rv
cmFnZSA9IGJhc2UtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5l
d1NpemUpOwotICAgIGJhc2UtPnNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3Rv
cmFnZSwgbmV3U3RydWN0dXJlKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IGJhc2UtPmdy
b3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIG9sZFNpemUsIG5ld1NpemUpOworICAgIGJh
c2UtPnNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBidXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiAK
ICAgICByZXR1cm4gYmFzZTsKIH0KQEAgLTI0MjIsNyArMjQyMiw3IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gc3Rh
Y2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IHN0YWNr
RnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7Ci0KKyAgICAKICAgICBpZiAoTElLRUxZKGJhc2VWYWx1
ZS5pc0NlbGwoKSAmJiBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKICAgICAgICAgaWYgKEpTVmFs
dWUgcmVzdWx0ID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5mYXN0R2V0T3duUHJvcGVydHkoY2FsbEZy
YW1lLCBhc1N0cmluZyhzdWJzY3JpcHQpLT52YWx1ZShjYWxsRnJhbWUpKSkgewogICAgICAgICAg
ICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjUxNSwxMiArMjUxNSwxMiBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfYnlfdmFsCiAKICAgICBpZiAoTElLRUxZKHN1YnNj
cmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUlu
dDMyKCk7Ci0gICAgICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSkgewotICAgICAgICAgICAg
SlNBcnJheSoganNBcnJheSA9IGFzQXJyYXkoYmFzZVZhbHVlKTsKLSAgICAgICAgICAgIGlmIChq
c0FycmF5LT5jYW5TZXRJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqc0FycmF5LT5zZXRJbmRl
eCgqZ2xvYmFsRGF0YSwgaSwgdmFsdWUpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgICAgICAgICAgaWYgKG9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAg
ICAgICAgICAgIG9iamVjdC0+c2V0SW5kZXhRdWlja2x5KCpnbG9iYWxEYXRhLCBpLCB2YWx1ZSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJheTo6cHV0QnlJbmRleChq
c0FycmF5LCBjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRC
eUluZGV4KG9iamVjdCwgY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJhc2VWYWx1
ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
PmlzU3RyaWN0TW9kZSgpKTsKICAgICB9IGVsc2UgaWYgKGlzTmFtZShzdWJzY3JpcHQpKSB7CkBA
IC0zMzc1LDcgKzMzNzUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfZ2V0
dGVyCiAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IGFzT2JqZWN0KGdldHRlcikpOwogICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0
KHNldHRlcikpOwotICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCBhY2Nlc3NvciwgQWNj
ZXNzb3IpOworICAgIGJhc2VPYmotPnB1dERpcmVjdEFjY2Vzc29yKGNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgYWNjZXNzb3IsIEFjY2Vzc29yKTsKIH0KIAogREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDcgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVl
LmdldChleGVjLCBpZGVudCwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgTExJTlRfT1AoMSkgPSByZXN1bHQ7Ci0KKyAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19B
Q0NFU1NfU0xPVwogICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xv
dC5pc0NhY2hlYWJsZSgpCkBAIC04NzcsNyArODc3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9m
ZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVl
KSArIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxs
aW50X29wX2dldF9ieV9pZF9vdXRfb2ZfbGluZSk7Ci0gICAgICAgICAgICAgICAgcGNbNV0udS5v
cGVyYW5kID0gb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpOworICAgICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTM5LDcgKzkzOSw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpICsgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwY1s1
XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNp
emVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcGNbNl0udS5zdHJ1Y3R1cmUuc2V0
KAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKQEAgLTk2Nyw3ICs5
NjcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAg
ICAgICAgICAgICAgIHBjWzVdLnUub3BlcmFuZCA9IG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSArIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lk
X291dF9vZl9saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgcGNbNV0udS5vcGVyYW5kID0gb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBwY1s1XS51Lm9wZXJhbmQgPSBvZmZzZXRJbkJ1dHRl
cmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNDYsMTIgKzEwNDYsMTIgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogICAgIAogICAgIGlmIChM
SUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJz
Y3JpcHQuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGlzSlNBcnJheShiYXNlVmFsdWUpKSB7Ci0g
ICAgICAgICAgICBKU0FycmF5KiBqc0FycmF5ID0gYXNBcnJheShiYXNlVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKGpzQXJyYXktPmNhblNldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpzQXJy
YXktPnNldEluZGV4KGdsb2JhbERhdGEsIGksIHZhbHVlKTsKKyAgICAgICAgaWYgKGJhc2VWYWx1
ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKKyAgICAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEluZGV4UXVpY2tseShp
KSkKKyAgICAgICAgICAgICAgICBvYmplY3QtPnNldEluZGV4UXVpY2tseShnbG9iYWxEYXRhLCBp
LCB2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgSlNBcnJheTo6cHV0
QnlJbmRleChqc0FycmF5LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5
SW5kZXgob2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0
TW9kZSgpKTsKICAgICAgICAgICAgIExMSU5UX0VORCgpOwogICAgICAgICB9CiAgICAgICAgIGJh
c2VWYWx1ZS5wdXRCeUluZGV4KGV4ZWMsIGksIHZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCkpOwpAQCAtMTEyOCw3ICsxMTI4LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9nZXR0ZQogICAgIGlmICghc2V0dGVyLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZ2xvYmFsRGF0YSwgYXNPYmplY3Qoc2V0dGVyKSk7CiAg
ICAgYmFzZU9iai0+cHV0RGlyZWN0QWNjZXNzb3IoCi0gICAgICAgIGdsb2JhbERhdGEsCisgICAg
ICAgIGV4ZWMsCiAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUu
b3BlcmFuZCksCiAgICAgICAgIGFjY2Vzc29yLCBBY2Nlc3Nvcik7CiAgICAgTExJTlRfRU5EKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTk0NywyMSArOTQ3LDIxIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiBtYWNybyBsb2Fk
UHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldCwgb2Jq
ZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2VydChtYWNybyAob2spIGJpZ3Rl
cSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCiAgICAgbmVn
aSBwcm9wZXJ0eU9mZnNldAotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vb
b2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkaSBUYWdPZmZzZXQg
KyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3Bl
cnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhd
LCBwYXlsb2FkCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3Jh
Z2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3Jh
Z2VDYXBhY2l0eSAtIDEpICogOCAtIHNpemVvZiBJbmRleGluZ0hlYWRlcltvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAo
SW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3Jv
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0
b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9y
YWdlQ2FwYWNpdHksIC5pc0lubGluZQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0
b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBsb2FkcCBKU09i
amVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAg
ICBuZWdpIHByb3BlcnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFk
ZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9p
bmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDEpICogOCArIHNpemVvZiBJ
bmRleGluZ0hlYWRlciwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRpIFRhZ09m
ZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwg
cHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgKElubGlu
ZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMSkgKiA4IC0gc2l6ZW9mIEluZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHBy
b3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gcmVzb2x2
ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTI4NywxMiArMTI4Nyw5IEBAIF9sbGludF9vcF9nZXRf
YnlfdmFsOgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCiAgICAgICAgIHN0b3JlcCB0MywgQXJyYXlQ
cm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlW3QyXQogICAgIGVuZAotICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MgotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRhW3QyXSwgdDIK
LSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDJdLCB0MgotICAgIGJw
bmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MiwgLm9wR2V0QnlWYWxTbG93Ci0gICAg
bG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QwXSwgdDMKLSAgICBiaWFlcSB0MSwgSlNBcnJheTo6
bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBidHB6IFN0cnVjdHVyZTo6
bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFsU2xvdworICAg
IGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYmlhZXEgdDEsIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5ndGhbdDBdLCAu
b3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaSA0W1BDXSwgdDAKICAgICBsb2FkaSBBcnJheVN0b3Jh
Z2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QzLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgQXJyYXlT
dG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDMsIHQxLCA4XSwgdDEKQEAgLTEzNzMs
MTIgKzEzNzAsOSBAQCBfbGxpbnRfb3BfcHV0X2J5X3ZhbDoKICAgICBpZiBWQUxVRV9QUk9GSUxF
UgogICAgICAgICBzdG9yZXAgdDMsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZVt0
MF0KICAgICBlbmQKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2Rl
QmxvY2s6Om1fZ2xvYmFsRGF0YVt0MF0sIHQwCi0gICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0Fy
cmF5Q2xhc3NJbmZvW3QwXSwgdDAKLSAgICBicG5lcSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3Qz
XSwgdDAsIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJpYWVxIHQyLCBKU0FycmF5OjptX3ZlY3Rvckxl
bmd0aFt0MV0sIC5vcFB1dEJ5VmFsU2xvdwotICAgIGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0
MV0sIHQwCisgICAgYnRweiBTdHJ1Y3R1cmU6Om1faW5kZXhpbmdUeXBlW3QzXSwgSGFzQXJyYXlT
dG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDFdLCB0MAorICAgIGJpYWVxIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdI
ZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTbG93CiAgICAgYmllcSBBcnJh
eVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MiwgOF0sIEVtcHR5VmFsdWVUYWcs
IC5vcFB1dEJ5VmFsRW1wdHkKIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6CiAgICAgbG9hZGkgMTJb
UENdLCB0MwpAQCAtMTM5MCw5ICsxMzg0LDkgQEAgX2xsaW50X29wX3B1dF9ieV92YWw6CiAKIC5v
cFB1dEJ5VmFsRW1wdHk6CiAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVzSW5W
ZWN0b3JbdDBdCi0gICAgYmliIHQyLCBBcnJheVN0b3JhZ2U6Om1fbGVuZ3RoW3QwXSwgLm9wUHV0
QnlWYWxTdG9yZVJlc3VsdAorICAgIGJpYiB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQK
ICAgICBhZGRpIDEsIHQyLCB0MQotICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjptX2xlbmd0
aFt0MF0KKyAgICBzdG9yZWkgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6bV9wdWJsaWNMZW5ndGhbdDBdCiAgICAgam1wIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQK
IAogLm9wUHV0QnlWYWxTbG93OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEyODAwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC04MDYsMjAgKzgwNiwyMCBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgog
bWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVydHlP
ZmZzZXRBc1BvaW50ZXIsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGFzc2VydChtYWNy
byAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgSW5saW5lU3RvcmFnZUNhcGFj
aXR5LCBvayBlbmQpCiAgICAgbmVncCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlcgotICAgIGxvYWRw
IEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4XSwgdmFsdWUKKyAgICBsb2Fk
cCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3Jh
Z2UKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSkgKiA4IC0gc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4
XSwgdmFsdWUKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGJpbHQgcHJvcGVy
dHlPZmZzZXRBc0ludCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKLSAgICBsb2Fk
cCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCisgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3Jh
Z2VdLCBvYmplY3RBbmRTdG9yYWdlCiAgICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAg
c3hpMnAgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAu
cmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFn
ZSAtIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UKKyAg
ICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSAtIChJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAxKSAqIDggKyBzaXplb2YgSW5kZXhpbmdIZWFkZXIsIG9iamVjdEFuZFN0b3JhZ2UK
IC5yZWFkeToKLSAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJbnQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxKSAqIDggLSBzaXplb2YgSW5kZXhpbmdIZWFkZXJbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFj
cm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTEzMiwxMiArMTEzMiw5IEBAIF9sbGlu
dF9vcF9nZXRfYnlfdmFsOgogICAgIGlmIFZBTFVFX1BST0ZJTEVSCiAgICAgICAgIHN0b3JlcCB0
MywgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlW3QyXQogICAgIGVuZAotICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCB0MgotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxEYXRh
W3QyXSwgdDIKLSAgICBsb2FkcCBKU0dsb2JhbERhdGE6OmpzQXJyYXlDbGFzc0luZm9bdDJdLCB0
MgotICAgIGJwbmVxIFN0cnVjdHVyZTo6bV9jbGFzc0luZm9bdDNdLCB0MiwgLm9wR2V0QnlWYWxT
bG93Ci0gICAgbG9hZHAgSlNBcnJheTo6bV9zdG9yYWdlW3QwXSwgdDMKLSAgICBiaWFlcSB0MSwg
SlNBcnJheTo6bV92ZWN0b3JMZW5ndGhbdDBdLCAub3BHZXRCeVZhbFNsb3cKKyAgICBidGJ6IFN0
cnVjdHVyZTo6bV9pbmRleGluZ1R5cGVbdDNdLCBIYXNBcnJheVN0b3JhZ2UsIC5vcEdldEJ5VmFs
U2xvdworICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0MF0sIHQzCisgICAgYmlhZXEg
dDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV92ZWN0b3JMZW5n
dGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKICAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MAogICAg
IGxvYWRwIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHB6IHQy
LCAub3BHZXRCeVZhbFNsb3cKQEAgLTEyMTcsMTIgKzEyMTQsOSBAQCBfbGxpbnRfb3BfcHV0X2J5
X3ZhbDoKICAgICBpZiBWQUxVRV9QUk9GSUxFUgogICAgICAgICBzdG9yZXAgdDMsIEFycmF5UHJv
ZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZVt0MF0KICAgICBlbmQKLSAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsRGF0YVt0MF0sIHQwCi0g
ICAgbG9hZHAgSlNHbG9iYWxEYXRhOjpqc0FycmF5Q2xhc3NJbmZvW3QwXSwgdDAKLSAgICBicG5l
cSBTdHJ1Y3R1cmU6Om1fY2xhc3NJbmZvW3QzXSwgdDAsIC5vcFB1dEJ5VmFsU2xvdwotICAgIGJp
YWVxIHQyLCBKU0FycmF5OjptX3ZlY3Rvckxlbmd0aFt0MV0sIC5vcFB1dEJ5VmFsU2xvdwotICAg
IGxvYWRwIEpTQXJyYXk6Om1fc3RvcmFnZVt0MV0sIHQwCisgICAgYnRieiBTdHJ1Y3R1cmU6Om1f
aW5kZXhpbmdUeXBlW3QzXSwgSGFzQXJyYXlTdG9yYWdlLCAub3BQdXRCeVZhbFNsb3cKKyAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAorICAgIGJpYWVxIHQyLCAtc2l6ZW9m
IEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fdmVjdG9yTGVuZ3RoW3QwXSwgLm9w
UHV0QnlWYWxTbG93CiAgICAgYnRweiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MiwgOF0s
IC5vcFB1dEJ5VmFsRW1wdHkKIC5vcFB1dEJ5VmFsU3RvcmVSZXN1bHQ6CiAgICAgbG9hZGlzIDI0
W1BCLCBQQywgOF0sIHQzCkBAIC0xMjMzLDkgKzEyMjcsOSBAQCBfbGxpbnRfb3BfcHV0X2J5X3Zh
bDoKIAogLm9wUHV0QnlWYWxFbXB0eToKICAgICBhZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1W
YWx1ZXNJblZlY3Rvclt0MF0KLSAgICBiaWIgdDIsIEFycmF5U3RvcmFnZTo6bV9sZW5ndGhbdDBd
LCAub3BQdXRCeVZhbFN0b3JlUmVzdWx0CisgICAgYmliIHQyLCAtc2l6ZW9mIEluZGV4aW5nSGVh
ZGVyICsgSW5kZXhpbmdIZWFkZXI6Om1fcHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxTdG9y
ZVJlc3VsdAogICAgIGFkZGkgMSwgdDIsIHQxCi0gICAgc3RvcmVpIHQxLCBBcnJheVN0b3JhZ2U6
Om1fbGVuZ3RoW3QwXQorICAgIHN0b3JlaSB0MSwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjptX3B1YmxpY0xlbmd0aFt0MF0KICAgICBqbXAgLm9wUHV0QnlWYWxTdG9y
ZVJlc3VsdAogCiAub3BQdXRCeVZhbFNsb3c6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxMjgwMDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDExIEBAIGVsc2UKICAgICBjb25zdCBQYXlsb2Fk
T2Zmc2V0ID0gMAogZW5kCiAKKyMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJm
bGllcy4KK2NvbnN0IElzQXJyYXkgPSAxCitjb25zdCBIYXNBcnJheVN0b3JhZ2UgPSA4Citjb25z
dCBBbGxBcnJheVR5cGVzID0gMTUKKwogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5
cGUgPSA1CiBjb25zdCBPYmplY3RUeXBlID0gMTMKQEAgLTM0MSw3ICszNDYsNyBAQCBtYWNybyBh
bGxvY2F0ZUJhc2ljSlNPYmplY3Qoc2l6ZUNsYXNzSW5kCiAgICAgICAgIGxvYWRwIGNsYXNzSW5m
b09mZnNldFtzY3JhdGNoMV0sIHNjcmF0Y2gyCiAgICAgICAgIHN0b3JlcCBzY3JhdGNoMiwgW3Jl
c3VsdF0KICAgICAgICAgc3RvcmVwIHN0cnVjdHVyZSwgSlNDZWxsOjptX3N0cnVjdHVyZVtyZXN1
bHRdCi0gICAgICAgIHN0b3JlcCAwLCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW3Jlc3Vs
dF0KKyAgICAgICAgc3RvcmVwIDAsIEpTT2JqZWN0OjptX2J1dHRlcmZseVtyZXN1bHRdCiAgICAg
ZW5kCiBlbmQKIApAQCAtNTE2LDcgKzUyMSw3IEBAIG1hY3JvIHdpdGhJbmxpbmVTdG9yYWdlKG9i
amVjdCwgcHJvcGVydHkKIGVuZAogCiBtYWNybyB3aXRoT3V0T2ZMaW5lU3RvcmFnZShvYmplY3Qs
IHByb3BlcnR5U3RvcmFnZSwgY29udGludWF0aW9uKQotICAgIGxvYWRwIEpTT2JqZWN0OjptX291
dE9mTGluZVN0b3JhZ2Vbb2JqZWN0XSwgcHJvcGVydHlTdG9yYWdlCisgICAgbG9hZHAgSlNPYmpl
Y3Q6Om1fYnV0dGVyZmx5W29iamVjdF0sIHByb3BlcnR5U3RvcmFnZQogICAgICMgSW5kaWNhdGUg
dGhhdCB0aGUgcHJvcGVydHlTdG9yYWdlIHJlZ2lzdGVyIG5vdyBwb2ludHMgdG8gdGhlCiAgICAg
IyBwcm9wZXJ0eSBzdG9yYWdlLCBhbmQgdGhhdCB0aGUgb2JqZWN0IHJlZ2lzdGVyIG1heSBiZSBy
ZXVzZWQKICAgICAjIGlmIHRoZSBvYmplY3QgcG9pbnRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCBib29sIEFyZ3VtZW50czo6
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIH0KIAogYm9vbCBBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSAKQEAgLTMwOCw3ICszMDgsNyBAQCBib29sIEFyZ3VtZW50czo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplCiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgeWV0
IHByZXNlbnQgb24gdGhlIG9iamVjdCwgYW5kIGlzIG5vdCB5ZXQgbWFya2VkIGFzIGRlbGV0ZWQs
IHRoZW4gYWRkIGl0IG5vdy4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIGlm
ICgoIXRoaXNPYmplY3QtPmQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIXRoaXNPYmplY3QtPmQtPmRl
bGV0ZWRBcmd1bWVudHNbaV0pICYmICFKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgICAgICBvYmplY3QtPnB1
dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+YXJn
dW1lbnQoaSkuZ2V0KCksIDApOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RNYXlCZUlu
ZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+YXJndW1lbnQoaSkuZ2V0KCkpOwog
ICAgICAgICBpZiAoIUJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdykpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsOCBAQAogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29udmVudGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRpb25zLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnZlbnRp
b25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFy
cmF5Q29udmVudGlvbnNfaAorI2RlZmluZSBBcnJheUNvbnZlbnRpb25zX2gKKworI2luY2x1ZGUg
IkluZGV4aW5nSGVhZGVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisjZGVmaW5lIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZIDAKKworLy8gT3ZlcnZp
ZXcgb2YgSlNBcnJheQorLy8KKy8vIFByb3BlcnRpZXMgb2YgSlNBcnJheSBvYmplY3RzIG1heSBi
ZSBzdG9yZWQgaW4gb25lIG9mIHRocmVlIGxvY2F0aW9uczoKKy8vICAgKiBUaGUgcmVndWxhciBK
U09iamVjdCBwcm9wZXJ0eSBtYXAuCisvLyAgICogQSBzdG9yYWdlIHZlY3Rvci4KKy8vICAgKiBB
IHNwYXJzZSBtYXAgb2YgYXJyYXkgZW50cmllcy4KKy8vCisvLyBQcm9wZXJ0aWVzIHdpdGggbm9u
LW51bWVyaWMgaWRlbnRpZmllcnMsIHdpdGggaWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IHJlcHJl
c2VudGFibGUKKy8vIGFzIGFuIHVuc2lnbmVkIGludGVnZXIsIG9yIHdoZXJlIHRoZSB2YWx1ZSBp
cyBncmVhdGVyIHRoYW4gIE1BWF9BUlJBWV9JTkRFWAorLy8gKHNwZWNpZmljYWxseSwgdGhpcyBp
cyBvbmx5IG9uZSBwcm9wZXJ0eSAtIHRoZSB2YWx1ZSAweEZGRkZGRkZGVSBhcyBhbiB1bnNpZ25l
ZCAzMi1iaXQKKy8vIGludGVnZXIpIGFyZSBub3QgY29uc2lkZXJlZCBhcnJheSBpbmRpY2VzIGFu
ZCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgSlNPYmplY3QgcHJvcGVydHkgbWFwLgorLy8KKy8vIEFs
bCBwcm9wZXJ0aWVzIHdpdGggYSBudW1lcmljIGlkZW50aWZlciwgcmVwcmVzZW50YWJsZSBhcyBh
biB1bnNpZ25lZCBpbnRlZ2VyIGksCisvLyB3aGVyZSAoaSA8PSBNQVhfQVJSQVlfSU5ERVgpLCBh
cmUgYW4gYXJyYXkgaW5kZXggYW5kIHdpbGwgYmUgc3RvcmVkIGluIGVpdGhlciB0aGUKKy8vIHN0
b3JhZ2UgdmVjdG9yIG9yIHRoZSBzcGFyc2UgbWFwLiBBbiBhcnJheSBpbmRleCBpIHdpbGwgYmUg
aGFuZGxlZCBpbiB0aGUgZm9sbG93aW5nCisvLyBmYXNoaW9uOgorLy8KKy8vICAgKiBXaGVyZSAo
aSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbiB0
aGUgc3RvcmFnZSB2ZWN0b3IsCisvLyAgICAgdW5sZXNzIHRoZSBhcnJheSBpcyBpbiBTcGFyc2VN
b2RlIGluIHdoaWNoIGNhc2UgYWxsIHByb3BlcnRpZXMgZ28gaW50byB0aGUgbWFwLgorLy8gICAq
IFdoZXJlIChNSU5fU1BBUlNFX0FSUkFZX0lOREVYIDw9IGkgPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0lOREVYKSB0aGUgdmFsdWUgd2lsbCBlaXRoZXIKKy8vICAgICBiZSBzdG9yZWQgaW4gdGhlIHN0
b3JhZ2UgdmVjdG9yIG9yIGluIHRoZSBzcGFyc2UgYXJyYXksIGRlcGVuZGluZyBvbiB0aGUgZGVu
c2l0eSBvZgorLy8gICAgIGRhdGEgdGhhdCB3b3VsZCBiZSBzdG9yZWQgaW4gdGhlIHZlY3RvciAo
YSB2ZWN0b3IgYmVpbmcgdXNlZCB3aGVyZSBhdCBsZWFzdAorLy8gICAgICgxIC8gbWluRGVuc2l0
eU11bHRpcGxpZXIpIG9mIHRoZSBlbnRyaWVzIHdvdWxkIGJlIHBvcHVsYXRlZCkuCisvLyAgICog
V2hlcmUgKE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCA8IGkgPD0gTUFYX0FSUkFZX0lOREVYKSB0
aGUgdmFsdWUgd2lsbCBhbHdheXMgYmUgc3RvcmVkCisvLyAgICAgaW4gdGhlIHNwYXJzZSBhcnJh
eS4KKworLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHN0b3JhZ2UgdmVjdG9yIGxlbmd0aCB0byBiZSAy
XjMyIC8gc2l6ZW9mKEpTVmFsdWUpIC8gMiB0byBlbnN1cmUgdGhhdAorLy8gdGhlcmUgaXMgbm8g
cmlzayBvZiBvdmVyZmxvdy4KKyNkZWZpbmUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEluZGV4aW5nSGVhZGVyOjptYXhpbXVtTGVuZ3RoKSkKKworLy8g
VGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5kIG1p
bigpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmluYXJp
ZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVggMTAwMDBVCisjZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCisvLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJkIC0t
IGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCisjZGVm
aW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQorCisvLyBUaGUgdmFsdWUgQkFTRV9WRUNU
T1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwgYWxs
b2NhdGUKKy8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZpZWQg
bGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKKyNkZWZpbmUgQkFTRV9WRUNUT1JfTEVO
IDRVCisgICAgCisvLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBhIHpl
cm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKKy8vIGlzIGFkZGVkLgorI2Rl
ZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQorCisvLyBPdXIgcG9saWN5IGZvciB3aGVuIHRvIHVz
ZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgorLy8gRm9yIGFsbCBhcnJh
eSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2UgYSB2
ZWN0b3IuCisvLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKKy8vIGFzIGxvbmcgYXMgaXQgaXMgMS84
IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgorc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKKworaW5saW5lIGJvb2wgaXNE
ZW5zZUVub3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykK
K3sKKyAgICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3Ro
IC8gbWluRGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOworfQorCitpbmxpbmUgSW5kZXhp
bmdIZWFkZXIgaW5kZXhpbmdIZWFkZXJGb3JBcnJheSh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCkKK3sKKyAgICBJbmRleGluZ0hlYWRlciByZXN1bHQ7CisgICAgcmVzdWx0
LnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIHJlc3VsdC5zZXRWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgSW5kZXhpbmdIZWFk
ZXIgYmFzZUluZGV4aW5nSGVhZGVyRm9yQXJyYXkodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJl
dHVybiBpbmRleGluZ0hlYWRlckZvckFycmF5KGxlbmd0aCwgQkFTRV9WRUNUT1JfTEVOKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUNvbnZlbnRpb25zX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCwxMCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRl
ICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAi
SlNTdHJpbmdCdWlsZGVyLmgiCkBAIC0xMTQsOSArMTE2LDE3IEBAIGNvbnN0IENsYXNzSW5mbyBB
cnJheVByb3RvdHlwZTo6c19pbmZvID0KIEBlbmQKICovCiAKK0FycmF5UHJvdG90eXBlKiBBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShleGVjLT5nbG9iYWxEYXRhKCksIDApOworICAgIEFy
cmF5UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxBcnJh
eVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBidXR0ZXJmbHkpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCiAvLyBFQ01BIDE1LjQuNAot
QXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgc3RydWN0dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKKyAgICA6IEpTQXJyYXkoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogewogfQogCkBAIC0yOTIsOCArMzAyLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGxlbmd0aDsgaysrKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudDsKLSAgICAg
ICAgaWYgKHRoaXNPYmotPmNhbkdldEluZGV4KGspKQotICAgICAgICAgICAgZWxlbWVudCA9IHRo
aXNPYmotPmdldEluZGV4KGspOworICAgICAgICBpZiAodGhpc09iai0+Y2FuR2V0SW5kZXhRdWlj
a2x5KGspKQorICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldEluZGV4UXVpY2tseShr
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNPYmotPmdldChleGVj
LCBrKTsKICAgICAgICAgCkBAIC00MTMsMTAgKzQyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0
aGlzT2JqKTsKIAogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAg
ICBpZiAoIWFycmF5LT5jYW5HZXRJbmRleChrKSkKKyAgICAgICAgICAgIGlmICghYXJyYXktPmNh
bkdldEluZGV4UXVpY2tseShrKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGlm
ICghZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHN0cmluZ0pv
aW5lci5hcHBlbmQoZWxlbWVudC50b1dURlN0cmluZ0lubGluZShleGVjKSk7CiAgICAgICAgICAg
ICBlbHNlCkBAIC02MjgsNyArNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKIAotICAgIGlmICh0aGlzT2JqLT5j
bGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNw
YXJzZU1vZGUoKSkgeworICAgIGlmICh0aGlzT2JqLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6
c19pbmZvICYmICFhc0FycmF5KHRoaXNPYmopLT5pblNwYXJzZUluZGV4aW5nTW9kZSgpKSB7CiAg
ICAgICAgIGlmIChpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oZXhlYywgY2FsbFR5cGUsIGNhbGxE
YXRhKSkKICAgICAgICAgICAgIGFzQXJyYXkodGhpc09iaiktPnNvcnROdW1lcmljKGV4ZWMsIGZ1
bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwogICAgICAgICBlbHNlIGlmIChjYWxsVHlwZSAh
PSBDYWxsVHlwZU5vbmUpCkBAIC03ODgsOSArNzk4LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhp
c09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAg
ICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAg
ICAgICAgICAgIGlmICghYXJyYXktPmNhbkdldEluZGV4KGspKQorICAgICAgICAgICAgaWYgKCFh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gYXJyYXktPmdldEluZGV4KGspOworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gYXJyYXktPmdldEluZGV4UXVpY2tseShrKTsKICAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0VGhpcyhhcHBseVRoaXMpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dCgwLCB2KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIo
aykpOwpAQCAtODQ2LDExICs4NTYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAg
ICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7
IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMpOwotICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgoaykpOwor
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXhRdWlj
a2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNOdW1iZXIo
aykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2JqKTsKIApA
QCAtOTA5LDExICs5MTksMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAg
IENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBs
ZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghYXJyYXktPmNhbkdldEluZGV4KGspKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WSghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShrKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhhcHBseVRoaXMp
OwotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5kZXgo
aykpOworICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KGspKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwganNO
dW1iZXIoaykpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgyLCB0aGlzT2Jq
KTsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxsKCk7CkBAIC05
NjUsMTEgKzk3NSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2Fj
aGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0
aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFhcnJheS0+Y2FuR2V0SW5kZXgoaykpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFh
cnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGspKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGFwcGx5VGhpcyk7Ci0gICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleChrKSk7CisgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaykpOwog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBqc051bWJlcihrKSk7CiAgICAg
ICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIsIHRoaXNPYmopOwogCkBAIC0xMDE3LDEx
ICsxMDI3LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRD
YWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYm
ICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
IWFycmF5LT5jYW5HZXRJbmRleChrKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWFycmF5
LT5jYW5HZXRJbmRleFF1aWNrbHkoaykpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoYXBwbHlUaGlzKTsKLSAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4KGspKTsKKyAg
ICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgYXJyYXktPmdldEluZGV4UXVpY2ts
eShrKSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGpzTnVtYmVyKGsp
KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwgdGhpc09iaik7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwpAQCAtMTA3NSw4ICsx
MDg1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKQogICAgICAgICBydiA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpOwotICAgIGVsc2UgaWYgKGFycmF5ICYmIGFycmF5LT5jYW5HZXRJbmRleCgwKSl7Ci0g
ICAgICAgIHJ2ID0gYXJyYXktPmdldEluZGV4KDApOworICAgIGVsc2UgaWYgKGFycmF5ICYmIGFy
cmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoMCkpIHsKKyAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5k
ZXhRdWlja2x5KDApOwogICAgICAgICBpID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTEwOTcsOCArMTEwNyw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGNhY2hlZENhbGwu
c2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1l
bnQoMCwgcnYpOwogICAgICAgICAgICAgSlNWYWx1ZSB2OwotICAgICAgICAgICAgaWYgKExJS0VM
WShhcnJheS0+Y2FuR2V0SW5kZXgoaSkpKQotICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0
SW5kZXgoaSk7CisgICAgICAgICAgICBpZiAoTElLRUxZKGFycmF5LT5jYW5HZXRJbmRleFF1aWNr
bHkoaSkpKQorICAgICAgICAgICAgICAgIHYgPSBhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBsZW5ndGggaGFzIGJl
ZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxiYWNrIHRvIHNsb3cgcGF0aAog
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCB2KTsKQEAgLTExNTIsOCArMTE2
Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAKICAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpCiAgICAgICAgIHJ2ID0gZXhlYy0+YXJn
dW1lbnQoMSk7Ci0gICAgZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0
aCAtIDEpKXsKLSAgICAgICAgcnYgPSBhcnJheS0+Z2V0SW5kZXgobGVuZ3RoIC0gMSk7CisgICAg
ZWxzZSBpZiAoYXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShsZW5ndGggLSAxKSkg
eworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkobGVuZ3RoIC0gMSk7CiAgICAg
ICAgIGkgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpAQCAtMTE3NCw5ICsxMTg0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICAgICAgdW5zaWduZWQgaWR4ID0gbGVuZ3RoIC0gaSAtIDE7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghYXJyYXktPmNhbkdldEluZGV4KGlkeCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KCFhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGlkeCkpKQogICAgICAgICAgICAgICAgIGJyZWFr
OyAvLyBsZW5ndGggaGFzIGJlZW4gbWFkZSB1bnNhZmUgd2hpbGUgd2UgZW51bWVyYXRlIGZhbGxi
YWNrIHRvIHNsb3cgcGF0aAotICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgxLCBh
cnJheS0+Z2V0SW5kZXgoaWR4KSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KDEsIGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaWR4KSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxs
LnNldEFyZ3VtZW50KDIsIGpzTnVtYmVyKGlkeCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5z
ZXRBcmd1bWVudCgzLCBhcnJheSk7CiAgICAgICAgICAgICBydiA9IGNhY2hlZENhbGwuY2FsbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5oCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKU0FycmF5IHsK
ICAgICBwcml2YXRlOgotICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOworICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIEpTQXJy
YXkgQmFzZTsKIAotICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheVByb3RvdHlwZSogcHJvdG90eXBlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkp
KSBBcnJheVByb3RvdHlwZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBw
cm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1
cm4gcHJvdG90eXBlOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSog
Y3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTQ3LDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBBcnJheVdpdGhBcnJheVN0b3Jh
Z2UpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFycmF5U3RvcmFnZV9oCisjZGVmaW5lIEFycmF5U3RvcmFnZV9oCisKKyNpbmNs
dWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCisjaW5jbHVk
ZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIHN0
cnVjdCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiBBIEpTQXJyYXkg
b2JqZWN0IHBvaW50cyB0byBpdCdzIGNvbnRhaW5lZCBBcnJheVN0b3JhZ2UKKy8vIHN0cnVjdCBi
eSBwb2ludGluZyB0byBtX3ZlY3Rvci4gVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlTdG9y
YWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAorLy8gc2V0U3RvcmFnZSgpIG1l
dGhvZHMuIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlcmUgbWF5IGJlIHNwYWNlIGJl
Zm9yZSB0aGUgQXJyYXlTdG9yYWdlIHRoYXQgCisvLyBpcyB1c2VkIHRvIHF1aWNrIHVuc2hpZnQg
LyBzaGlmdCBvcGVyYXRpb24uIFRoZSBhY3R1YWwgYWxsb2NhdGVkIHBvaW50ZXIgaXMgYXZhaWxh
YmxlIGJ5IHVzaW5nOgorLy8gICAgIGdldFN0b3JhZ2UoKSAtIG1faW5kZXhCaWFzICogc2l6ZW9m
KEpTVmFsdWUpCitzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBcnJheVN0b3JhZ2UpOworcHJpdmF0ZToKKyAgICBBcnJheVN0b3JhZ2UoKSB7IH0gLy8gTm90
IGRpcmVjdGx5IGluc3RhbnRpYWJsZS4gQ2FuIG9ubHkgYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEg
QnV0dGVyZmx5LgorcHVibGljOgorICAgIAorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20o
QnV0dGVyZmx5KiBidXR0ZXJmbHkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QXJyYXlTdG9y
YWdlKj4oYnV0dGVyZmx5KTsgfQorICAgIHN0YXRpYyBBcnJheVN0b3JhZ2UqIGZyb20oSW5kZXhp
bmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKSB7IHJldHVybiBpbmRleGluZ0hlYWRlci0+YXJyYXlT
dG9yYWdlKCk7IH0KKyAgICAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KKyAgICBJbmRleGluZ0hlYWRlciog
aW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQor
ICAgIAorICAgIC8vIFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVy
OiB2ZWN0b3JMZW5ndGggYW5kIGxlbmd0aC4KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVy
biBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHZvaWQgc2V0TGVuZ3Ro
KHVuc2lnbmVkIGxlbmd0aCkgeyBpbmRleGluZ0hlYWRlcigpLT5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsgfQorICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVh
ZGVyKCktPnZlY3Rvckxlbmd0aCgpOyB9CisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodW5zaWdu
ZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOyB9
CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoY29u
c3QgQXJyYXlTdG9yYWdlJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fc3BhcnNlTWFwLmNvcHlG
cm9tKG90aGVyLm1fc3BhcnNlTWFwKTsKKyAgICAgICAgbV9pbmRleEJpYXMgPSBvdGhlci5tX2lu
ZGV4QmlhczsKKyAgICAgICAgbV9udW1WYWx1ZXNJblZlY3RvciA9IG90aGVyLm1fbnVtVmFsdWVz
SW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgbV9pbml0aWFs
aXphdGlvbkluZGV4ID0gb3RoZXIubV9pbml0aWFsaXphdGlvbkluZGV4OworICAgICAgICBtX2lu
Q29tcGFjdEluaXRpYWxpemF0aW9uID0gb3RoZXIubV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbjsK
KyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBib29sIGluU3BhcnNlTW9kZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKKyAg
ICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFNwYXJzZUFycmF5VmFsdWVNYXA+IG1fc3BhcnNl
TWFwOworICAgIHVuc2lnbmVkIG1faW5kZXhCaWFzOworICAgIHVuc2lnbmVkIG1fbnVtVmFsdWVz
SW5WZWN0b3I7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAvLyBOZWVkcyB0byBi
ZSBhIHVpbnRwdHJfdCBmb3IgYWxpZ25tZW50IHB1cnBvc2VzLgorICAgIHVpbnRwdHJfdCBtX2lu
aXRpYWxpemF0aW9uSW5kZXg7CisgICAgdWludHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRp
b247CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVpbnRwdHJfdCBtX3BhZGRpbmc7Cisj
ZW5kaWYKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92ZWN0b3JbMV07CisgICAgCisgICAg
c3RhdGljIHB0cmRpZmZfdCBsZW5ndGhPZmZzZXQoKSB7IHJldHVybiBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9m
ZnNldCgpIHsgcmV0dXJuIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3QgbnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3QgdmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2luZGV4Qmlh
cyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHNwYXJzZU1hcE9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fc3BhcnNlTWFwKTsgfQorICAgIAorICAgIHN0
YXRpYyBzaXplX3Qgc2l6ZUZvcih1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCisgICAgeworICAgICAg
ICByZXR1cm4gQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIHZlY3Rvckxlbmd0aCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQXJyYXlTdG9yYWdlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCdXR0ZXJmbHlfaAorI2RlZmluZSBCdXR0ZXJmbHlfaAorCisjaW5jbHVkZSAiSW5kZXhpbmdI
ZWFkZXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUgIlByb3BlcnR5
U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxEYXRhOworY2xh
c3MgU2xvdFZpc2l0b3I7CitzdHJ1Y3QgQXJyYXlTdG9yYWdlOworCitjbGFzcyBCdXR0ZXJmbHkg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ1dHRlcmZseSk7Citwcml2YXRlOgorICAgIEJ1
dHRlcmZseSgpIHsgfSAvLyBOb3QgaW5zdGFudGlhYmxlLgorcHVibGljOgorICAgIAorICAgIHN0
YXRpYyBzaXplX3QgdG90YWxTaXplKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlcyA/IGhhc0luZGV4aW5nSGVhZGVyIDogdHJ1ZSk7CisgICAgICAgIEFTU0VSVChzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpID09IHNpemVvZihJbmRleGluZ0hlYWRlcikpOworICAgICAgICByZXR1
cm4gKHByZUNhcGFjaXR5ICsgcHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICsgKGhhc0luZGV4aW5nSGVhZGVyID8gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSA6IDApICsg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgfQorCisgICAgc3RhdGljIEJ1dHRlcmZs
eSogZnJvbUJhc2Uodm9pZCogYmFzZSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVy
dHlDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRl
cmZseSo+KHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oYmFzZSkgKyBwcmVDYXBhY2l0eSAr
IHByb3BlcnR5Q2FwYWNpdHkgKyAxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6Om9mZnNl
dE9mSW5kZXhpbmdIZWFkZXIoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJbmRleGluZ0hl
YWRlcjo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZWZWN0b3JMZW5ndGgoKSB7IHJldHVybiBvZmZzZXRPZkluZGV4aW5nSGVhZGVyKCkgKyBJ
bmRleGluZ0hlYWRlcjo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKTsgfQorICAgIAorICAgIHN0YXRp
YyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBCdXR0
ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hl
YWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1
dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBC
dXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9y
Jiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJ
bmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAK
KyAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hl
YWRlcjo6ZnJvbSh0aGlzKTsgfQorICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CisgICAg
UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVy
KCktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVy
dHlTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9y
YWdlKCk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGluZGV4aW5nUGF5bG9h
ZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOyB9CisgICAgQXJyYXlTdG9y
YWdlKiBhcnJheVN0b3JhZ2UoKSB7IHJldHVybiBpbmRleGluZ1BheWxvYWQ8QXJyYXlTdG9yYWdl
PigpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSgpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihJbmRleGluZ0hlYWRl
cikpOyB9CisgICAgc3RhdGljIGludCBpbmRleE9mUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzaXplb2YoSW5kZXhpbmdIZWFkZXIpID09IHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdm9pZCogYmFzZShzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5KSB7IHJldHVybiBwcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHkgLSBwcmVDYXBhY2l0eTsgfQorICAgIHZvaWQq
IGJhc2UoU3RydWN0dXJlKik7CisgICAgCisgICAgLy8gVGhlIGJ1dHRlcmZseSByZWFsbG9jYXRp
b24gbWV0aG9kcyBwZXJmb3JtIHRoZSByZWFsbG9jYXRpb24gaXRzZWxmIGJ1dCBkbyBub3QgY2hh
bmdlIGFueQorICAgIC8vIG9mIHRoZSBtZXRhLWRhdGEgdG8gcmVmbGVjdCB0aGF0IHRoZSByZWFs
bG9jYXRpb24gb2NjdXJyZWQuIE5vdGUgdGhhdCB0aGlzIHNldCBvZgorICAgIC8vIG1ldGhvZHMg
aXMgbm90IGV4aGF1c3RpdmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBlbmNhcHN1bGF0ZSBhbGwg
cG9zc2libGUgYWxsb2NhdGlvbgorICAgIC8vIG1vZGVzIG9mIGJ1dHRlcmZsaWVzIC0gdGhlcmUg
YXJlIGNvZGUgcGF0aHMgdGhhdCBhbGxvY2F0ZSBidXR0ZXJmbGllcyBieSBjYWxsaW5nCisgICAg
Ly8gZGlyZWN0bHkgaW50byBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2UuCisgICAgQnV0dGVyZmx5
KiBncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0eSwg
c2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcywgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworICAgIEJ1dHRlcmZseSogZ3Jvd1Byb3BlcnR5U3RvcmFnZShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG9sZFByb3BlcnR5Q2FwYWNpdHksIHNpemVfdCBu
ZXdQcm9wZXJ0eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dQcm9wZXJ0eVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBuZXdQcm9wZXJ0
eUNhcGFjaXR5KTsKKyAgICBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBo
YWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBz
aXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1bWVzIHRoYXQgcHJl
Q2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBCdXR0ZXJmbHkqIGdy
b3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHNpemVfdCBuZXdJbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2Jh
bERhdGEmLCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBvbGRIYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3UHJlQ2Fw
YWNpdHksIGJvb2wgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBuZXdJbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisgICAgQnV0dGVyZmx5KiByZXNpemVBcnJheShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCB5b3UncmUgbm90IGNoYW5naW5nIHdo
ZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFzIGFuIGluZGV4aW5nIGhlYWRlci4KKyAgICBCdXR0
ZXJmbHkqIHVuc2hpZnQoU3RydWN0dXJlKiwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworICAgIEJ1
dHRlcmZseSogc2hpZnQoU3RydWN0dXJlKiwgc2l6ZV90IG51bWJlck9mU2xvdHMpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCdXR0ZXJmbHlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ1dHRl
cmZseUlubGluZU1ldGhvZHNfaAorI2RlZmluZSBCdXR0ZXJmbHlJbmxpbmVNZXRob2RzX2gKKwor
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogdGVtcDsKKyAgICBzaXplX3Qg
c2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIWdsb2JhbERh
dGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZSwgJnRlbXApKQorICAgICAgICBDUkFTSCgp
OworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UodGVtcCwgcHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBCdXR0ZXJm
bHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAg
ICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCisgICAgICAgICpyZXN1bHQtPmluZGV4aW5nSGVhZGVy
KCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7Cit9CisKK2lubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xv
dFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcykKK3sKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAorICAgICAgICB2
aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwK
KyAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2lubGluZSB2b2lkKiBCdXR0ZXJmbHk6OmJhc2UoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgcmV0dXJuIGJhc2UoaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKK30KKworaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJvcGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0eSkKK3sKKyAgICBBU1NFUlQobmV3UHJvcGVydHlD
YXBhY2l0eSA+IG9sZFByb3BlcnR5Q2FwYWNpdHkpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgcHJlQ2FwYWNpdHksIG5l
d1Byb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgbWVtY3B5KAorICAgICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgp
IC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQ
cm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93UHJv
cGVydHlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHNpemVfdCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBzaXplX3QgbmV3UHJvcGVydHlDYXBhY2l0
eSkKK3sKKyAgICByZXR1cm4gZ3Jvd1Byb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgZ2xvYmFsRGF0
YSwgaW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSwgb2xkUHJvcGVydHlD
YXBhY2l0eSwKKyAgICAgICAgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKHN0cnVjdHVyZSksIG5ld1Byb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6Omdyb3dQcm9wZXJ0eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
Cit7CisgICAgcmV0dXJuIGdyb3dQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIGdsb2JhbERhdGEs
IG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdQcm9w
ZXJ0eUNhcGFjaXR5KTsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5Ojpncm93QXJy
YXlSaWdodChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJl
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90
IG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsICFpbmRleGlu
Z0hlYWRlcigpLT5wcmVDYXBhY2l0eShvbGRTdHJ1Y3R1cmUpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KG9sZFN0cnVjdHVyZSwgaGFkSW5kZXhpbmdIZWFkZXIgPT0gaGFzSW5kZXhpbmdIZWFkZXIob2xk
U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIHZvaWQqIHRoZUJhc2UgPSBiYXNlKDAs
IHByb3BlcnR5Q2FwYWNpdHkpOworICAgIHNpemVfdCBvbGRTaXplID0gdG90YWxTaXplKDAsIHBy
b3BlcnR5Q2FwYWNpdHksIGhhZEluZGV4aW5nSGVhZGVyLCBvbGRJbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CisgICAgc2l6ZV90IG5ld1NpemUgPSB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBh
Y2l0eSwgdHJ1ZSwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICghZ2xv
YmFsRGF0YS5oZWFwLnRyeVJlYWxsb2NhdGVTdG9yYWdlKCZ0aGVCYXNlLCBvbGRTaXplLCBuZXdT
aXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyb21CYXNlKHRoZUJhc2UsIDAs
IHByb3BlcnR5Q2FwYWNpdHkpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6Omdy
b3dBcnJheVJpZ2h0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sKKyAgICByZXR1
cm4gZ3Jvd0FycmF5UmlnaHQoCisgICAgICAgIGdsb2JhbERhdGEsIG9sZFN0cnVjdHVyZSwgb2xk
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLAorICAgICAgICBoYXNJbmRleGluZ0hlYWRl
cihvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwKKyAgICAgICAgaW5kZXhpbmdIZWFkZXIo
KS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMob2xkU3RydWN0dXJlKSwgbmV3SW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OnJl
c2l6ZUFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNp
dHksIGJvb2wgb2xkSGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBvbGRJbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcywgc2l6ZV90IG5ld1ByZUNhcGFjaXR5LCBib29sIG5ld0hhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCit7CisgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBjcmVhdGVVbmluaXRpYWxpemVkKAorICAgICAgICBnbG9iYWxEYXRhLCBu
ZXdQcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgbmV3SGFzSW5kZXhpbmdIZWFkZXIsIG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBi
ZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgd2UgdXNlZCB0aGUgcHJvcGVydHkgc2l6ZSwK
KyAgICAvLyBub3QgdGhlIGNhcGFjaXR5LgorICAgIHZvaWQqIHRvID0gcmVzdWx0LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHk7CisgICAgdm9pZCogZnJvbSA9IHByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWlu
KAorICAgICAgICB0b3RhbFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgb2xkSGFzSW5kZXhpbmdI
ZWFkZXIsIG9sZEluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSwKKyAgICAgICAgdG90YWxTaXpl
KDAsIHByb3BlcnR5Q2FwYWNpdHksIG5ld0hhc0luZGV4aW5nSGVhZGVyLCBuZXdJbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykpOworICAgIG1lbWNweSh0bywgZnJvbSwgc2l6ZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpyZXNpemVBcnJh
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qg
bmV3UHJlQ2FwYWNpdHksIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK3sK
KyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICByZXR1cm4gcmVzaXplQXJyYXkoCisgICAgICAg
IGdsb2JhbERhdGEsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdI
ZWFkZXIsCisgICAgICAgIGluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKHN0cnVjdHVyZSksIG5ld1ByZUNhcGFjaXR5LAorICAgICAgICBoYXNJbmRleGluZ0hlYWRl
ciwgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworfQorCitpbmxpbmUgQnV0dGVyZmx5
KiBCdXR0ZXJmbHk6OnVuc2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1iZXJP
ZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgQVNTRVJUKG51bWJlck9mU2xvdHMgPD0gaW5kZXhpbmdIZWFkZXIo
KS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogSXQgd291
bGQgcHJvYmFibHkgYmUgd2lzZSB0byByZXdyaXRlIHRoaXMgYXMgYSBsb29wIHNpbmNlICgxKSB3
ZSBrbm93IGluIHdoaWNoCisgICAgLy8gZGlyZWN0aW9uIHdlJ3JlIG1vdmluZyBtZW1vcnkgc28g
d2UgZG9uJ3QgbmVlZCB0aGUgZXh0cmEgY2hlY2sgb2YgbWVtbW92ZSBhbmQgKDIpIHdlJ3JlCisg
ICAgLy8gbW92aW5nIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBpbiB0aGUgY29tbW9uIGNhc2Ug
c28gdGhlIHRocm91Z2hwdXQgb2YgbWVtbW92ZSB3b24ndAorICAgIC8vIGFtb3J0aXplIHRoZSBv
dmVyaGVhZCBvZiBjYWxsaW5nIGl0LiBBbmQgbm8sIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBDKysg
Y29tcGlsZXIgdG8KKyAgICAvLyBpbmxpbmUgbWVtbW92ZSAocGFydGljdWxhcmx5IHNpbmNlIHRo
ZSBzaXplIGFyZ3VtZW50IGlzIGxpa2VseSB0byBiZSB2YXJpYWJsZSksIG5vciBjYW4KKyAgICAv
LyB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlIG9yZGVyaW5nIG9mIHRo
ZSBwb2ludGVyIGFyZ3VtZW50cyAoc2luY2UKKyAgICAvLyBwcm9wZXJ0eUNhcGFjaXR5IGlzIHZh
cmlhYmxlIGFuZCBjb3VsZCBjYXVzZSB3cmFwLWFyb3VuZCBhcyBmYXIgYXMgdGhlIGNvbXBpbGVy
IGtub3dzKS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAtIG51bWJl
ck9mU2xvdHMgLSBwcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBwcm9w
ZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJvcGVydHlT
dG9yYWdlKCkgLSBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK2lubGluZSBCdXR0
ZXJmbHkqIEJ1dHRlcmZseTo6c2hpZnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBudW1i
ZXJPZlNsb3RzKQoreworICAgIEFTU0VSVChoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gdW5z
aGlmdCgpLCBhYm92ZS4KKyAgICBtZW1tb3ZlKAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UoKSAt
IHByb3BlcnR5Q2FwYWNpdHkgKyBudW1iZXJPZlNsb3RzLAorICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
KiBwcm9wZXJ0eUNhcGFjaXR5ICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcigwKSk7CisgICAgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tRW5kT2YocHJv
cGVydHlTdG9yYWdlKCkgKyBudW1iZXJPZlNsb3RzKS0+YnV0dGVyZmx5KCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnV0dGVyZmx5SW5saW5lTWV0aG9kc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAx
MjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlw
ZWRlZiB2b2lkICgqR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAg
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKKyAg
ICAgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25Q
dHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgICAgICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7CisKICAgICAgICAgdHlwZWRlZiB2b2lkICgqR2V0
UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgR2V0UHJvcGVydHlOYW1lc0Z1
bmN0aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKQEAgLTEyNCw2ICsxMjcsNyBAQCBzdHJ1Y3Qg
TWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9UaGlzT2JqZWN0
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5h
bWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpoYXNJbnN0YW5jZSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBJbmRleGluZ0hlYWRlcl9oCisjZGVmaW5lIEluZGV4aW5nSGVhZGVyX2gKKworI2luY2x1ZGUg
IlByb3BlcnR5U3RvcmFnZS5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQnV0dGVyZmx5OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OworY2xhc3MgU3RydWN0dXJlOworc3RydWN0IEFycmF5U3RvcmFnZTsKKworY2xhc3MgSW5kZXhp
bmdIZWFkZXIgeworcHVibGljOgorICAgIC8vIERlZmluZSB0aGUgbWF4aW11bSBzdG9yYWdlIHZl
Y3RvciBsZW5ndGggdG8gYmUgMl4zMiAvIHNpemVvZihKU1ZhbHVlKSAvIDIgdG8gZW5zdXJlIHRo
YXQKKyAgICAvLyB0aGVyZSBpcyBubyByaXNrIG9mIG92ZXJmbG93LgorICAgIGVudW0geyBtYXhp
bXVtTGVuZ3RoID0gMHgxMDAwMDAwMCB9OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZJbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihJbmRleGluZ0hlYWRlcikpOyB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRl
ciwgbV9wdWJsaWNMZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3Rv
ckxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbmRleGluZ0hlYWRlciwgbV92ZWN0
b3JMZW5ndGgpOyB9CisgICAgCisgICAgSW5kZXhpbmdIZWFkZXIoKQorICAgICAgICA6IG1fcHVi
bGljTGVuZ3RoKDApCisgICAgICAgICwgbV92ZWN0b3JMZW5ndGgoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
TGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBzZXRWZWN0b3JMZW5ndGgodWludDMyX3QgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtYXhpbXVtTGVuZ3RoKTsKKyAgICAg
ICAgbV92ZWN0b3JMZW5ndGggPSBsZW5ndGg7CisgICAgfQorICAgIAorICAgIHVpbnQzMl90IHB1
YmxpY0xlbmd0aCgpIHsgcmV0dXJuIG1fcHVibGljTGVuZ3RoOyB9CisgICAgdm9pZCBzZXRQdWJs
aWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyBtX3B1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0K
KyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGJ1dHRlcmZseSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgSW5kZXhp
bmdIZWFkZXIqIGZyb20oY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZs
eSkgLSAxOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJv
cGVydHlTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5k
ZXhpbmdIZWFkZXIqPihwcm9wZXJ0eVN0b3JhZ2UpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0
eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAgfQorICAgIAorICAgIENvbnN0
UHJvcGVydHlTdG9yYWdlIHByb3BlcnR5U3RvcmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb25zdFByb3BlcnR5U3RvcmFnZT4odGhpcyk7CisgICAg
fQorICAgIAorICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEFycmF5U3RvcmFnZSo+KHRoaXMgKyAxKTsKKyAgICB9
CisgICAgCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyArIDEpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBub3Qgc3RhbmRhbG9uZSBpbiB0aGUgc2Vuc2UgdGhhdCB0
aGV5IGNhbm5vdCBiZQorICAgIC8vIHVzZWQgb24gYSBjb3B5IG9mIHRoZSBJbmRleGluZ0hlYWRl
ci4KKyAgICBzaXplX3QgcHJlQ2FwYWNpdHkoU3RydWN0dXJlKik7CisgICAgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKFN0cnVjdHVyZSopOworICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIAorICAgIHVpbnQzMl90IG1f
cHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhl
IGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0
aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCisgICAgdWludDMyX3Qg
bV92ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3Rv
cmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5k
IHRoZSB0eXBlLgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmRleGlu
Z0hlYWRlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXJJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJbmRleGluZ0hlYWRlcklubGluZU1ldGhv
ZHNfaAorI2RlZmluZSBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiSW5kZXhpbmdIZWFkZXIuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdI
ZWFkZXI6OnByZUNhcGFjaXR5KFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtF
TFkoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJp
YXM7Cit9CisKK2lubGluZSBzaXplX3QgSW5kZXhpbmdIZWFkZXI6OmluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChMSUtFTFkoIShzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSGFzQXJyYXlTdG9yYWdlKSkpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHJldHVybiBBcnJheVN0b3JhZ2U6OnNpemVGb3IoYXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSW5kZXhpbmdUeXBlX2gKKyNkZWZpbmUgSW5kZXhpbmdUeXBlX2gKKworbmFtZXNw
YWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CisKKy8vIEZsYWdzIGZv
ciB0ZXN0aW5nIHRoZSBwcmVzZW5jZSBvZiBjYXBhYmlsaXRpZXMuCitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEhhc0FycmF5U3RvcmFnZSAgICAgICAgICA9IDg7CisKKy8vIEFkZGl0aW9uYWwg
ZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1
YWxseQorLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KK3N0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSGFkQXJyYXlTdG9yYWdlICAgICAgICAgID0gMTY7IC8v
IE1lYW5zIHRoYXQgdGhpcyBvYmplY3QgZGlkIGhhdmUgYXJyYXkgc3RvcmFnZSBpbiB0aGUgcGFz
dC4KKworLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgorc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgPSAwOworc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSBIYXNBcnJheVN0b3JhZ2U7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5ICAgICAgICAgICAgICAgICAgICA9IElzQXJy
YXk7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5V2l0aEFycmF5U3RvcmFnZSAgICA9
IElzQXJyYXkgfCBIYXNBcnJheVN0b3JhZ2U7CisKKy8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5
cGVzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzICAgICAgICAgICAg
PSAxNTsKKworLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0
b3J5Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAg
PSAzMTsKKworaW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoSW5kZXhpbmdUeXBlIHR5cGUp
Cit7CisgICAgcmV0dXJuICEhKHR5cGUgJiBIYXNBcnJheVN0b3JhZ2UpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZGV4aW5nVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTI4
MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBKU0FjdGl2YXRpb246OkpTQWN0aXZhdGlv
bihDYWxsRnJhbWUqIGNhCiAgICAgICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCksCiAgICAgICAg
IGNhbGxGcmFtZS0+c2NvcGUoKQogICAgICkKLSAgICAsIG1fcmVnaXN0ZXJBcnJheShjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgdGhpcywgMCkKKyAgICAsIG1fcmVnaXN0ZXJBcnJheSgwKQogICAg
ICwgbV9udW1DYXB0dXJlZEFyZ3MobWF4KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBmdW5j
dGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpKQogICAgICwgbV9udW1DYXB0dXJlZFZh
cnMoZnVuY3Rpb25FeGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQoKSkKICAgICAsIG1f
aXNUb3JuT2ZmKGZhbHNlKQpAQCAtNzIsMTIgKzcyLDEyIEBAIHZvaWQgSlNBY3RpdmF0aW9uOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCoKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogCiAgICAgLy8gTm8gbmVlZCB0byBtYXJrIG91ciByZWdpc3RlcnMgaWYgdGhl
eSdyZSBzdGlsbCBpbiB0aGUgUmVnaXN0ZXJGaWxlLgotICAgIFByb3BlcnR5U3RvcmFnZSByZWdp
c3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5LmdldCgpOworICAgIFByb3Bl
cnR5U3RvcmFnZSByZWdpc3RlckFycmF5ID0gdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5Owog
ICAgIGlmICghcmVnaXN0ZXJBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdmlzaXRvci5j
b3B5QW5kQXBwZW5kKGJpdHdpc2VfY2FzdDx2b2lkKio+KCZyZWdpc3RlckFycmF5KSwgdGhpc09i
amVjdC0+cmVnaXN0ZXJBcnJheVNpemVJbkJ5dGVzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1
ZSo+KHJlZ2lzdGVyQXJyYXkpLCB0aGlzT2JqZWN0LT5yZWdpc3RlckFycmF5U2l6ZSgpKTsKLSAg
ICB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJyYXksIFN0b3JhZ2VC
YXJyaWVyOjpVbmNoZWNrZWQpOworICAgIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheSA9IHJl
Z2lzdGVyQXJyYXk7CiAgICAgdGhpc09iamVjdC0+bV9yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5
ICsgdGhpc09iamVjdC0+cmVnaXN0ZXJPZmZzZXQoKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgYXJn
dW1lbnRzIG9iamVjdCwgc2luY2UgaXQgcG9pbnRzIGF0IG91ciBidWZmZXIuCkBAIC0xMzYsNyAr
MTM2LDcgQEAgaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBY3RpdmF0aW9uOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CiB7CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlvbio+
KG9iamVjdCk7CiAKQEAgLTE1MSw4ICsxNTEsOCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKICAgICB9Ci0gICAg
Ly8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9w
ZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9i
amVjdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKKyAgICBK
U09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBpbmxpbmUgYm9vbCBKU0FjdGl2YXRpb246OnN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJl
dmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykg
Y29uc3Q7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHNp
emVfdCByZWdpc3RlckFycmF5U2l6ZSgpOwogICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNp
emVJbkJ5dGVzKCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9yZWdpc3RlckFycmF5OyAv
LyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2Jq
ZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAg
ICAgUHJvcGVydHlTdG9yYWdlIG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBv
ZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lz
dGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIGludCBtX251bUNhcHR1cmVk
QXJnczsKICAgICAgICAgaW50IG1fbnVtQ2FwdHVyZWRWYXJzIDogMzA7CiAgICAgICAgIGJvb2wg
bV9pc1Rvcm5PZmYgOiAxOwpAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpCiAgICAgICAgICAgICByZWdpc3Rl
cnNbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIG1fcmVnaXN0ZXJzW2ldLmdldCgpKTsKIAotICAg
ICAgICBtX3JlZ2lzdGVyQXJyYXkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlZ2lzdGVyQXJyYXkp
OworICAgICAgICBtX3JlZ2lzdGVyQXJyYXkgPSByZWdpc3RlckFycmF5OwogICAgICAgICBtX3Jl
Z2lzdGVycyA9IHJlZ2lzdGVyczsKICAgICAgICAgbV9pc1Rvcm5PZmYgPSB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lv
biAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3Yg
KGFwQG55cG9wLmNvbSkKICAqCkBAIC0yNCwxMyArMjQsMTcgQEAKICNpbmNsdWRlICJKU0FycmF5
LmgiCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJ1dHRlcmZseUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNhY2hlZENhbGwuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKKyNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlNw
YXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8d3RmL0FWTFRyZWUu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
QEAgLTQ1LDQ4MCArNDksMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTQXJyYXkpOwogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7
CiAKLS8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKLS8vCi0vLyBQcm9wZXJ0aWVzIG9mIEpTQXJyYXkg
b2JqZWN0cyBtYXkgYmUgc3RvcmVkIGluIG9uZSBvZiB0aHJlZSBsb2NhdGlvbnM6Ci0vLyAgICog
VGhlIHJlZ3VsYXIgSlNPYmplY3QgcHJvcGVydHkgbWFwLgotLy8gICAqIEEgc3RvcmFnZSB2ZWN0
b3IuCi0vLyAgICogQSBzcGFyc2UgbWFwIG9mIGFycmF5IGVudHJpZXMuCi0vLwotLy8gUHJvcGVy
dGllcyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZpZXJzLCB3aXRoIGlkZW50aWZpZXJzIHRoYXQg
YXJlIG5vdCByZXByZXNlbnRhYmxlCi0vLyBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLCBvciB3aGVy
ZSB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuICBNQVhfQVJSQVlfSU5ERVgKLS8vIChzcGVjaWZp
Y2FsbHksIHRoaXMgaXMgb25seSBvbmUgcHJvcGVydHkgLSB0aGUgdmFsdWUgMHhGRkZGRkZGRlUg
YXMgYW4gdW5zaWduZWQgMzItYml0Ci0vLyBpbnRlZ2VyKSBhcmUgbm90IGNvbnNpZGVyZWQgYXJy
YXkgaW5kaWNlcyBhbmQgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIEpTT2JqZWN0IHByb3BlcnR5IG1h
cC4KLS8vCi0vLyBBbGwgcHJvcGVydGllcyB3aXRoIGEgbnVtZXJpYyBpZGVudGlmZXIsIHJlcHJl
c2VudGFibGUgYXMgYW4gdW5zaWduZWQgaW50ZWdlciBpLAotLy8gd2hlcmUgKGkgPD0gTUFYX0FS
UkFZX0lOREVYKSwgYXJlIGFuIGFycmF5IGluZGV4IGFuZCB3aWxsIGJlIHN0b3JlZCBpbiBlaXRo
ZXIgdGhlCi0vLyBzdG9yYWdlIHZlY3RvciBvciB0aGUgc3BhcnNlIG1hcC4gIEFuIGFycmF5IGlu
ZGV4IGkgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBmb2xsb3dpbmcKLS8vIGZhc2hpb246Ci0vLwot
Ly8gICAqIFdoZXJlIChpIDwgTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkgdGhlIHZhbHVlIHdpbGwg
YmUgc3RvcmVkIGluIHRoZSBzdG9yYWdlIHZlY3RvciwKLS8vICAgICB1bmxlc3MgdGhlIGFycmF5
IGlzIGluIFNwYXJzZU1vZGUgaW4gd2hpY2ggY2FzZSBhbGwgcHJvcGVydGllcyBnbyBpbnRvIHRo
ZSBtYXAuCi0vLyAgICogV2hlcmUgKE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggPD0gaSA8PSBNQVhf
U1RPUkFHRV9WRUNUT1JfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGVpdGhlcgotLy8gICAgIGJlIHN0
b3JlZCBpbiB0aGUgc3RvcmFnZSB2ZWN0b3Igb3IgaW4gdGhlIHNwYXJzZSBhcnJheSwgZGVwZW5k
aW5nIG9uIHRoZSBkZW5zaXR5IG9mCi0vLyAgICAgZGF0YSB0aGF0IHdvdWxkIGJlIHN0b3JlZCBp
biB0aGUgdmVjdG9yIChhIHZlY3RvciBiZWluZyB1c2VkIHdoZXJlIGF0IGxlYXN0Ci0vLyAgICAg
KDEgLyBtaW5EZW5zaXR5TXVsdGlwbGllcikgb2YgdGhlIGVudHJpZXMgd291bGQgYmUgcG9wdWxh
dGVkKS4KLS8vICAgKiBXaGVyZSAoTUFYX1NUT1JBR0VfVkVDVE9SX0lOREVYIDwgaSA8PSBNQVhf
QVJSQVlfSU5ERVgpIHRoZSB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzdG9yZWQKLS8vICAgICBpbiB0
aGUgc3BhcnNlIGFycmF5LgotCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6ZQotLy8g
ZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1pdCBpcyBk
ZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBjYW5ub3Qg
b3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVlIG9mIHNp
emVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkKLQot
Ly8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4KCkgYW5k
IG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNoLU8gYmlu
YXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9TUEFSU0Vf
QVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRFWCAoTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0vLyAweEZGRkZGRkZGIGlzIGEgYml0IHdlaXJk
IC0tIGlzIG5vdCBhbiBhcnJheSBpbmRleCBldmVuIHRob3VnaCBpdCdzIGFuIGludGVnZXIuCi0j
ZGVmaW5lIE1BWF9BUlJBWV9JTkRFWCAweEZGRkZGRkZFVQotCi0vLyBUaGUgdmFsdWUgQkFTRV9W
RUNUT1JfTEVOIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3IgZWxlbWVudHMgd2UnbGwg
YWxsb2NhdGUKLS8vIGZvciBhbiBhcnJheSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYSBzZXBjaWZp
ZWQgbGVuZ3RoIChlLmcuIGEgPSBuZXcgQXJyYXkoMTIzKSkKLSNkZWZpbmUgQkFTRV9WRUNUT1Jf
TEVOIDRVCi0gICAgCi0vLyBUaGUgdXBwZXIgYm91bmQgdG8gdGhlIHNpemUgd2UnbGwgZ3JvdyBh
IHplcm8gbGVuZ3RoIGFycmF5IHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQKLS8vIGlzIGFkZGVkLgot
I2RlZmluZSBGSVJTVF9WRUNUT1JfR1JPVyA0VQotCi0vLyBPdXIgcG9saWN5IGZvciB3aGVuIHRv
IHVzZSBhIHZlY3RvciBhbmQgd2hlbiB0byB1c2UgYSBzcGFyc2UgbWFwLgotLy8gRm9yIGFsbCBh
cnJheSBpbmRpY2VzIHVuZGVyIE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgsIHdlIGFsd2F5cyB1c2Ug
YSB2ZWN0b3IuCi0vLyBXaGVuIGluZGljZXMgZ3JlYXRlciB0aGFuIE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVggYXJlIGludm9sdmVkLCB3ZSB1c2UgYSB2ZWN0b3IKLS8vIGFzIGxvbmcgYXMgaXQgaXMg
MS84IGZ1bGwuIElmIG1vcmUgc3BhcnNlIHRoYW4gdGhhdCwgd2UgdXNlIGEgbWFwLgotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1pbkRlbnNpdHlNdWx0aXBsaWVyID0gODsKLQogY29uc3QgQ2xhc3NJ
bmZvIEpTQXJyYXk6OnNfaW5mbyA9IHsiQXJyYXkiLCAmSlNOb25GaW5hbE9iamVjdDo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXkpfTsKIAotLy8gV2Uga2VlcCB0cmFj
ayBvZiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBhcnJheSBhZnRlciBpdCB3YXMgZ3Jvd24uICBXZSB1
c2UgdGhpcwotLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBhcyB0aGUgdmFsdWUgdG8gZ3Jv
dyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KLS8vIFRoaXMgdmFsdWUgaXMgY2FwcGVkIGJ5
IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVkIGFib3ZlLgotc3RhdGljIHVu
c2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNEZW5zZUVu
b3VnaEZvclZlY3Rvcih1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG51bVZhbHVlcykKLXsKLSAg
ICByZXR1cm4gbGVuZ3RoIDw9IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVggfHwgbGVuZ3RoIC8gbWlu
RGVuc2l0eU11bHRpcGxpZXIgPD0gbnVtVmFsdWVzOwotfQotCi1zdGF0aWMgYm9vbCByZWplY3Qo
RXhlY1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdl
KQotewotICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgQVNDSUlMaXRlcmFsKG1lc3NhZ2UpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiAh
Q0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotaW5saW5lIHZvaWQgSlNBcnJheTo6Y2hlY2tDb25z
aXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSkKK0J1dHRlcmZseSogY3JlYXRlQXJyYXlCdXR0
ZXJmbHlJbkRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogewotfQotCi0jZW5kaWYKLQotdm9pZCBKU0FycmF5Ojpm
aW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGgpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLQotICAgIHVuc2lnbmVkIGluaXRpYWxWZWN0b3JMZW5n
dGggPSBCQVNFX1ZFQ1RPUl9MRU47Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0b3JhZ2VTaXplID0g
c3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lkKiBuZXdTdG9yYWdl
ID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoaW5pdGlh
bFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAg
bV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3RvcmFnZSk7Ci0gICAg
bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UtPm1fbGVu
Z3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGluaXRpYWxWZWN0b3JM
ZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAorICAgICAgICBnbG9iYWxEYXRh
LCAwLCAwLCB0cnVlLCBJbmRleGluZ0hlYWRlcigpLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IoMCkp
OworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGluaXRpYWxMZW5ndGgpOworICAgIHN0b3JhZ2UtPnNl
dFZlY3Rvckxlbmd0aCgwKTsKKyAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgc3Rv
cmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKKyAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVj
dG9yID0gMDsKICNpZiBDSEVDS19BUlJBWV9DT05TSVNURU5DWQotICAgIG1fc3RvcmFnZS0+bV9p
bkNvbXBhY3RJbml0aWFsaXphdGlvbiA9IGZhbHNlOworICAgIHN0b3JhZ2UtPm1faW5pdGlhbGl6
YXRpb25JbmRleCA9IDA7CisgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFsaXphdGlvbiA9
IDA7CiAjZW5kaWYKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotSlNBcnJheSogSlNB
cnJheTo6dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwotCi0gICAgLy8g
Q2hlY2sgZm9yIGxlbmd0aHMgbGFyZ2VyIHRoYW4gd2UgY2FuIGhhbmRsZSB3aXRoIGEgdmVjdG9y
LgotICAgIGlmIChpbml0aWFsTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBpbml0aWFsVmVjdG9yTGVuZ3RoID0gbWF4
KGluaXRpYWxMZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7Ci0gICAgdW5zaWduZWQgaW5pdGlhbFN0
b3JhZ2VTaXplID0gc3RvcmFnZVNpemUoaW5pdGlhbFZlY3Rvckxlbmd0aCk7Ci0KLSAgICB2b2lk
KiBuZXdTdG9yYWdlID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UoaW5pdGlhbFN0b3JhZ2VTaXplLCAmbmV3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7
Ci0gICAgCi0gICAgbV9zdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3U3Rv
cmFnZSk7Ci0gICAgbV9zdG9yYWdlLT5tX2FsbG9jQmFzZSA9IG1fc3RvcmFnZTsKLSAgICBtX3N0
b3JhZ2UtPm1fbGVuZ3RoID0gaW5pdGlhbExlbmd0aDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IGlu
aXRpYWxWZWN0b3JMZW5ndGg7Ci0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0g
aW5pdGlhbExlbmd0aDsKLQotI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCi0gICAgbV9zdG9y
YWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXggPSAwOwotICAgIG1fc3RvcmFnZS0+bV9pbkNvbXBh
Y3RJbml0aWFsaXphdGlvbiA9IHRydWU7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0aGlzOwotfQot
Ci0vLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gdGhlIHNh
bWUgb2JqZWN0Lgotdm9pZCBKU0FycmF5OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAg
SlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgdGhpc09i
amVjdC0+Y2hlY2tDb25zaXN0ZW5jeShEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjayk7Ci0gICAg
dGhpc09iamVjdC0+ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwotfQotCi1pbmxpbmUgU3BhcnNlQXJy
YXlWYWx1ZU1hcDo6QWRkUmVzdWx0IFNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZChKU0FycmF5KiBh
cnJheSwgdW5zaWduZWQgaSkKLXsKLSAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OwotICAgIGVu
dHJ5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBBZGRSZXN1
bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBt
X21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkp
IHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2Fw
YWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBj
YXBhY2l0eTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIHZvaWQgU3Bh
cnNlQXJyYXlWYWx1ZU1hcDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgQWRkUmVz
dWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkg
PSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBm
aW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgotICAgIC8v
IEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRo
ZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQg
dGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1
bHQuaXRlcmF0b3IpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIShlbnRyeS5h
dHRyaWJ1dGVzICYgQWNjZXNzb3IpKSB7Ci0gICAgICAgIGlmIChlbnRyeS5hdHRyaWJ1dGVzICYg
UmVhZE9ubHkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LkJhc2U6Omdl
dCgpOwotICAgIEFTU0VSVChhY2Nlc3Nvci5pc0dldHRlclNldHRlcigpKTsKLSAgICBKU09iamVj
dCogc2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIoYWNjZXNzb3IpLT5zZXR0ZXIoKTsKLSAgICAKLSAg
ICBpZiAoIXNldHRlcikgewotICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKLSAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgY2FsbChleGVjLCBzZXR0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOwotfQotCi1pbmxpbmUgYm9vbCBTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwg
dW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgUHV0RGlyZWN0SW5kZXhNb2RlIG1vZGUpCi17Ci0g
ICAgQWRkUmVzdWx0IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7Ci0gICAgU3BhcnNlQXJyYXlFbnRy
eSYgZW50cnkgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIFRvIHNhdmUgYSBz
ZXBhcmF0ZSBmaW5kICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFw
LgotICAgIC8vIEluIHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0
eSwgYW5kIHRoZSBhcnJheSBpcyBub3QKLSAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0
aGUgcmlnaHQgdGhpbmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgotICAgIGlmICht
b2RlICE9IFB1dERpcmVjdEluZGV4TGlrZVB1dERpcmVjdCAmJiByZXN1bHQuaXNOZXdFbnRyeSAm
JiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgIHJlbW92ZShyZXN1bHQuaXRlcmF0
b3IpOwotICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhT
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0
IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgIH0KLQotICAgIGVudHJ5LmF0dHJpYnV0ZXMgPSAw
OwotICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRhKCksIGFycmF5LCB2YWx1ZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9w
ZXJ0eVNsb3QmIHNsb3QpIGNvbnN0Ci17Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEJhc2U6OmdldCgp
OwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0KLSAgICBpZiAoTElLRUxZKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcih2YWx1ZSkt
PmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKSB7Ci0gICAgICAgIHNsb3Quc2V0VW5kZWZpbmVk
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzbG90LnNldEdldHRlclNsb3QoZ2V0
dGVyKTsKLX0KLQotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKLXsKLSAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoQmFzZTo6Z2V0KCksIGF0dHJpYnV0ZXMpOwotfQotCi1pbmxpbmUgSlNWYWx1ZSBTcGFyc2VB
cnJheUVudHJ5OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKLXsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IEJhc2U6OmdldCgpOwotICAgIEFTU0VSVChyZXN1bHQpOwot
Ci0gICAgaWYgKExJS0VMWSghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgSlNPYmplY3QqIGdldHRlciA9IGFzR2V0dGVyU2V0dGVyKHJlc3Vs
dCktPmdldHRlcigpOwotICAgIGlmICghZ2V0dGVyKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0dGVyLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKLSAg
ICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKLX0KLQotaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6
Z2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFhdHRyaWJ1dGVzKTsKLSAg
ICByZXR1cm4gQmFzZTo6Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaXRlcmF0b3Ig
ZW5kID0gbV9tYXAuZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJml0LT5zZWNvbmQpOwot
fQotCi12b2lkIEpTQXJyYXk6OmFsbG9jYXRlU3BhcnNlTWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKLXsKLSAgICBtX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7
Ci0gICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Ci19Ci0K
LXZvaWQgSlNBcnJheTo6ZGVhbGxvY2F0ZVNwYXJzZU1hcCgpCi17Ci0gICAgZGVsZXRlIG1fc3Bh
cnNlVmFsdWVNYXA7Ci0gICAgbV9zcGFyc2VWYWx1ZU1hcCA9IDA7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICBpZiAoIW1hcCkgewotICAgICAgICBh
bGxvY2F0ZVNwYXJzZU1hcChnbG9iYWxEYXRhKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICB9Ci0KLSAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1hcC0+c2V0U3BhcnNlTW9kZSgpOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rv
ckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICAvLyBU
aGlzIHdpbGwgYWx3YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8g
Y2hlY2sgd2UgY2FuIHdyaXRlLAotICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVs
dCBzbyBubyBuZWVkIHRvIHNldCB0aGVtLgotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAg
ICBtYXAtPmFkZCh0aGlzLCBpKS5pdGVyYXRvci0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlz
LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3UmF3U3RvcmFnZSA9IDA7Ci0gICAgaWYg
KCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHN0b3JhZ2VTaXplKDApLCAmbmV3
UmF3U3RvcmFnZSkpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgCi0gICAgQXJyYXlTdG9yYWdlKiBu
ZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9yYWdlKj4obmV3UmF3U3RvcmFnZSk7Ci0g
ICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgIG5l
d1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsKLSAgICBtX3N0b3JhZ2UgPSBuZXdT
dG9yYWdlOwotICAgIG1faW5kZXhCaWFzID0gMDsKLSAgICBtX3ZlY3Rvckxlbmd0aCA9IDA7Ci19
Ci0KLXZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFy
cmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJv
cGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQotewotICAgIGlmIChkZXNjcmlwdG9yLmlz
RGF0YURlc2NyaXB0b3IoKSkgewotICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQotICAg
ICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZGVzY3Jp
cHRvci52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29y
RGVzY3JpcHRvcigpKQotICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0
ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlwdG9y
KSAmIH5BY2Nlc3NvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChkZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgSlNPYmplY3QqIGdldHRlciA9
IDA7Ci0gICAgICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSkKLSAgICAgICAgICAg
IGdldHRlciA9IGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKG9s
ZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKLSAgICAgICAgICAgIGdldHRlciA9
IG9sZERlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCk7Ci0gICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIg
PSAwOwotICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCi0gICAgICAgICAg
ICBzZXR0ZXIgPSBkZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotICAgICAgICBlbHNlIGlmIChv
bGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpCi0gICAgICAgICAgICBzZXR0ZXIg
PSBvbGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpOwotCi0gICAgICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKLSAgICAgICAgaWYgKGdldHRl
cikKLSAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
ZXR0ZXIpOwotICAgICAgICBpZiAoc2V0dGVyKQotICAgICAgICAgICAgYWNjZXNzb3ItPnNldFNl
dHRlcihleGVjLT5nbG9iYWxEYXRhKCksIHNldHRlcik7Ci0KLSAgICAgICAgZW50cnlJbk1hcC0+
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOwotICAgICAgICBlbnRyeUlu
TWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQo
b2xkRGVzY3JpcHRvcikgJiB+UmVhZE9ubHk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOwotICAgIGVudHJ5SW5N
YXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChv
bGREZXNjcmlwdG9yKTsKLX0KLQotLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKLWJvb2wgSlNB
cnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKLXsKLSAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7Ci0KLSAgICBpZiAoIWluU3Bh
cnNlTW9kZSgpKSB7Ci0gICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3Vs
YXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHdp
bGwgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB0aGF0IGlmIGF0dHJpYnV0ZXMgYXJlIG1pc3Npbmcg
dGhlbiB0aGV5J2xsIGRlZmF1bHQgdG8gZmFsc2UKLSAgICAgICAgLy8g4oCTIGhvd2V2ZXIgaWYg
dGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3Zl
cnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBk
ZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVl
ZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
YXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRl
eFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBlbnRlckRpY3Rpb25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAg
fQotCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1ZU1hcDsKLSAg
ICBBU1NFUlQobWFwKTsKLQotICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
cHJvcGVydHkgbmFtZSBQLgotICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLQotICAgIC8vIDIuIExldCBleHRlbnNp
YmxlIGJlIHRoZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkg
b2YgTy4KLSAgICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBp
cyBmYWxzZSwgdGhlbiBSZWplY3QuCi0gICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQg
YW5kIGV4dGVuc2libGUgaXMgdHJ1ZSwgdGhlbgotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7Ci0gICAgICAgICAgICBtYXAtPnJlbW92
ZShyZXN1bHQuaXRlcmF0b3IpOwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0
IGlzIG5vdCBleHRlbnNpYmxlLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC5hLiBJZiBJ
c0dlbmVyaWNEZXNjcmlwdG9yKERlc2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1
ZSwgdGhlbiBjcmVhdGUgYW4gb3duIGRhdGEgcHJvcGVydHkKLSAgICAgICAgLy8gbmFtZWQgUCBv
ZiBvYmplY3QgTyB3aG9zZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0g
YW5kIFtbQ29uZmlndXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcwotICAgICAgICAvLyBhcmUgZGVz
Y3JpYmVkIGJ5IERlc2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVz
YyBpcyBhYnNlbnQsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5Ci0gICAgICAgIC8vIGNyZWF0
ZWQgcHJvcGVydHkgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmIu
IEVsc2UsIERlc2MgbXVzdCBiZSBhbiBhY2Nlc3NvciBQcm9wZXJ0eSBEZXNjcmlwdG9yIHNvLCBj
cmVhdGUgYW4gb3duIGFjY2Vzc29yIHByb3BlcnR5IG5hbWVkIFAgb2YKLSAgICAgICAgLy8gb2Jq
ZWN0IE8gd2hvc2UgW1tHZXRdXSwgW1tTZXRdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmln
dXJhYmxlXV0gYXR0cmlidXRlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIGJ5Ci0gICAgICAgIC8vIERl
c2MuIElmIHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQs
IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgcHJvcGVydHkKLSAgICAgICAgLy8g
aXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgICAgICAvLyA0LmMuIFJldHVybiB0cnVl
LgotCi0gICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZWZhdWx0czsKLSAgICAgICAgZW50cnlJ
bk1hcC0+c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgZW50
cnlJbk1hcC0+YXR0cmlidXRlcyA9IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5Owot
ICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwotCi0gICAgICAgIHB1dERlc2NyaXB0
b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAo
aW5kZXggPj0gbV9zdG9yYWdlLT5tX2xlbmd0aCkKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+bV9s
ZW5ndGggPSBpbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IDUuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KLSAgICAv
LyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBj
dXJyZW50IGFuZCB0aGUgdmFsdWUgb2YgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2
YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQg
dXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdvcml0aG0gKDkuMTIpLgotICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBjdXJyZW50OwotICAgIGVudHJ5SW5NYXAtPmdldChjdXJyZW50KTsKLSAgICBpZiAoZGVz
Y3JpcHRvci5pc0VtcHR5KCkgfHwgZGVzY3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1d
IGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgdGhlbgotICAgIGlmICghY3VycmVudC5jb25maWd1
cmFibGUoKSkgewotICAgICAgICAvLyA3LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxl
XV0gZmllbGQgb2YgRGVzYyBpcyB0cnVlLgotICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1
cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5n
ZSBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwot
ICAgICAgICAvLyA3LmIuIFJlamVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERl
c2MgaXMgcHJlc2VudCBhbmQgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFu
ZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgotICAgICAgICBp
ZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgp
ICE9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0
cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgIH0KLQotICAgIC8vIDgu
IElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZh
bGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2Ny
aXB0b3IoKSkgewotICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJl
bnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRo
ZW4KLSAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhl
IFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KLSAgICAgICAgICAg
IGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1l
Y2hhbmlzbSBmb3IgYW4gdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7Ci0gICAgICAgICAgICAv
LyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0
IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20gYQotICAgICAgICAgICAgLy8g
ZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0
aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCYcwotICAgICAgICAgICAgLy8g
W1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0cmlidXRlcyBhbmQgc2V0IHRo
ZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0bwotICAgICAgICAgICAgLy8g
dGhlaXIgZGVmYXVsdCB2YWx1ZXMuCi0gICAgICAgICAgICAvLyA5LmMuIEVsc2UsIGNvbnZlcnQg
dGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhbiBhY2Nlc3NvciBwcm9wZXJ0
eSB0byBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgZXhpc3Rp
bmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzIFtbQ29uZmlndXJhYmxlXV0g
YW5kIFtbRW51bWVyYWJsZV1dCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhl
IHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvIHRoZWlyIGRlZmF1bHQgdmFs
dWVzLgotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICYmIGRl
c2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Ci0gICAgICAgICAgICAvLyAxMC4gRWxzZSwg
aWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBh
cmUgYm90aCB0cnVlLCB0aGVuCi0gICAgICAgICAgICAvLyAxMC5hLiBJZiB0aGUgW1tDb25maWd1
cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICBpZiAo
IWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3JpdGFibGUoKSkgewotICAgICAg
ICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9m
IGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0
cnVlLgotICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSB3cml0YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7Ci0gICAgICAgICAgICAgICAgLy8gMTAuYS5paS4gSWYgdGhlIFtbV3JpdGFibGVdXSBm
aWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gMTAuYS5p
aS4xLiBSZWplY3QsIGlmIHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFu
ZCBTYW1lVmFsdWUoRGVzYy5bW1ZhbHVlXV0sIGN1cnJlbnQuW1tWYWx1ZV1dKSBpcyBmYWxzZS4K
LSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpICYmICFzYW1lVmFsdWUoZXhl
YywgZGVzY3JpcHRvci52YWx1ZSgpLCBjdXJyZW50LnZhbHVlKCkpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1
cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRhYmxlLgotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnQuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAm
JiBjdXJyZW50LmdldHRlclByZXNlbnQoKSAmJiBjdXJyZW50LnNldHRlclByZXNlbnQoKSk7Ci0g
ICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0b3IoY3VycmVudCkgYW5k
IElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUgc28sIGlmIHRoZSBbW0Nv
bmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KLSAgICAgICAgICAg
IGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDExLmku
IFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1l
VmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZhbHNlLgotICAgICAgICAg
ICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLnNldHRl
cigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB0aGUgc2V0dGVy
IG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwotICAgICAgICAgICAgICAgIC8vIDEx
LmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
U2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBpcyBmYWxzZS4KLSAgICAg
ICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5n
ZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIGdl
dHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRyaWJ1dGUgZmllbGQgb2Yg
RGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGluZ2x5IG5hbWVkIGF0dHJp
YnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0byB0aGUgdmFsdWUgb2Yg
dGhlIGZpZWxkLgotICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRv
ciwgY3VycmVudCk7Ci0gICAgLy8gMTMuIFJldHVybiB0cnVlLgotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBidXR0ZXJmbHk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoV3JpdGFi
bGUoRXhlY1N0YXRlKiBleGVjLCBib29sIHdyaXRhYmxlKQpAQCAtNTI3LDkgKzc0LDkgQEAgdm9p
ZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdAogICAgIGlmICghaXNMZW5ndGhX
cml0YWJsZSgpIHx8IHdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBlbnRlckRpY3Rp
b25hcnlNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKGV4ZWMtPmdsb2JhbERhdGEoKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBBU1NFUlQobWFwKTsKICAgICBt
YXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsKIH0KQEAgLTYzMCwzOCArMTc3LDEwIEBAIGJvb2wg
SlNBcnJheTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QKICAgICAgICAgLy8gZS5pLiBTZXQg
b2xkTGVuRGVzYy5bW1ZhbHVlXV0gdG8gaW5kZXggKyAxLgogICAgICAgICAvLyBlLmlpLiBDYWxs
IHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIu
OSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1l
bnRzLiBUaGlzIGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgIC8vIGYuIFJl
dHVybiB0cnVlLgotICAgICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0
eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwotICAgIH0KLQotICAg
IHJldHVybiBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKLX0KLQotYm9vbCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgSlNBcnJheSogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9zdG9yYWdlOwotCi0gICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgp
IHsKLSAgICAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSksIHNsb3QpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoU3BhcnNl
QXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVjdC0+bV9zcGFyc2VWYWx1ZU1hcCkgewotICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKLSAg
ICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29u
ZC5nZXQoc2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYXJyYXktPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eShleGVjLCBpbmRleCwgZGVz
Y3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSksIHNsb3QpOworICAgIHJldHVybiBhcnJheS0+SlNPYmplY3Q6OmRlZmluZU93bk5vbklu
ZGV4UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlv
bik7CiB9CiAKIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkBAIC02NzIsMTAgKzE5MSw2IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KQotICAgICAgICByZXR1cm4gSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCBzbG90KTsKLQogICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKQEAgLTY4NywyNiArMjAyLDYgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX3N0b3JhZ2U7Ci0gICAgCi0gICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Ci0gICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KSB7Ci0gICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9y
TGVuZ3RoKSB7Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodmFsdWUuZ2V0KCksIDApOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1fc3BhcnNlVmFsdWVNYXApIHsK
LSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5k
KGkpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAg
ICAgICAgIGl0LT5zZWNvbmQuZ2V0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKQEAgLTcxNCwxMSArMjA5LDYgQEAgYm9vbCBKU0FycmF5
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogdm9pZCBKU0FycmF5OjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBKU0FycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKLSAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKLSAg
ICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKICAgICAgICAgdW5zaWduZWQgbmV3
TGVuZ3RoID0gdmFsdWUudG9VSW50MzIoZXhlYyk7CkBAIC03MzMsMTk2ICsyMjMsOSBAQCB2b2lk
IEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0CiAgICAgSlNPYmplY3Q6OnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAotdm9pZCBK
U0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotewotICAgIEpTQXJyYXkqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPmNoZWNr
Q29uc2lzdGVuY3koKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCi0g
ICAgaWYgKGkgPCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCkgewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLQotICAgICAgICAvLyBVcGRh
dGUgbV9sZW5ndGggJiBtX251bVZhbHVlc0luVmVjdG9yIGFzIG5lY2Vzc2FyeS4KLSAgICAgICAg
aWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZVNsb3QpCi0gICAg
ICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0KLSAgICAgICAgdmFsdWVT
bG90LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmplY3QsIHZhbHVlKTsKLSAgICAgICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gSGFuZGxlIDJeMzItMSAtIHRoaXMgaXMgbm90IGFuIGFycmF5IGluZGV4IChzZWUg
RVM1LjEgMTUuNCksIGFuZCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBwcm9wZXJ0eS4KLSAgICBp
ZiAoVU5MSUtFTFkoaSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKLSAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qoc2hvdWxkVGhyb3cpOwotICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSwgdmFsdWUs
IHNsb3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRm9yIGFsbCBvdGhlciBj
YXNlcywgY2FsbCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3Qt
PnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgaSwgdmFsdWUsIHNob3VsZFRocm93
KTsKLSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLXZvaWQgSlNBcnJh
eTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi17Ci0gICAgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotCi0gICAgLy8gaSBzaG91bGQgYmUg
YSB2YWxpZCBhcnJheSBpbmRleCB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9y
LgotICAgIEFTU0VSVChpID49IG1fdmVjdG9yTGVuZ3RoKTsKLSAgICBBU1NFUlQoaSA8PSBNQVhf
QVJSQVlfSU5ERVgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwot
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7Ci0KLSAgICAv
LyBGaXJzdCwgaGFuZGxlIGNhc2VzIHdoZXJlIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgc3Bh
cnNlIG1hcC4KLSAgICBpZiAoTElLRUxZKCFtYXApKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhcnJh
eSBpcyBub3QgZXh0ZW5zaWJsZSwgd2Ugc2hvdWxkIGhhdmUgZW50ZXJlZCBkaWN0aW9uYXJ5IG1v
ZGUsIGFuZCBjcmVhdGVkIHRoZSBzcGFyZSBtYXAuCi0gICAgICAgIEFTU0VSVChpc0V4dGVuc2li
bGUoKSk7Ci0gICAgCi0gICAgICAgIC8vIFVwZGF0ZSBtX2xlbmd0aCBpZiBuZWNlc3NhcnkuCi0g
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgc3RvcmFnZS0+
bV9sZW5ndGggPSBpICsgMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IGl0IGlzIHNlbnNpYmxl
IHRvIHN0aWxsIGJlIHVzaW5nIGEgdmVjdG9yLCBhbmQgdGhlbiB0cnkgdG8gZ3JvdyB0aGUgdmVj
dG9yLgotICAgICAgICBpZiAoTElLRUxZKChpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKSAmJiBpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxE
YXRhLCBpICsgMSkpKSB7Ci0gICAgICAgICAgICAvLyBzdWNjZXNzISAtIHJlcmVhZCBtX3N0b3Jh
Z2Ugc2luY2UgaXQgaGFzIGxpa2VseSBiZWVuIHJlYWxsb2NhdGVkLCBhbmQgc3RvcmUgdG8gdGhl
IHZlY3Rvci4KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBh
IHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBh
ZGQgdGhlIHZhbHVlLgotICAgICAgICBhbGxvY2F0ZVNwYXJzZU1hcChleGVjLT5nbG9iYWxEYXRh
KCkpOwotICAgICAgICBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwotICAgICAgICBtYXAtPnB1dChl
eGVjLCB0aGlzLCBpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAoaSA+PSBsZW5ndGgpIHsKLSAgICAg
ICAgLy8gUHJvaGliaXQgZ3Jvd2luZyB0aGUgYXJyYXkgaWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJs
ZS4KLSAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25seSgpIHx8ICFpc0V4dGVuc2libGUo
KSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsZW5n
dGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5ndGg7Ci0gICAgfQot
Ci0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ug
c3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1
c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0
b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgotICAgIHVuc2lnbmVkIG51bVZhbHVl
c0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7Ci0g
ICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0
aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1
ZSwgc2hvdWxkVGhyb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVyZWFk
IG1fc3RvcmFnZSBhZnRlcmluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KLSAgICBzdG9yYWdlID0gbV9zdG9yYWdlOwotICAgIHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgPSBudW1WYWx1ZXNJbkFycmF5OwotCi0gICAgLy8gQ29weSBhbGwgdmFsdWVz
IGZyb20gdGhlIG1hcCBpbnRvIHRoZSB2ZWN0b3IsIGFuZCBkZWxldGUgdGhlIG1hcC4KLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwotICAgIFNw
YXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0gICAg
Zm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB2ZWN0b3JbaXQtPmZpcnN0XS5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotICAgIGRlYWxsb2Nh
dGVTcGFyc2VNYXAoKTsKLQotICAgIC8vIFN0b3JlIHRoZSBuZXcgcHJvcGVydHkgaW50byB0aGUg
dmVjdG9yLgotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gdmVjdG9yW2ld
OwotICAgIGlmICghdmFsdWVTbG90KQotICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3I7Ci0gICAgdmFsdWVTbG90LnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci19Ci0K
LWJvb2wgSlNBcnJheTo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBQdXREaXJlY3RJbmRleE1vZGUgbW9k
ZSkKLXsKLSAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0KLSAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lk
ZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCi0gICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgp
OwotICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7Ci0KLSAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9z
cGFyc2VWYWx1ZU1hcDsKLQotICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9u
J3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgotICAgIGlmIChMSUtFTFkoIW1hcCkpIHsK
LSAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2
ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KLSAg
ICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKLSAgICAKLSAgICAgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bV9sZW5ndGgp
Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGkgKyAxOwotCi0gICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0
aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCi0gICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKLSAgICAgICAgICAgIC8vIHN1
Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxv
Y2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgotICAgICAgICAgICAgc3RvcmFnZSA9IG1f
c3RvcmFnZTsKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5
IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KLSAgICAgICAgYWxsb2Nh
dGVTcGFyc2VNYXAoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgbWFwID0gbV9zcGFyc2VW
YWx1ZU1hcDsKLSAgICAgICAgcmV0dXJuIG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBtb2RlKTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5
LgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49
IGxlbmd0aCkgewotICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5n
dGggaXMgbm90IHdyaXRhYmxlLgotICAgICAgICBpZiAobW9kZSAhPSBQdXREaXJlY3RJbmRleExp
a2VQdXREaXJlY3QpIHsKLSAgICAgICAgICAgIGlmIChtYXAtPmxlbmd0aElzUmVhZE9ubHkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5k
ZXhTaG91bGRUaHJvdywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAg
ICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3csICJBdHRlbXB0aW5n
IHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKTsK
LSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9s
ZW5ndGggPSBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBh
IG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3RpbGwgd2FudCB0byBiZSBkb2luZyBzby4KLSAgICAv
LyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2UgYSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMg
c2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28gc3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxz
LgotICAgIHVuc2lnbmVkIG51bVZhbHVlc0luQXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yICsgbWFwLT5zaXplKCk7Ci0gICAgaWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0Rl
bnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwgbnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNl
VmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJu
IG1hcC0+cHV0RGlyZWN0KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBtb2RlKTsKLQotICAgIC8vIFJl
cmVhZCBtX3N0b3JhZ2UgYWZ0ZXJpbmNyZWFzZVZlY3Rvckxlbmd0aCwgdXBkYXRlIG1fbnVtVmFs
dWVzSW5WZWN0b3IuCi0gICAgc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSAgICBzdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yID0gbnVtVmFsdWVzSW5BcnJheTsKLQotICAgIC8vIENvcHkgYWxsIHZh
bHVlcyBmcm9tIHRoZSBtYXAgaW50byB0aGUgdmVjdG9yLCBhbmQgZGVsZXRlIHRoZSBtYXAuCi0g
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwot
ICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGds
b2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKLSAgICBkZWFs
bG9jYXRlU3BhcnNlTWFwKCk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8g
dGhlIHZlY3Rvci4KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3Rv
cltpXTsKLSAgICBpZiAoIXZhbHVlU2xvdCkKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVl
c0luVmVjdG9yOwotICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewog
ICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwotICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOwotICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtOTMwLDM1ICsyMzMsNiBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1ib29sIEpTQXJyYXk6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKLXsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsK
LSAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoaSA+IE1BWF9B
UlJBWV9JTkRFWCkKLSAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdlOwot
ICAgIAotICAgIGlmIChpIDwgdGhpc09iamVjdC0+bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsK
LSAgICAgICAgaWYgKHZhbHVlU2xvdCkgewotICAgICAgICAgICAgdmFsdWVTbG90LmNsZWFyKCk7
Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHRoaXNPYmplY3QtPm1f
c3BhcnNlVmFsdWVNYXApIHsKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAtPmZpbmQoaSk7Ci0gICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsK
LSAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNv
bnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7CiAgICAgdW5zaWduZWQgZGEgPSAqc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihhKTsKQEAgLTk2NiwxMjcgKzI0MCwyNiBAQCBzdGF0aWMg
aW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAt
IChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAg
SlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLSAgICAvLyBG
SVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2
ZXJ5IGludGVnZXIKLSAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBh
cnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCi0gICAgLy8gd2hpY2ggYWxtb3N0
IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFy
cmF5LgotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9zdG9yYWdl
OwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bV9s
ZW5ndGgsIHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChzdG9yYWdlLT5t
X3ZlY3RvcltpXSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOwotICAgIH0KLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSB0aGlzT2JqZWN0LT5tX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4ga2V5czsKLSAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkobWFwLT5zaXplKCkpOwotICAg
ICAgICAKLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWFwLT5lbmQoKTsKLSAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8ICEoaXQtPnNlY29uZC5hdHRy
aWJ1dGVzICYgRG9udEVudW0pKQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpdC0+Zmlyc3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHFzb3J0KGtl
eXMuYmVnaW4oKSwga2V5cy5zaXplKCksIHNpemVvZih1bnNpZ25lZCksIGNvbXBhcmVLZXlzRm9y
UVNvcnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
a2V5c1tpXSkpOwotICAgIH0KIAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQg
SlNBcnJheTo6Z2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpCi17Ci0g
ICAgQVNTRVJUKGRlc2lyZWRMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0K
LSAgICB1bnNpZ25lZCBpbmNyZWFzZWRMZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4SW5pdExlbmd0
aCA9IG1pbihtX3N0b3JhZ2UtPm1fbGVuZ3RoLCAxMDAwMDBVKTsKLQotICAgIGlmIChkZXNpcmVk
TGVuZ3RoIDwgbWF4SW5pdExlbmd0aCkKLSAgICAgICAgaW5jcmVhc2VkTGVuZ3RoID0gbWF4SW5p
dExlbmd0aDsKLSAgICBlbHNlIGlmICghbV92ZWN0b3JMZW5ndGgpCi0gICAgICAgIGluY3JlYXNl
ZExlbmd0aCA9IG1heChkZXNpcmVkTGVuZ3RoLCBsYXN0QXJyYXlTaXplKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gTWF0aGVtYXRpY2FsbHkgZXF1aXZhbGVudCB0bzoKLSAgICAgICAgLy8gICBp
bmNyZWFzZWRMZW5ndGggPSAobmV3TGVuZ3RoICogMyArIDEpIC8gMjsKLSAgICAgICAgLy8gb3I6
Ci0gICAgICAgIC8vICAgaW5jcmVhc2VkTGVuZ3RoID0gKHVuc2lnbmVkKWNlaWwobmV3TGVuZ3Ro
ICogMS41KSk7Ci0gICAgICAgIC8vIFRoaXMgZm9ybSBpcyBub3QgcHJvbmUgdG8gaW50ZXJuYWwg
b3ZlcmZsb3cuCi0gICAgICAgIGluY3JlYXNlZExlbmd0aCA9IGRlc2lyZWRMZW5ndGggKyAoZGVz
aXJlZExlbmd0aCA+PiAxKSArIChkZXNpcmVkTGVuZ3RoICYgMSk7Ci0gICAgfQotCi0gICAgQVNT
RVJUKGluY3JlYXNlZExlbmd0aCA+PSBkZXNpcmVkTGVuZ3RoKTsKLQotICAgIGxhc3RBcnJheVNp
emUgPSBtaW4oaW5jcmVhc2VkTGVuZ3RoLCBGSVJTVF9WRUNUT1JfR1JPVyk7Ci0KLSAgICByZXR1
cm4gbWluKGluY3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci19Ci0K
LWJvb2wgSlNBcnJheTo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBuZXdMZW5ndGgpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBsZWF2ZXMg
dGhlIGFycmF5IGluIGFuIGludGVybmFsbHkgaW5jb25zaXN0ZW50IHN0YXRlLCBiZWNhdXNlIGl0
IGRvZXMgbm90IG1vdmUgYW55IHZhbHVlcyBmcm9tIHNwYXJzZSB2YWx1ZSBtYXAKLSAgICAvLyB0
byB0aGUgdmVjdG9yLiBDYWxsZXJzIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhhdCwgYmVjYXVzZSB0
aGV5IGNhbiBkbyBpdCBtb3JlIGVmZmljaWVudGx5LgotICAgIGlmIChuZXdMZW5ndGggPiBNQVhf
U1RPUkFHRV9WRUNUT1JfTEVOR1RIKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0KLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5n
dGggPSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBBU1NFUlQobmV3TGVuZ3RoID4gdmVjdG9yTGVuZ3Ro
KTsKLSAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBnZXROZXdWZWN0b3JMZW5ndGgobmV3
TGVuZ3RoKTsKLQotICAgIC8vIEZhc3QgY2FzZSAtIHRoZXJlIGlzIG5vIHByZWNhcGFjaXR5LiBJ
biB0aGVzZSBjYXNlcyBhIHJlYWxsb2MgbWFrZXMgc2Vuc2UuCi0gICAgaWYgKExJS0VMWSghbV9p
bmRleEJpYXMpKSB7Ci0gICAgICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBzdG9yYWdlLT5tX2FsbG9j
QmFzZTsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uo
Jm5ld1N0b3JhZ2UsIHN0b3JhZ2VTaXplKHZlY3Rvckxlbmd0aCksIHN0b3JhZ2VTaXplKG5ld1Zl
Y3Rvckxlbmd0aCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0b3Jh
Z2UgPSBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxBcnJheVN0b3JhZ2UqPihzdGF0
aWNfY2FzdDxjaGFyKj4obmV3U3RvcmFnZSkpOwotICAgICAgICBtX3N0b3JhZ2UtPm1fYWxsb2NC
YXNlID0gbmV3U3RvcmFnZTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2Up
OwotCi0gICAgICAgIG1fdmVjdG9yTGVuZ3RoID0gbmV3VmVjdG9yTGVuZ3RoOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHNvbWUsIGJ1dCBu
b3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBlZCB0byBub3Qg
b3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG1pbiht
X2luZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0gbmV3VmVjdG9yTGVu
Z3RoKTsKLSAgICAvLyBDYWxjdWxhdGUgbmV3IHN0b2FyZ2UgY2FwY2l0eSwgYWxsb3dpbmcgcm9v
bSBmb3IgdGhlIHByZS1jYXBhY2l0eS4KLSAgICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHkg
PSBuZXdWZWN0b3JMZW5ndGggKyBuZXdJbmRleEJpYXM7Ci0gICAgdm9pZCogbmV3QWxsb2NCYXNl
ID0gMDsKLSAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uoc3RvcmFn
ZVNpemUobmV3U3RvcmFnZUNhcGFjaXR5KSwgJm5ld0FsbG9jQmFzZSkpICAgIAotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRl
eEJpYXMgd2lsbCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBB
U1NFUlQobV92ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7
Ci0KLSAgICBtX3ZlY3Rvckxlbmd0aCA9IG5ld1ZlY3Rvckxlbmd0aDsKLSAgICBtX2luZGV4Qmlh
cyA9IG5ld0luZGV4QmlhczsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0X3B0cjxB
cnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG5l
d0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBDb3B5IHRoZSBBcnJheVN0b3Jh
Z2UgaGVhZGVyICYgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmVjdG9yLgotICAgIG1lbW1vdmUo
bV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6ZSh2ZWN0b3JMZW5ndGgpKTsKLQotICAgIC8v
IEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgbV9zdG9y
YWdlLT5tX2FsbG9jQmFzZSA9IG5ld0FsbG9jQmFzZTsKLQotICAgIHJldHVybiB0cnVlOworICAg
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4g
dGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIHVuY2xlYXJlZC4KIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBjb3VudCkKIHsKLSAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhp
cyBvbiB0aGUgZmFzdCBwYXRoLgotICAgIEFTU0VSVChjb3VudCA+IG1faW5kZXhCaWFzKTsKKyAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBlbnN1cmVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSk7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKTsKKyAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZVNp
emUoKTsKIAotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICAvLyBJ
ZiBub3QsIHdlIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhpcyBvbiB0aGUgZmFzdCBwYXRoLgorICAg
IEFTU0VSVChjb3VudCA+IHN0b3JhZ2UtPm1faW5kZXhCaWFzKTsKIAogICAgIC8vIFN0ZXAgMToK
ICAgICAvLyBHYXRoZXIgNCBrZXkgbWV0cmljczoKQEAgLTEwOTUsOCArMjY4LDggQEAgYm9vbCBK
U0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIC8vICAqIGN1cnJlbnRDYXBh
Y2l0eSAtIHdoYXQgaXMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgdmVjdG9yLCBpbmNsdWRpbmcg
YW55IHByZS1jYXBhY2l0eS4KICAgICAvLyAgKiBkZXNpcmVkQ2FwYWNpdHkgLSBob3cgbGFyZ2Ug
c2hvdWxkIHdlIGxpa2UgdG8gZ3JvdyB0aGUgdmVjdG9yIHRvIC0gYmFzZWQgb24gMnggcmVxdWly
ZWRWZWN0b3JMZW5ndGguCiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0
aDsKLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKG1fdmVjdG9yTGVuZ3RoLCBs
ZW5ndGgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCksIGxl
bmd0aCk7CiAgICAgQVNTRVJUKHVzZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9S
X0xFTkdUSCk7CiAgICAgLy8gQ2hlY2sgdGhhdCByZXF1aXJlZCB2ZWN0b3IgbGVuZ3RoIGlzIHBv
c3NpYmxlLCBpbiBhbiBvdmVyZmxvdy1zYWZlIGZhc2hpb24uCiAgICAgaWYgKGNvdW50ID4gTUFY
X1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHVzZWRWZWN0b3JMZW5ndGgpCkBAIC0xMTA0LDggKzI3
Nyw4IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNp
Z25lZCByZXF1aXJlZFZlY3Rvckxlbmd0aCA9IHVzZWRWZWN0b3JMZW5ndGggKyBjb3VudDsKICAg
ICBBU1NFUlQocmVxdWlyZWRWZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdU
SCk7CiAgICAgLy8gVGhlIHN1bSBvZiBtX3ZlY3Rvckxlbmd0aCBhbmQgbV9pbmRleEJpYXMgd2ls
bCBuZXZlciBleGNlZWQgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSC4KLSAgICBBU1NFUlQobV92
ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAmJiAoTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCAtIG1fdmVjdG9yTGVuZ3RoKSA+PSBtX2luZGV4Qmlhcyk7Ci0gICAgdW5z
aWduZWQgY3VycmVudENhcGFjaXR5ID0gbV92ZWN0b3JMZW5ndGggKyBtX2luZGV4QmlhczsKKyAg
ICBBU1NFUlQoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCAmJiAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKSA+PSBzdG9yYWdlLT5tX2luZGV4Qmlhcyk7CisgICAgdW5zaWduZWQgY3VycmVudENhcGFj
aXR5ID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgKyBzdG9yYWdlLT5tX2luZGV4QmlhczsKICAg
ICAvLyBUaGUgY2FsY3VsYXRpb24gb2YgZGVzaXJlZENhcGFjaXR5IHdvbid0IG92ZXJmbG93LCBk
dWUgdG8gdGhlIHJhbmdlIG9mIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEguCiAgICAgdW5zaWdu
ZWQgZGVzaXJlZENhcGFjaXR5ID0gbWluKE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgsIG1heChC
QVNFX1ZFQ1RPUl9MRU4sIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKSA8PCAxKTsKIApAQCAtMTExNiwx
MCArMjg5LDExIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAg
ICB1bnNpZ25lZCBuZXdTdG9yYWdlQ2FwYWNpdHk7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3Rv
cmFnZSBhcnJheSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UgKGJ1dCBub3QgdG9vIGxhcmdlISkgdGhl
biBqdXN0IGtlZXAgdXNpbmcgaXQuCiAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSA+IGRlc2lyZWRD
YXBhY2l0eSAmJiBpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGN1cnJlbnRDYXBhY2l0eSwgcmVxdWly
ZWRWZWN0b3JMZW5ndGgpKSB7Ci0gICAgICAgIG5ld0FsbG9jQmFzZSA9IHN0b3JhZ2UtPm1fYWxs
b2NCYXNlOworICAgICAgICBuZXdBbGxvY0Jhc2UgPSBidXR0ZXJmbHktPmJhc2Uoc3RydWN0dXJl
KCkpOwogICAgICAgICBuZXdTdG9yYWdlQ2FwYWNpdHkgPSBjdXJyZW50Q2FwYWNpdHk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KHN0b3JhZ2VTaXplKGRlc2lyZWRDYXBhY2l0eSksICZuZXdBbGxvY0Jhc2UpKQorICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHByb3BlcnR5Q2FwYWNpdHks
IHRydWUsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihkZXNpcmVkQ2FwYWNpdHkpKTsKKyAgICAgICAg
aWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZuZXdBbGxv
Y0Jhc2UpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBuZXdTdG9yYWdlQ2Fw
YWNpdHkgPSBkZXNpcmVkQ2FwYWNpdHk7CiAgICAgfQpAQCAtMTEzMiw0NSArMzA2LDQwIEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyBJZiBpdCBkaWQs
IHdlIGNhbGN1bGF0ZSB0aGUgYW1vdW50IHRoYXQgd2lsbCByZW1haW4gYmFzZWQgb24gYW4gYXRv
bWljIGRlY2F5IC0gbGVhdmUgdGhlCiAgICAgLy8gdmVjdG9yIHdpdGggaGFsZiB0aGUgcG9zdC1j
YXBhY2l0eSBpdCBoYWQgcHJldmlvdXNseS4KICAgICB1bnNpZ25lZCBwb3N0Q2FwYWNpdHkgPSAw
OwotICAgIGlmIChsZW5ndGggPCBtX3ZlY3Rvckxlbmd0aCkgeworICAgIGlmIChsZW5ndGggPCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewogICAgICAgICAvLyBBdG9taWMgZGVjYXksICsgdGhl
IHBvc3QtY2FwYWNpdHkgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB3aGF0IGlzIGF2YWlsYWJsZS4K
LSAgICAgICAgcG9zdENhcGFjaXR5ID0gbWluKChtX3ZlY3Rvckxlbmd0aCAtIGxlbmd0aCkgPj4g
MSwgbmV3U3RvcmFnZUNhcGFjaXR5IC0gcmVxdWlyZWRWZWN0b3JMZW5ndGgpOwotICAgICAgICAv
LyBJZiB3ZSdyZSBtb3ZpbmcgY29udGVudHMgd2l0aGluIHRoZSBzYW1lIGFsbG9jYXRpb24sIHRo
ZSBwb3N0LWNhcGFjaXR5IGlzIGJlaW5nIHJlZHVjZWQuCi0gICAgICAgIEFTU0VSVChuZXdBbGxv
Y0Jhc2UgIT0gc3RvcmFnZS0+bV9hbGxvY0Jhc2UgfHwgcG9zdENhcGFjaXR5IDwgbV92ZWN0b3JM
ZW5ndGggLSBsZW5ndGgpOwotICAgIH0KLQotICAgIG1fdmVjdG9yTGVuZ3RoID0gcmVxdWlyZWRW
ZWN0b3JMZW5ndGggKyBwb3N0Q2FwYWNpdHk7Ci0gICAgbV9pbmRleEJpYXMgPSBuZXdTdG9yYWdl
Q2FwYWNpdHkgLSBtX3ZlY3Rvckxlbmd0aDsKLSAgICBtX3N0b3JhZ2UgPSByZWludGVycHJldF9j
YXN0X3B0cjxBcnJheVN0b3JhZ2UqPihyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KG5ld0FsbG9jQmFzZSkgKyBtX2luZGV4Qmlhcyk7Ci0KLSAgICAvLyBTdGVwIDQ6Ci0g
ICAgLy8gQ29weSBhcnJheSBkYXRhIC8gaGVhZGVyIGludG8gdGhlaXIgbmV3IGxvY2F0aW9ucywg
Y2xlYXIgcG9zdC1jYXBhY2l0eSAmIGZyZWUgYW55IG9sZCBhbGxvY2F0aW9uLgotCi0gICAgLy8g
SWYgdGhpcyBpcyBiZWluZyBtb3ZlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBvZiBtZW1v
cnksIHdlIGFyZSBhbHdheXMgc2hpZnRpbmcgZGF0YQotICAgIC8vIHRvIHRoZSByaWdodCAoc2lu
Y2UgY291bnQgPiBtX2luZGV4QmlhcykuIEFzIHN1Y2ggdGhpcyBtZW1tb3ZlIGNhbm5vdCB0cmFt
cGxlIHRoZSBoZWFkZXIuCi0gICAgbWVtbW92ZShtX3N0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQs
IHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIHVzZWRW
ZWN0b3JMZW5ndGgpOwotICAgIG1lbW1vdmUobV9zdG9yYWdlLCBzdG9yYWdlLCBzdG9yYWdlU2l6
ZSgwKSk7Ci0KLSAgICAvLyBBcmUgd2UgY29weWluZyBpbnRvIGEgbmV3IGFsbG9jYXRpb24/Ci0g
ICAgaWYgKG5ld0FsbG9jQmFzZSAhPSBtX3N0b3JhZ2UtPm1fYWxsb2NCYXNlKSB7Ci0gICAgICAg
IC8vIEZyZWUgdGhlIG9sZCBhbGxvY2F0aW9uLCB1cGRhdGUgbV9hbGxvY0Jhc2UuCi0gICAgICAg
IG1fc3RvcmFnZS0+bV9hbGxvY0Jhc2UgPSBuZXdBbGxvY0Jhc2U7CisgICAgICAgIHBvc3RDYXBh
Y2l0eSA9IG1pbigoc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpID4+IDEsIG5ld1N0
b3JhZ2VDYXBhY2l0eSAtIHJlcXVpcmVkVmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgLy8gSWYgd2Un
cmUgbW92aW5nIGNvbnRlbnRzIHdpdGhpbiB0aGUgc2FtZSBhbGxvY2F0aW9uLCB0aGUgcG9zdC1j
YXBhY2l0eSBpcyBiZWluZyByZWR1Y2VkLgorICAgICAgICBBU1NFUlQobmV3QWxsb2NCYXNlICE9
IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1cmUoKSkgfHwgcG9zdENhcGFjaXR5IDwgc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBuZXdW
ZWN0b3JMZW5ndGggPSByZXF1aXJlZFZlY3Rvckxlbmd0aCArIHBvc3RDYXBhY2l0eTsKKyAgICB1
bnNpZ25lZCBuZXdJbmRleEJpYXMgPSBuZXdTdG9yYWdlQ2FwYWNpdHkgLSBuZXdWZWN0b3JMZW5n
dGg7CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2Uo
bmV3QWxsb2NCYXNlLCBuZXdJbmRleEJpYXMsIHByb3BlcnR5Q2FwYWNpdHkpOworICAgIAorICAg
IG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IgKyBjb3VudCwg
c3RvcmFnZS0+bV92ZWN0b3IsIHNpemVvZihKU1ZhbHVlKSAqIHVzZWRWZWN0b3JMZW5ndGgpOwor
ICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6
ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwgc2l6ZW9mKEpT
VmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSArIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcigwKSk7CisgICAgCisgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CisgICAgCisgICAgbV9i
dXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBK
U0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJv
b2wgdGhyb3dFeGNlcHRpb24pCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeSgpOwogCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9z
dG9yYWdlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRh
KCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8g
SWYgdGhlIGxlbmd0aCBpcyByZWFkIG9ubHkgdGhlbiB3ZSBlbnRlciBzcGFyc2UgbW9kZSwgc28g
c2hvdWxkIGVudGVyIHRoZSBmb2xsb3dpbmcgJ2lmJy4KLSAgICBBU1NFUlQoaXNMZW5ndGhXcml0
YWJsZSgpIHx8IG1fc3BhcnNlVmFsdWVNYXApOworICAgIEFTU0VSVChpc0xlbmd0aFdyaXRhYmxl
KCkgfHwgc3RvcmFnZS0+bV9zcGFyc2VNYXApOwogCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVN
YXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKICAgICAgICAgLy8gRmFpbCBp
ZiB0aGUgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZS4KICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNS
ZWFkT25seSgpKQogICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlv
biwgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKQEAgLTExOTcsNyArMzY2
LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAg
ICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChp
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtYXAtPm5vdEZvdW5kKCkp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5hdHRyaWJ1dGVzICYgRG9udERl
bGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBpbmRl
eCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaW5kZXgg
KyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsKQEAgLTEyMDYsMTQg
KzM3NSwxNCBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGtleXNbaV0pOwogICAgICAgICAgICAgICAg
IGlmIChtYXAtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNwYXJz
ZU1hcCgpOworICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChuZXdMZW5ndGggPCBs
ZW5ndGgpIHsKICAgICAgICAgLy8gRGVsZXRlIHByb3BlcnRpZXMgZnJvbSB0aGUgdmVjdG9yLgot
ICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwgbV92ZWN0b3JM
ZW5ndGgpOworICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKGxlbmd0aCwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdM
ZW5ndGg7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAg
ICAgICBib29sIGhhZFZhbHVlID0gdmFsdWVTbG90OwpAQCAtMTIyMiw1MyArMzkxLDY1IEBAIGJv
b2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogICAgIH0K
IAotICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVuZ3RoOworICAgIHN0b3JhZ2UtPnNldExl
bmd0aChuZXdMZW5ndGgpOwogCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGNoZWNrSW5k
ZXhpbmdDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBKU1ZhbHVlIEpTQXJy
YXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBjaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0
aDsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICBpZiAoIWlzTGVuZ3RoV3JpdGFibGUoKSkK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2Rl
UmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgo
KTsKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICghaXNMZW5ndGhXcml0
YWJsZSgpKQorICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQogCi0gICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOwotICAg
IGlmIChpbmRleCA8IG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaW5kZXhdOwotICAgICAgICBpZiAo
dmFsdWVTbG90KSB7Ci0gICAgICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
Ci0gICAgICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB2YWx1ZVNsb3QuZ2V0KCk7Ci0gICAgICAg
ICAgICB2YWx1ZVNsb3QuY2xlYXIoKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGgg
LSAxOworICAgICAgICBpZiAoaW5kZXggPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgeworICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpbmRleF07CisgICAgICAgICAgICBpZiAodmFsdWVTbG90KSB7CisgICAgICAgICAgICAg
ICAgLS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHZhbHVlU2xvdC5nZXQoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZVNsb3Qu
Y2xlYXIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFi
bGUoKSk7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2xlbmd0aCA9IGluZGV4OwotICAgICAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzTGVuZ3RoV3JpdGFibGUoKSk7CisgICAgICAgICAgICAgICAg
c3RvcmFnZS0+c2V0TGVuZ3RoKGluZGV4KTsKKyAgICAgICAgICAgICAgICBjaGVja0luZGV4aW5n
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3Vt
ZW50IGluZHguCi0gICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIC8vIENhbGwgdGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBhcmd1
bWVudHMgaW5keCBhbmQgdHJ1ZS4KLSAgICBpZiAoIWRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlz
LCBleGVjLCBpbmRleCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCisg
ICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGdldChleGVjLCBpbmRleCk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
YXJndW1lbnRzIGluZHggYW5kIHRydWUuCisgICAgICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4K
KyAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIGluZGV4LCB0cnVlKTsKKyAgICAgICAgLy8gUmV0dXJu
IGVsZW1lbnQuCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KLSAg
ICAvLyBDYWxsIHRoZSBbW1B1dF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRz
ICJsZW5ndGgiLCBpbmR4LCBhbmQgdHJ1ZS4KLSAgICBzZXRMZW5ndGgoZXhlYywgaW5kZXgsIHRy
dWUpOwotICAgIC8vIFJldHVybiBlbGVtZW50LgotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICByZXR1cm4gZWxlbWVudDsKIH0KIAogLy8gUHVzaCAmIHB1dEluZGV4IGFyZSBhbG1vc3QgaWRl
bnRpY2FsLCB3aXRoIHR3byBzbWFsbCBkaWZmZXJlbmNlcy4KQEAgLTEyNzYsNjMgKzQ1Nyw3NyBA
QCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRv
IGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93
cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gbV9zdG9yYWdlOwotCi0gICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4g
dmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5tX2xlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwg
bV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbGVuZ3RoXS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoID0gbGVuZ3RoICsgMTsKLSAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
OwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjaGVj
a0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6IHsKKyAgICAgICAgcHV0QnlJbmRleEJl
eW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgMCwgdmFsdWUsIHRydWUsIGNy
ZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2UoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpOwogCi0gICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3Jl
cyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KLSAgICBpZiAoVU5MSUtF
TFkoc3RvcmFnZS0+bV9sZW5ndGggPT0gMHhGRkZGRkZGRnUpKSB7Ci0gICAgICAgIG1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bV9sZW5ndGgsIHZhbHVlLCB0
cnVlKTsKLSAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0
ZXAgMy5kLgotICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBhcnJheSBsZW5ndGgiKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICAv
LyBGYXN0IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGgg
JiBtX251bVZhbHVlc0luVmVjdG9yLgorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdl
LT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltsZW5ndGhdLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChs
ZW5ndGggKyAxKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsK
KyAgICAgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5n
dGggMl4zMi0xIHN0b3JlcyB0aGUgcHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4K
KyAgICAgICAgaWYgKFVOTElLRUxZKHN0b3JhZ2UtPmxlbmd0aCgpID09IDB4RkZGRkZGRkZ1KSkg
eworICAgICAgICAgICAgbWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9y
YWdlLT5sZW5ndGgoKSwgdmFsdWUsIHRydWUpOworICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1
LjQuNC43IHN0ZXAgNiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgorICAgICAgICAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAKLSAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4
LgotICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFnZS0+bV9sZW5n
dGgsIHZhbHVlLCB0cnVlKTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIC8vIEhh
bmRsZWQgdGhlIHNhbWUgYXMgcHV0SW5kZXguCisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0b3JhZ2UtPmxlbmd0aCgpLCB2YWx1ZSwg
dHJ1ZSwgc3RvcmFnZSk7CisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNTRVJUKGNvdW50ID4gMCk7CiAg
ICAgCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwog
ICAgIAotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIHVu
c2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgIAogICAgIC8vIElmIHRo
ZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3Rh
dGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4K
LSAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgaW5T
cGFyc2VNb2RlKCkpCisgICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghb2xkTGVuZ3RoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGNvdW50OwotICAgIHN0b3JhZ2UtPm1fbGVu
Z3RoIC09IGNvdW50OworICAgIHN0b3JhZ2UtPnNldExlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7
CiAgICAgCi0gICAgaWYgKG1fdmVjdG9yTGVuZ3RoKSB7Ci0gICAgICAgIGNvdW50ID0gbWluKG1f
dmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0
aCA9IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworICAgIGlmICh2ZWN0b3JMZW5ndGgpIHsKKyAg
ICAgICAgY291bnQgPSBtaW4odmVjdG9yTGVuZ3RoLCAodW5zaWduZWQpY291bnQpOwogICAgICAg
ICAKLSAgICAgICAgbV92ZWN0b3JMZW5ndGggLT0gY291bnQ7CisgICAgICAgIHZlY3Rvckxlbmd0
aCAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0
aCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV92ZWN0b3JMZW5ndGgpIHsKLSAgICAgICAgICAg
IGNoYXIqIG5ld0Jhc2VTdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RvcmFnZSkg
KyBjb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwotICAgICAgICAgICAgbWVt
bW92ZShuZXdCYXNlU3RvcmFnZSwgc3RvcmFnZSwgc3RvcmFnZVNpemUoMCkpOwotICAgICAgICAg
ICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3QmFz
ZVN0b3JhZ2UpOwotCi0gICAgICAgICAgICBtX2luZGV4QmlhcyArPSBjb3VudDsKKyAgICAgICAg
aWYgKHZlY3Rvckxlbmd0aCkgeworICAgICAgICAgICAgbV9idXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX2luZGV4Qmlh
cyArPSBjb3VudDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNDEs
NTkgKzUzNiwzMCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zCiAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZh
bGxiYWNrLiAgICAKIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgY291bnQpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhl
IGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0
ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgot
ICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBpblNwYXJz
ZU1vZGUoKSkKKyAgICBpZiAobGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
fHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX2luZGV4QmlhcyA+PSBjb3VudCkgewotICAgICAgICBtX2luZGV4QmlhcyAtPSBjb3Vu
dDsKLSAgICAgICAgY2hhciogbmV3QmFzZVN0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihzdG9yYWdlKSAtIGNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7Ci0gICAg
ICAgIG1lbW1vdmUobmV3QmFzZVN0b3JhZ2UsIHN0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKLSAg
ICAgICAgbV9zdG9yYWdlID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8QXJyYXlTdG9yYWdlKj4obmV3
QmFzZVN0b3JhZ2UpOwotICAgICAgICBtX3ZlY3Rvckxlbmd0aCArPSBjb3VudDsKKyAgICBpZiAo
c3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBz
dG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAg
ICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBzdG9yYWdl
LT5tX2luZGV4QmlhcyAtPSBjb3VudDsKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3Ro
KHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpICsgY291bnQpOwogICAgIH0gZWxzZSBpZiAoIXVuc2hp
ZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgY291bnQpKSB7CiAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBtX3N0b3JhZ2UtPm1fdmVjdG9y
OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3Rv
cltpXS5jbGVhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTQXJyYXk6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU0Fy
cmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihjZWxsKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU05v
bkZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAg
aWYgKHRoaXNPYmplY3QtPm1fc3RvcmFnZSkgewotICAgICAgICBNQVJLX0xPR19NRVNTQUdFMSgi
WyV1XTogIiwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOwotCi0gICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKLSAgICAgICAgdm9pZCogYmFzZVN0b3Jh
Z2UgPSBzdG9yYWdlLT5tX2FsbG9jQmFzZTsKLQotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBl
bmQocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYXNlU3RvcmFnZSksIHN0b3JhZ2VTaXplKHRo
aXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoICsgdGhpc09iamVjdC0+bV9pbmRleEJpYXMpLCBzdG9y
YWdlLT5tX3ZlY3Rvci0+c2xvdCgpLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvckxlbmd0aCk7Ci0KLSAg
ICAgICAgaWYgKGJhc2VTdG9yYWdlICE9IHRoaXNPYmplY3QtPm1fc3RvcmFnZS0+bV9hbGxvY0Jh
c2UpIHsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fc3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPEFycmF5U3RvcmFnZSo+KHN0YXRpY19jYXN0PGNoYXIqPihiYXNlU3RvcmFnZSkgKyBz
aXplb2YoSlNWYWx1ZSkgKiB0aGlzT2JqZWN0LT5tX2luZGV4Qmlhcyk7Ci0gICAgICAgICAgICB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gYmFzZVN0b3JhZ2U7Ci0gICAgICAg
ICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9zdG9yYWdlLT5tX2FsbG9jQmFzZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gdGhpc09iamVj
dC0+bV9zcGFyc2VWYWx1ZU1hcCkKLSAgICAgICAgbWFwLT52aXNpdENoaWxkcmVuKHZpc2l0b3Ip
OwotfQotCiBzdGF0aWMgaW50IGNvbXBhcmVOdW1iZXJzRm9yUVNvcnQoY29uc3Qgdm9pZCogYSwg
Y29uc3Qgdm9pZCogYikKIHsKICAgICBkb3VibGUgZGEgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1Zh
bHVlKj4oYSktPmFzTnVtYmVyKCk7CkBAIC0xNDEwLDExMiArNTc2LDEzNyBAQCBzdGF0aWMgaW50
IGNvbXBhcmVCeVN0cmluZ1BhaXJGb3JRU29ydChjCiAKIHZvaWQgSlNBcnJheTo6c29ydE51bWVy
aWMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2Fs
bFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKLSAgICBBU1NFUlQoIWluU3BhcnNl
TW9kZSgpKTsKLQotICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fc3RvcmFnZTsKKyAgICBB
U1NFUlQoIWluU3BhcnNlSW5kZXhpbmdNb2RlKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRpbmcoZXhlYy0+Z2xvYmFsRGF0YSgp
KTsKLSAgICBpZiAobV9zcGFyc2VWYWx1ZU1hcCkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aE5v
dEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5
cGUoKSkgeworICAgIGNhc2UgQXJyYXk6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
Ym9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gdHJ1ZTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7
Ci0gICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBib29sIGFsbFZhbHVlc0FyZU51bWJlcnMgPSB0cnVlOworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1f
dmVjdG9yW2ldLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxWYWx1ZXNBcmVOdW1i
ZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKKyAgICAg
ICAgICAgIHJldHVybiBzb3J0KGV4ZWMsIGNvbXBhcmVGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxE
YXRhKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZvciBudW1lcmljIGNvbXBhcmlzb24sIHdoaWNo
IGlzIGZhc3QsIHFzb3J0IGlzIGZhc3RlciB0aGFuIG1lcmdlc29ydC4gV2UKKyAgICAgICAgLy8g
YWxzbyBkb24ndCByZXF1aXJlIG1lcmdlc29ydCdzIHN0YWJpbGl0eSwgc2luY2UgdGhlcmUncyBu
byB1c2VyIHZpc2libGUKKyAgICAgICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBzd2FwcGluZyB0aGUg
b3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KKyAgICAgICAgcXNvcnQoc3RvcmFnZS0+
bV92ZWN0b3IsIHNpemUsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pLCBjb21wYXJlTnVt
YmVyc0ZvclFTb3J0KTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrSW5kZXhpbmdDb25zaXN0ZW5j
eShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQot
ICAgIGlmICghYWxsVmFsdWVzQXJlTnVtYmVycykKLSAgICAgICAgcmV0dXJuIHNvcnQoZXhlYywg
Y29tcGFyZUZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEpOwotCi0gICAgLy8gRm9yIG51bWVy
aWMgY29tcGFyaXNvbiwgd2hpY2ggaXMgZmFzdCwgcXNvcnQgaXMgZmFzdGVyIHRoYW4gbWVyZ2Vz
b3J0LiBXZQotICAgIC8vIGFsc28gZG9uJ3QgcmVxdWlyZSBtZXJnZXNvcnQncyBzdGFiaWxpdHks
IHNpbmNlIHRoZXJlJ3Mgbm8gdXNlciB2aXNpYmxlCi0gICAgLy8gc2lkZS1lZmZlY3QgZnJvbSBz
d2FwcGluZyB0aGUgb3JkZXIgb2YgZXF1YWwgcHJpbWl0aXZlIHZhbHVlcy4KLSAgICBxc29ydChz
dG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZSwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksIGNv
bXBhcmVOdW1iZXJzRm9yUVNvcnQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeShTb3J0Q29uc2lz
dGVuY3lDaGVjayk7CiB9CiAKIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGhOb3RJ
bmNsdWRpbmdVbmRlZmluZWQgPSBjb21wYWN0Rm9yU29ydGluZyhleGVjLT5nbG9iYWxEYXRhKCkp
OwotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbGVuZ3RoTm90
SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDb252ZXJ0aW5n
IEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2FuIGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8g
aXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBvbiB0aGF0LgotICAgIC8vIFRoaXMgaXMg
YSBjb25zaWRlcmFibGUgaW1wcm92ZW1lbnQgb3ZlciBkb2luZyBpdCB0d2ljZSBwZXIgY29tcGFy
aXNvbiwgdGhvdWdoIGl0IHJlcXVpcmVzIGEgbGFyZ2UgdGVtcG9yYXJ5Ci0gICAgLy8gYnVmZmVy
LiBCZXNpZGVzLCB0aGlzIHByb3RlY3RzIHVzIGZyb20gY3Jhc2hpbmcgaWYgc29tZSBvYmplY3Rz
IGhhdmUgY3VzdG9tIHRvU3RyaW5nIG1ldGhvZHMgdGhhdCByZXR1cm4KLSAgICAvLyByYW5kb20g
b3Igb3RoZXJ3aXNlIGNoYW5naW5nIHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJl
IGZ1bmN0aW9uIGluY29uc2lzdGVudC4KLQotICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZh
bHVlcyhsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmICghdmFsdWVzLmJlZ2lu
KCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7CiAgICAgCi0g
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cHVzaFRlbXBTb3J0VmVjdG9yKCZ2YWx1ZXMpOwotCi0gICAg
Ym9vbCBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspIHsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIEFTU0VS
VCghdmFsdWUuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZhbHVl
OwotICAgICAgICBpc1NvcnRpbmdQcmltaXRpdmVWYWx1ZXMgPSBpc1NvcnRpbmdQcmltaXRpdmVW
YWx1ZXMgJiYgdmFsdWUuaXNQcmltaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhl
IGZvbGxvd2luZyBsb29wIGNvbnRpbnVlcyB0byBjYWxsIHRvU3RyaW5nIG9uIHN1YnNlcXVlbnQg
dmFsdWVzIGV2ZW4gYWZ0ZXIKLSAgICAvLyBhIHRvU3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2Vw
dGlvbi4KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5k
ZWZpbmVkOyBpKyspCi0gICAgICAgIHZhbHVlc1tpXS5zZWNvbmQgPSB2YWx1ZXNbaV0uZmlyc3Qu
dG9XVEZTdHJpbmdJbmxpbmUoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cG9wVGVtcFNvcnRWZWN0b3IoJnZhbHVlcyk7
CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFNpbmNlIHdlIHNv
cnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1pZ2h0IGJlIHRvIHVzZSBhIHJh
ZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKLSAgICAvLyB0aGFuIE8oTiBsb2cg
TikuCi0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkID0gY29tcGFjdEZvclNvcnRp
bmcoZXhlYy0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAvLyBDb252ZXJ0aW5nIEphdmFTY3JpcHQgdmFsdWVzIHRvIHN0cmluZ3MgY2Fu
IGJlIGV4cGVuc2l2ZSwgc28gd2UgZG8gaXQgb25jZSB1cCBmcm9udCBhbmQgc29ydCBiYXNlZCBv
biB0aGF0LgorICAgICAgICAvLyBUaGlzIGlzIGEgY29uc2lkZXJhYmxlIGltcHJvdmVtZW50IG92
ZXIgZG9pbmcgaXQgdHdpY2UgcGVyIGNvbXBhcmlzb24sIHRob3VnaCBpdCByZXF1aXJlcyBhIGxh
cmdlIHRlbXBvcmFyeQorICAgICAgICAvLyBidWZmZXIuIEJlc2lkZXMsIHRoaXMgcHJvdGVjdHMg
dXMgZnJvbSBjcmFzaGluZyBpZiBzb21lIG9iamVjdHMgaGF2ZSBjdXN0b20gdG9TdHJpbmcgbWV0
aG9kcyB0aGF0IHJldHVybgorICAgICAgICAvLyByYW5kb20gb3Igb3RoZXJ3aXNlIGNoYW5naW5n
IHJlc3VsdHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBjb21wYXJlIGZ1bmN0aW9uIGluY29uc2lzdGVu
dC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+IHZhbHVlcyhsZW5n
dGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICBpZiAoIXZhbHVlcy5iZWdpbigpKSB7
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnB1
c2hUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNTb3J0
aW5nUHJpbWl0aXZlVmFsdWVzID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQ7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJU
KCF2YWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgIHZhbHVlc1tpXS5maXJzdCA9IHZh
bHVlOworICAgICAgICAgICAgaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzID0gaXNTb3J0aW5nUHJp
bWl0aXZlVmFsdWVzICYmIHZhbHVlLmlzUHJpbWl0aXZlKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvb3AgY29udGludWVzIHRvIGNhbGwg
dG9TdHJpbmcgb24gc3Vic2VxdWVudCB2YWx1ZXMgZXZlbiBhZnRlcgorICAgICAgICAvLyBhIHRv
U3RyaW5nIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCisgICAg
ICAgICAgICB2YWx1ZXNbaV0uc2Vjb25kID0gdmFsdWVzW2ldLmZpcnN0LnRvV1RGU3RyaW5nSW5s
aW5lKGV4ZWMpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVz
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IFNpbmNlIHdlIHNvcnQgYnkgc3RyaW5nIHZhbHVlLCBhIGZhc3QgYWxnb3JpdGhtIG1p
Z2h0IGJlIHRvIHVzZSBhIHJhZGl4IHNvcnQuIFRoYXQgd291bGQgYmUgTyhOKSByYXRoZXIKKyAg
ICAgICAgLy8gdGhhbiBPKE4gbG9nIE4pLgorICAgICAgICAKICNpZiBIQVZFKE1FUkdFU09SVCkK
LSAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFsdWVzKQotICAgICAgICBxc29ydCh2YWx1ZXMu
YmVnaW4oKSwgdmFsdWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVC
eVN0cmluZ1BhaXJGb3JRU29ydCk7Ci0gICAgZWxzZQotICAgICAgICBtZXJnZXNvcnQodmFsdWVz
LmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJl
QnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAgICAgICBpZiAoaXNTb3J0aW5nUHJpbWl0aXZlVmFs
dWVzKQorICAgICAgICAgICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5zaXplKCksIHNp
emVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNvcnQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtZXJnZXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMg
bGlrZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgotICAgIC8vIEVDTUFTY3JpcHQtMjYyIGRv
ZXMgbm90IHNwZWNpZnkgYSBzdGFibGUgc29ydCwgYnV0IGluIHByYWN0aWNlLCBicm93c2VycyBw
ZXJmb3JtIGEgc3RhYmxlIHNvcnQuCi0gICAgcXNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5z
aXplKCksIHNpemVvZihWYWx1ZVN0cmluZ1BhaXIpLCBjb21wYXJlQnlTdHJpbmdQYWlyRm9yUVNv
cnQpOworICAgICAgICAvLyBGSVhNRTogVGhlIHFzb3J0IGxpYnJhcnkgZnVuY3Rpb24gaXMgbGlr
ZWx5IHRvIG5vdCBiZSBhIHN0YWJsZSBzb3J0LgorICAgICAgICAvLyBFQ01BU2NyaXB0LTI2MiBk
b2VzIG5vdCBzcGVjaWZ5IGEgc3RhYmxlIHNvcnQsIGJ1dCBpbiBwcmFjdGljZSwgYnJvd3NlcnMg
cGVyZm9ybSBhIHN0YWJsZSBzb3J0LgorICAgICAgICBxc29ydCh2YWx1ZXMuYmVnaW4oKSwgdmFs
dWVzLnNpemUoKSwgc2l6ZW9mKFZhbHVlU3RyaW5nUGFpciksIGNvbXBhcmVCeVN0cmluZ1BhaXJG
b3JRU29ydCk7CiAjZW5kaWYKLQotICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFu
Z2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAotICAgIC8vIGlu
Y3JlYXNlIHRoZSBsZW5ndGggdG8gaGFuZGxlIHRoZSBvcmlnbmFsIG51bWJlciBvZiBhY3R1YWwg
dmFsdWVzLgotICAgIGlmIChtX3ZlY3Rvckxlbmd0aCA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVm
aW5lZCkKLSAgICAgICAgaW5jcmVhc2VWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBs
ZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3Ro
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkKQotICAgICAgICBtX3N0b3JhZ2UtPm1fbGVu
Z3RoID0gbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOwotCi0gICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVkOyBpKyspCi0gICAgICAgIG1fc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7Ci0KLSAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKLSAgICAKLSAg
ICBjaGVja0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIElmIHRoZSB0b1N0cmluZyBmdW5jdGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhl
IGFycmF5IG9yIHZlY3RvciBzdG9yYWdlLAorICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3Ro
IHRvIGhhbmRsZSB0aGUgb3JpZ25hbCBudW1iZXIgb2YgYWN0dWFsIHZhbHVlcy4KKyAgICAgICAg
aWYgKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoTm90SW5jbHVkaW5nVW5kZWZpbmVk
KSB7CisgICAgICAgICAgICBpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCks
IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCk7CisgICAgICAgICAgICBzdG9yYWdlID0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzdG9yYWdl
LT5sZW5ndGgoKSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5lZCkKKyAgICAgICAgICAgIHN0
b3JhZ2UtPnNldExlbmd0aChsZW5ndGhOb3RJbmNsdWRpbmdVbmRlZmluZWQpOworICAgICAgICAK
KyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aE5vdEluY2x1ZGluZ1VuZGVmaW5l
ZDsgaSsrKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlc1tpXS5maXJzdCk7CisgICAgICAgIAorICAgICAgICBIZWFwOjpoZWFwKHRo
aXMpLT5wb3BUZW1wU29ydFZlY3RvcigmdmFsdWVzKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNr
SW5kZXhpbmdDb25zaXN0ZW5jeShTb3J0Q29uc2lzdGVuY3lDaGVjayk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KIH0KIAogc3RydWN0IEFWTFRyZWVOb2RlRm9yQXJyYXlDb21wYXJlIHsK
QEAgLTE1OTcsMjUzICs3ODgsMjU3IEBAIHN0cnVjdCBBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5
Q29tcGFyZSAKIAogdm9pZCBKU0FycmF5Ojpzb3J0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBj
b21wYXJlRnVuY3Rpb24sIENhbGxUeXBlIGNhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYgY2FsbERh
dGEpCiB7Ci0gICAgQVNTRVJUKCFpblNwYXJzZU1vZGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGV4Y2VwdGlvbnMgcmFpc2VkIGlu
IHRoZSBjb21wYXJlIGZ1bmN0aW9uIG9yIGluIHRvTnVtYmVyLgotCi0gICAgLy8gVGhlIG1heGlt
dW0gdHJlZSBkZXB0aCBpcyBjb21waWxlZCBpbiAtIGJ1dCB0aGUgY2FsbGVyIGlzIGNsZWFybHkg
dXAgdG8gbm8gZ29vZAotICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KLSAgICBB
U1NFUlQobV9zdG9yYWdlLT5tX2xlbmd0aCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwotICAgIGlmIChtX3N0b3JhZ2UtPm1fbGVuZ3Ro
ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWlu
KG1fc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVjdG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBub2Rl
Q291bnQgPSB1c2VkVmVjdG9yTGVuZ3RoICsgKG1fc3BhcnNlVmFsdWVNYXAgPyBtX3NwYXJzZVZh
bHVlTWFwLT5zaXplKCkgOiAwKTsKLQotICAgIGlmICghbm9kZUNvdW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND4g
dHJlZTsgLy8gRGVwdGggNDQgaXMgZW5vdWdoIGZvciAyXjMxIGl0ZW1zCi0gICAgdHJlZS5hYnN0
cmFjdG9yKCkubV9leGVjID0gZXhlYzsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBhcmVG
dW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKLSAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NvbXBh
cmVDYWxsVHlwZSA9IGNhbGxUeXBlOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fY29tcGFyZUNh
bGxEYXRhID0gJmNhbGxEYXRhOwotICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhu
b2RlQ291bnQpOwotCi0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCi0gICAgICAgIHRy
ZWUuYWJzdHJhY3RvcigpLm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4
ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29tcGFyZUZ1bmN0aW9uKSwgMikpOwotCi0gICAgaWYg
KCF0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmJlZ2luKCkpIHsKLSAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUoKSk7
CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5OgogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IElmIHRo
ZSBjb21wYXJlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBhcnJheSwgdGhlIHZlY3RvciwgbWFwLCBl
dGMuIGNvdWxkIGJlIG1vZGlmaWVkCi0gICAgLy8gcmlnaHQgb3V0IGZyb20gdW5kZXIgdXMgd2hp
bGUgd2UncmUgYnVpbGRpbmcgdGhlIHRyZWUgaGVyZS4KLQotICAgIHVuc2lnbmVkIG51bURlZmlu
ZWQgPSAwOwotICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7Ci0KLSAgICAvLyBJdGVyYXRl
IG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcgdW5kZWZp
bmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJlZS4KLSAg
ICBmb3IgKDsgbnVtRGVmaW5lZCA8IHVzZWRWZWN0b3JMZW5ndGg7ICsrbnVtRGVmaW5lZCkgewot
ICAgICAgICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW251bURlZmluZWRdLmdldCgp
OwotICAgICAgICBpZiAoIXYgfHwgdi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2
OwotICAgICAgICB0cmVlLmluc2VydChudW1EZWZpbmVkKTsKLSAgICB9Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAg
ICBKU1ZhbHVlIHYgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOwotICAgICAgICBpZiAo
dikgewotICAgICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAr
K251bVVuZGVmaW5lZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OwotICAgICAgICAgICAg
ICAgIHRyZWUuaW5zZXJ0KG51bURlZmluZWQpOwotICAgICAgICAgICAgICAgICsrbnVtRGVmaW5l
ZDsKKyAgICAgICAgCisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBjaGVja0luZGV4aW5nQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNvbXBhcmUgZnVuY3Rp
b24gb3IgaW4gdG9OdW1iZXIuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWF4aW11bSB0cmVl
IGRlcHRoIGlzIGNvbXBpbGVkIGluIC0gYnV0IHRoZSBjYWxsZXIgaXMgY2xlYXJseSB1cCB0byBu
byBnb29kCisgICAgICAgIC8vIGlmIGEgbGFyZ2VyIGFycmF5IGlzIHBhc3NlZC4KKyAgICAgICAg
QVNTRVJUKHN0b3JhZ2UtPmxlbmd0aCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKSk7CisgICAgICAgIGlmIChzdG9yYWdlLT5sZW5ndGgo
KSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUNvdW50ID0gdXNlZFZlY3Rvckxlbmd0aCArIChz
dG9yYWdlLT5tX3NwYXJzZU1hcCA/IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLT5zaXplKCkgOiAwKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghbm9kZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgQVZMVHJlZTxBVkxUcmVlQWJzdHJhY3RvckZvckFycmF5Q29tcGFy
ZSwgNDQ+IHRyZWU7IC8vIERlcHRoIDQ0IGlzIGVub3VnaCBmb3IgMl4zMSBpdGVtcworICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2V4ZWMgPSBleGVjOworICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX2NvbXBhcmVGdW5jdGlvbiA9IGNvbXBhcmVGdW5jdGlvbjsKKyAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbFR5cGUgPSBjYWxsVHlwZTsKKyAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jb21wYXJlQ2FsbERhdGEgPSAmY2FsbERhdGE7CisgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXMuZ3Jvdyhub2RlQ291bnQpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpCisgICAgICAgICAgICB0cmVlLmFic3RyYWN0b3Io
KS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
dHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CisgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5jdGlvbiBtb2RpZmll
cyB0aGUgYXJyYXksIHRoZSB2ZWN0b3IsIG1hcCwgZXRjLiBjb3VsZCBiZSBtb2RpZmllZAorICAg
ICAgICAvLyByaWdodCBvdXQgZnJvbSB1bmRlciB1cyB3aGlsZSB3ZSdyZSBidWlsZGluZyB0aGUg
dHJlZSBoZXJlLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtRGVmaW5lZCA9IDA7Cisg
ICAgICAgIHVuc2lnbmVkIG51bVVuZGVmaW5lZCA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBJ
dGVyYXRlIG92ZXIgdGhlIGFycmF5LCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcywgY291bnRpbmcg
dW5kZWZpbmVkIG9uZXMsIGFuZCBpbnNlcnRpbmcgYWxsIG90aGVyIG9uZXMgaW50byB0aGUgdHJl
ZS4KKyAgICAgICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK251bURl
ZmluZWQpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWRdLmdldCgpOworICAgICAgICAgICAgaWYgKCF2IHx8IHYuaXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9k
ZXNbbnVtRGVmaW5lZF0udmFsdWUgPSB2OworICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVm
aW5lZCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAodikgeworICAgICAgICAg
ICAgICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgICAgICsrbnVtVW5k
ZWZpbmVkOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gdjsKKyAgICAgICAgICAg
ICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICsr
bnVtRGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVmaW5lZCAr
IG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3Nw
YXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXpl
KCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5ndGgpIHsK
LSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYW4g
YXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzLgotICAgICAgICAgICAg
aWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkgfHwg
IWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3VXNlZFZlY3Rvckxl
bmd0aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbmV3VXNl
ZFZlY3Rvckxlbmd0aCA9IG51bURlZmluZWQgKyBudW1VbmRlZmluZWQ7CisgICAgICAgIAorICAg
ICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Z2V0KCkpIHsKKyAgICAgICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFwLT5zaXplKCk7
CisgICAgICAgICAgICBpZiAobmV3VXNlZFZlY3Rvckxlbmd0aCA+IHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBwb3NzaWJsZSB0
byBhbGxvY2F0ZSBhbiBhcnJheSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGVudHJpZXMu
CisgICAgICAgICAgICAgICAgaWYgKChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmV3VXNlZFZlY3Rvckxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICB0cmVlLmFic3RyYWN0
b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXROb25TcGFyc2VN
b2RlKCk7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7CisgICAgICAg
ICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQotCi0gICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7Ci0g
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9y
KCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9k
ZSgpOwotICAgICAgICAgICAgdHJlZS5pbnNlcnQobnVtRGVmaW5lZCk7Ci0gICAgICAgICAgICAr
K251bURlZmluZWQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodHJlZS5hYnN0cmFjdG9yKCku
bV9ub2Rlcy5zaXplKCkgPj0gbnVtRGVmaW5lZCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJh
eSwgdGhlIGZvbGxvd2luZyBtaWdodCBiZQorICAgICAgICAvLyBtb2RpZnlpbmcgdGhlIHZlY3Rv
ciBpbmNvcnJlY3RseS4KKyAgICAgICAgCisgICAgICAgIC8vIENvcHkgdGhlIHZhbHVlcyBiYWNr
IGludG8gbV9zdG9yYWdlLgorICAgICAgICBBVkxUcmVlPEFWTFRyZWVBYnN0cmFjdG9yRm9yQXJy
YXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7CisgICAgICAgIGl0ZXIuc3RhcnRfaXRlcl9s
ZWFzdCh0cmVlKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5lZDsg
KytpKSB7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1sqaXRlcl0udmFsdWUpOworICAgICAgICAg
ICAgKytpdGVyOwogICAgICAgICB9Ci0KLSAgICAgICAgZGVhbGxvY2F0ZVNwYXJzZU1hcCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gUHV0IHVuZGVmaW5lZCB2YWx1ZXMgYmFjayBpbi4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdW51c2VkIHZhbHVlcyBpbiB0aGUgdmVj
dG9yIGFyZSB6ZXJvZWQgb3V0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVj
dG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQorICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOworICAgICAgICAKKyAgICAgICAg
Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRDb25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VSVCh0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLnNp
emUoKSA+PSBudW1EZWZpbmVkKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29tcGFyZSBmdW5j
dGlvbiBjaGFuZ2VkIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5LCB0aGUgZm9sbG93aW5nIG1pZ2h0
IGJlCi0gICAgLy8gbW9kaWZ5aW5nIHRoZSB2ZWN0b3IgaW5jb3JyZWN0bHkuCi0KLSAgICAvLyBD
b3B5IHRoZSB2YWx1ZXMgYmFjayBpbnRvIG1fc3RvcmFnZS4KLSAgICBBVkxUcmVlPEFWTFRyZWVB
YnN0cmFjdG9yRm9yQXJyYXlDb21wYXJlLCA0ND46Okl0ZXJhdG9yIGl0ZXI7Ci0gICAgaXRlci5z
dGFydF9pdGVyX2xlYXN0KHRyZWUpOwotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4
ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRGVmaW5l
ZDsgKytpKSB7Ci0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbKml0ZXJdLnZhbHVlKTsKLSAgICAgICAg
KytpdGVyOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9Ci0KLSAgICAvLyBQdXQgdW5kZWZpbmVkIHZhbHVlcyBiYWNrIGluLgotICAg
IGZvciAodW5zaWduZWQgaSA9IG51bURlZmluZWQ7IGkgPCBuZXdVc2VkVmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgIG1fc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAg
ICAvLyBFbnN1cmUgdGhhdCB1bnVzZWQgdmFsdWVzIGluIHRoZSB2ZWN0b3IgYXJlIHplcm9lZCBv
dXQuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbmV3VXNlZFZlY3Rvckxlbmd0aDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5jbGVhcigp
OwotCi0gICAgbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gbmV3VXNlZFZlY3Rvckxl
bmd0aDsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koU29ydENvbnNpc3RlbmN5Q2hlY2spOwogfQog
CiB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlYywgTWFya2VkQXJndW1l
bnRCdWZmZXImIGFyZ3MpCiB7Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdl
OwotCi0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3Rv
cjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bV9sZW5ndGgsIG1fdmVj
dG9yTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHZlY3RvckVu
ZDsgKytpKSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsK
LSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGFyZ3MuYXBwZW5k
KHYuZ2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhc2UgQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgICAgIHVuc2lnbmVkIHZlY3Rv
ckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsr
aSkgeworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2ID0gdmVjdG9yW2ldOwor
ICAgICAgICAgICAgaWYgKCF2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
YXJncy5hcHBlbmQodi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
OyBpIDwgc3RvcmFnZS0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdl
dChleGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBp
IDwgc3RvcmFnZS0+bV9sZW5ndGg7ICsraSkKLSAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGV4ZWMs
IGkpKTsKIH0KIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVj
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdWludDMyX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChs
ZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gbV9z
dG9yYWdlLT5tX3ZlY3RvcjsKLSAgICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBt
X3ZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICg7IGkgPCB2ZWN0b3JFbmQ7ICsraSkgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHYgPSB2ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdikK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIHYu
Z2V0KCkpOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAg
Y2FzZSBBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOworICAgICAg
ICB1bnNpZ25lZCB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgIGZvciAoOyBpIDwgdmVjdG9yRW5kOyArK2kpIHsKKyAgICAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgdiA9IHZlY3RvcltpXTsKKyAgICAgICAgICAgIGlmICghdikK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1l
bnQoaSwgdi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFyZ3VtZW50KGksIGdldChl
eGVjLCBpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQotICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIGNhbGxGcmFtZS0+c2V0QXJndW1lbnQoaSwgZ2V0KGV4ZWMs
IGkpKTsKIH0KIAogdW5zaWduZWQgSlNBcnJheTo6Y29tcGFjdEZvclNvcnRpbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogewotICAgIEFTU0VSVCghaW5TcGFyc2VNb2RlKCkpOwotCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwotCi0gICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1pbihzdG9yYWdlLT5tX2xl
bmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgIEFTU0VSVCghaW5TcGFyc2VJbmRleGluZ01vZGUo
KSk7CiAKLSAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKLSAgICB1bnNpZ25lZCBudW1VbmRl
ZmluZWQgPSAwOwotCi0gICAgZm9yICg7IG51bURlZmluZWQgPCB1c2VkVmVjdG9yTGVuZ3RoOyAr
K251bURlZmluZWQpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gc3RvcmFnZS0+bV92ZWN0b3JbbnVt
RGVmaW5lZF0uZ2V0KCk7Ci0gICAgICAgIGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7Cisg
ICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFycmF5OgorICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IG51bURl
ZmluZWQ7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAg
ICBpZiAodi5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICsrbnVtVW5kZWZpbmVkOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW251bURl
ZmluZWQrK10uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9y
TGVuZ3RoID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1EZWZpbmVkID0gMDsKKyAgICAgICAgdW5z
aWduZWQgbnVtVW5kZWZpbmVkID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoOyBudW1EZWZp
bmVkIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytudW1EZWZpbmVkKSB7CisgICAgICAgICAgICBKU1Zh
bHVlIHYgPSBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghdiB8fCB2LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBuZXdVc2VkVmVjdG9yTGVuZ3RoID0gbnVtRGVm
aW5lZCArIG51bVVuZGVmaW5lZDsKLQotICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIG5ld1VzZWRWZWN0b3JMZW5ndGggKz0gbWFw
LT5zaXplKCk7Ci0gICAgICAgIGlmIChuZXdVc2VkVmVjdG9yTGVuZ3RoID4gbV92ZWN0b3JMZW5n
dGgpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gYWxsb2Nh
dGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBlbnRyaWVzIC0gaWYgbm90
LAotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIGlzIHRocm93biBieSBjYWxsZXIuCi0gICAgICAg
ICAgICBpZiAoKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RI
KSB8fCAhaW5jcmVhc2VWZWN0b3JMZW5ndGgoZ2xvYmFsRGF0YSwgbmV3VXNlZFZlY3Rvckxlbmd0
aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X3N0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1EZWZpbmVk
OyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAg
ICAgICAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytudW1V
bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwotCi0gICAgICAg
IGRlYWxsb2NhdGVTcGFyc2VNYXAoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1EZWZpbmVkOyBpIDwgbmV3VXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXRVbmRlZmluZWQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdV
c2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICBzdG9y
YWdlLT5tX3ZlY3RvcltpXS5jbGVhcigpOwotCi0gICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZl
Y3RvciA9IG5ld1VzZWRWZWN0b3JMZW5ndGg7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKLQotICAgIHJldHVybiBudW1EZWZpbmVkOwotfQotCi0jaWYgQ0hF
Q0tfQVJSQVlfQ09OU0lTVEVOQ1kKLQotdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENv
bnNpc3RlbmN5Q2hlY2tUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwotCi0gICAgQVNTRVJUKCFzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0
aW9uKTsKLQotICAgIEFTU0VSVChzdG9yYWdlKTsKLSAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lz
dGVuY3lDaGVjaykKLSAgICAgICAgQVNTRVJUKCFtX3NwYXJzZVZhbHVlTWFwKTsKLQotICAgIHVu
c2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV92ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3Jh
Z2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0
ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIHZhbHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2Vs
eSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgICAgICsr
bnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodHlw
ZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKLSAgICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBz
dG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IG5ld1VzZWRWZWN0b3JMZW5ndGggPSBudW1EZWZpbmVkICsgbnVtVW5kZWZpbmVkOworICAgICAg
ICAKKyAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3Bh
cnNlTWFwLmdldCgpKSB7CisgICAgICAgICAgICBuZXdVc2VkVmVjdG9yTGVuZ3RoICs9IG1hcC0+
c2l6ZSgpOworICAgICAgICAgICAgaWYgKG5ld1VzZWRWZWN0b3JMZW5ndGggPiBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgaXMgcG9z
c2libGUgdG8gYWxsb2NhdGUgYW4gYXJyYXkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSBl
bnRyaWVzIC0gaWYgbm90LAorICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyB0aHJvd24g
YnkgY2FsbGVyLgorICAgICAgICAgICAgICAgIGlmICgobmV3VXNlZFZlY3Rvckxlbmd0aCA+IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChnbG9iYWxE
YXRhLCBuZXdVc2VkVmVjdG9yTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
KyAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXROb25TcGFyc2VNb2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWFsbG9j
YXRlU3BhcnNlSW5kZXhNYXAoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtRGVmaW5lZDsgaSA8IG5ld1VzZWRWZWN0b3JMZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFVuZGVmaW5lZCgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdVc2VkVmVjdG9yTGVuZ3RoOyBpIDwgdXNlZFZlY3Rvckxlbmd0
aDsgKytpKQorICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKKyAgICAg
ICAgCisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgPSBuZXdVc2VkVmVjdG9y
TGVuZ3RoOworICAgICAgICAKKyAgICAgICAgY2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KFNvcnRD
b25zaXN0ZW5jeUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudW1EZWZpbmVkOwog
ICAgIH0KLSAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFnZS0+bV9udW1WYWx1
ZXNJblZlY3Rvcik7Ci0gICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9IHN0b3JhZ2UtPm1f
bGVuZ3RoKTsKLQotICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7Ci0gICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFsdWVNYXAtPmVuZCgp
OwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8
IHN0b3JhZ2UtPm1fbGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA+PSBtX3ZlY3Rv
ckxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKTsK
LSAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKLSAgICAgICAgICAgIGlmICh0eXBlICE9
IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQotICAgICAgICAgICAgICAgIGl0LT5zZWNvbmQu
Z2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0
aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KLSAgICAgICAgfQorICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogfQogCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTQyICsyMSwzMCBAQAogI2lmbmRlZiBKU0FycmF5X2gK
ICNkZWZpbmUgSlNBcnJheV9oCiAKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5j
bHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAK
LSNkZWZpbmUgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kgMAotCiBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEpTQXJyYXk7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCi0g
ICAgZW51bSBQdXREaXJlY3RJbmRleE1vZGUgeyBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3Qs
IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3csIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cg
fTsKLQotICAgIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmFycmllcjxV
bmtub3duPiB7Ci0gICAgICAgIHR5cGVkZWYgV3JpdGVCYXJyaWVyPFVua25vd24+IEJhc2U7Ci0K
LSAgICAgICAgU3BhcnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQotCi0gICAgICAg
IEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25zdDsKLSAgICAgICAgdm9pZCBn
ZXQoUHJvcGVydHlTbG90JikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZ2V0KFByb3BlcnR5RGVzY3Jp
cHRvciYpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGdldE5vblNwYXJzZU1vZGUoKSBjb25zdDsK
LQotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIH07Ci0KLSAgICBjbGFzcyBTcGFy
c2VBcnJheVZhbHVlTWFwIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFy
c2VBcnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKLQotICAgICAgICBlbnVtIEZsYWdzIHsK
LSAgICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKLSAg
ICAgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAotICAgICAgICB9OwotCi0gICAgcHVibGlj
OgotICAgICAgICB0eXBlZGVmIE1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVk
ZWYgTWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBN
YXA6OkFkZFJlc3VsdCBBZGRSZXN1bHQ7Ci0KLSAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCgp
Ci0gICAgICAgICAgICA6IG1fZmxhZ3MoTm9ybWFsKQotICAgICAgICAgICAgLCBtX3JlcG9ydGVk
Q2FwYWNpdHkoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLSAgICAgICAgYm9vbCBzcGFyc2VNb2RlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBTcGFyc2VNb2RlOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRTcGFyc2VNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9mbGFncyA9IHN0YXRpY19jYXN0PEZsYWdzPihtX2ZsYWdzIHwgU3BhcnNlTW9kZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ZsYWdzID0gc3RhdGljX2Nhc3Q8RmxhZ3M+KG1fZmxhZ3MgfCBMZW5ndGhJc1JlYWRPbmx5
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUg
Y29udGVudHMgb2YgdGhlIG1hcAotICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5
KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHB1
dERpcmVjdChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUsIFB1dERpcmVj
dEluZGV4TW9kZSk7Ci0gICAgICAgIEFkZFJlc3VsdCBhZGQoSlNBcnJheSosIHVuc2lnbmVkKTsK
LSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX21hcC5maW5kKGkp
OyB9Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChj
aGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KLSAgICAgICAgdm9pZCByZW1vdmUoaXRlcmF0
b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQotICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25l
ZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQotCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8g
bm90IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIG1hcC4KLSAgICAgICAgaXRlcmF0b3Igbm90
Rm91bmQoKSB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX21hcC5pc0VtcHR5KCk7IH0KLSAgICAgICAgYm9vbCBjb250YWlucyh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21hcC5jb250YWlucyhpKTsgfQotICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQotICAgICAgICAvLyBP
bmx5IGFsbG93IGNvbnN0IGJlZ2luL2VuZCBpdGVyYXRpb24uCi0gICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQotICAgICAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgTWFwIG1fbWFwOwotICAgICAgICBGbGFncyBtX2ZsYWdzOwotICAgICAg
ICBzaXplX3QgbV9yZXBvcnRlZENhcGFjaXR5OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHN0cnVj
dCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgdmFsdWVzIG9mIGFuIGFycmF5LiAgQSBKU0FycmF5IG9i
amVjdCBwb2ludHMgdG8gaXQncyBjb250YWluZWQgQXJyYXlTdG9yYWdlCi0gICAgLy8gc3RydWN0
IGJ5IHBvaW50aW5nIHRvIG1fdmVjdG9yLiAgVG8gYWNjZXNzIHRoZSBjb250YWluZWQgQXJyYXlT
dG9yYWdlIHN0cnVjdCwgdXNlIHRoZSBnZXRTdG9yYWdlKCkgYW5kIAotICAgIC8vIHNldFN0b3Jh
Z2UoKSBtZXRob2RzLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUg
c3BhY2UgYmVmb3JlIHRoZSBBcnJheVN0b3JhZ2UgdGhhdCAKLSAgICAvLyBpcyB1c2VkIHRvIHF1
aWNrIHVuc2hpZnQgLyBzaGlmdCBvcGVyYXRpb24uICBUaGUgYWN0dWFsIGFsbG9jYXRlZCBwb2lu
dGVyIGlzIGF2YWlsYWJsZSBieSB1c2luZzoKLSAgICAvLyAgICAgZ2V0U3RvcmFnZSgpIC0gbV9p
bmRleEJpYXMgKiBzaXplb2YoSlNWYWx1ZSkKLSAgICBzdHJ1Y3QgQXJyYXlTdG9yYWdlIHsKLSAg
ICAgICAgdW5zaWduZWQgbV9sZW5ndGg7IC8vIFRoZSAibGVuZ3RoIiBwcm9wZXJ0eSBvbiB0aGUg
YXJyYXkKLSAgICAgICAgdW5zaWduZWQgbV9udW1WYWx1ZXNJblZlY3RvcjsKLSAgICAgICAgdm9p
ZCogbV9hbGxvY0Jhc2U7IC8vIFBvaW50ZXIgdG8gYmFzZSBhZGRyZXNzIHJldHVybmVkIGJ5IG1h
bGxvYygpLiAgS2VlcGluZyB0aGlzIHBvaW50ZXIgZG9lcyBlbGltaW5hdGUgZmFsc2UgcG9zaXRp
dmVzIGZyb20gdGhlIGxlYWsgZGV0ZWN0b3IuCi0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kK
LSAgICAgICAgLy8gTmVlZHMgdG8gYmUgYSB1aW50cHRyX3QgZm9yIGFsaWdubWVudCBwdXJwb3Nl
cy4KLSAgICAgICAgdWludHB0cl90IG1faW5pdGlhbGl6YXRpb25JbmRleDsKLSAgICAgICAgdWlu
dHB0cl90IG1faW5Db21wYWN0SW5pdGlhbGl6YXRpb247Ci0jZWxzZQotICAgICAgICB1aW50cHRy
X3QgbV9wYWRkaW5nOwotI2VuZGlmCi0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Zl
Y3RvclsxXTsKLQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGxlbmd0aE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKTsgfQotICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3Rvcik7IH0KLSAgICAgICAg
c3RhdGljIHB0cmRpZmZfdCBhbGxvY0Jhc2VPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2FsbG9jQmFzZSk7IH0KLSAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCB2ZWN0b3JPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3Rvcik7IH0KLSAgICB9OwotCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsK
IAorICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgICAgIDogSlNOb25GaW5h
bE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1faW5kZXhCaWFz
KDApCi0gICAgICAgICAgICAsIG1fc3RvcmFnZSgwKQotICAgICAgICAgICAgLCBtX3NwYXJzZVZh
bHVlTWFwKDApCisgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCisgICAgICAg
ICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBidXR0ZXJmbHkp
CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAp
OwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5KiB0cnlGaW5pc2hDcmVhdGlvblVu
aW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCk7Ci0gICAg
CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQot
ICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKLQogICAgICAgICBzdGF0aWMg
SlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRp
YWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVz
ZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFycmF5cyB3aG9zZSBzaXplIGFuZApAQCAtMTY5
LDI2ICs1NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogCiAg
ICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1
dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRo
ZSBKU09iamVjdDo6cHV0RGlyZWN0KiBtZXRob2RzOgotICAgICAgICAvLyAgLSB0aGUgcHJvdG90
eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKLSAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBu
b3QgY2FsbGVkLgotICAgICAgICAvLyAgLSBpdCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFu
ZCByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMg
cGFzc2VkIGFzIHRoZSBtb2RlICh0aGUgZGVmYXVsdCkuCi0gICAgICAgIC8vIFRoaXMgbWV0aG9k
IGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUg
YW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRvIHRydWUuCi0gICAgICAgIGJvb2wgcHV0RGlyZWN0
SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlID0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2FuU2V0SW5kZXgocHJvcGVydHlOYW1lKSkg
ewotICAgICAgICAgICAgICAgIHNldEluZGV4KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgbW9kZSk7Ci0gICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0aDsg
fQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRBcnJheUxlbmd0
aCgpOyB9CiAgICAgICAgIC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0
IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KICAgICAgICAgYm9vbCBzZXRMZW5ndGgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQsIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZSk7CiAKQEAgLTIw
MiwxNDIgKzc1LDg2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHNoaWZ0Q291bnQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwogICAgICAgICBib29sIHVuc2hpZnRDb3VudChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1
bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92ZWN0b3JMZW5ndGggJiYgbV9zdG9yYWdlLT5tX3Zl
Y3RvcltpXTsgfQotICAgICAgICBKU1ZhbHVlIGdldEluZGV4KHVuc2lnbmVkIGkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgY2FuU2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmVjdG9yTGVuZ3RoOyB9
Ci0gICAgICAgIHZvaWQgc2V0SW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TZXRJbmRl
eChpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYg
eCA9IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgICAgICBpZiAoIXgpIHsKLSAgICAg
ICAgICAgICAgICBBcnJheVN0b3JhZ2UgKnN0b3JhZ2UgPSBtX3N0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwotICAgICAgICAgICAgICAgIGlm
IChpID49IHN0b3JhZ2UtPm1fbGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
X2xlbmd0aCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeC5zZXQoZ2xvYmFs
RGF0YSwgdGhpcywgdik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlubGluZSB2b2lk
IGluaXRpYWxpemVJbmRleChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpT
VmFsdWUgdikKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGNhblNldEluZGV4KGkpKTsK
LSAgICAgICAgICAgIEFycmF5U3RvcmFnZSAqc3RvcmFnZSA9IG1fc3RvcmFnZTsKLSNpZiBDSEVD
S19BUlJBWV9DT05TSVNURU5DWQotICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOwotICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGluZGV4IGluIHNlcXVlbmNlLgotICAgICAgICAgICAgQVNTRVJU
KGkgPT0gc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4KTsKLSAgICAgICAgICAgIC8vIHRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRp
YWxMZW5ndGgsCi0gICAgICAgICAgICAvLyBjaGVjayB3ZSBkbyBub3QgdHJ5IHRvIGluaXRpYWxp
emUgbW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHByb3BlcnRpZXMuCi0gICAgICAgICAgICBBU1NF
UlQoc3RvcmFnZS0+bV9pbml0aWFsaXphdGlvbkluZGV4IDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7Ci0gICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsK
LSNlbmRpZgotICAgICAgICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX2xlbmd0aCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwotICAgICAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgY29tcGxldGVJbml0aWFsaXphdGlvbih1bnNp
Z25lZCBuZXdMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
aGF2ZSBpbml0aWFsaXplZCBhcyBtZW55IHByb3BlcnRpZXMgYXMgd2UgdGhpbmsgd2UgaGF2ZS4K
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3TGVuZ3RoLCBuZXdMZW5ndGggPT0gbV9zdG9y
YWdlLT5tX2xlbmd0aCk7Ci0jaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKLSAgICAgICAgICAg
IC8vIENoZWNrIHRoYXQgdGhlIG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNo
ZXMgdGhlIGluaXRpYWxMZW5ndGguCi0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlLT5tX2lu
aXRpYWxpemF0aW9uSW5kZXggPT0gbV9zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOwot
ICAgICAgICAgICAgbV9zdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaW5TcGFyc2VNb2RlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zcGFyc2VWYWx1
ZU1hcDsKLSAgICAgICAgICAgIHJldHVybiBtYXAgJiYgbWFwLT5zcGFyc2VNb2RlKCk7Ci0gICAg
ICAgIH0KLQogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyJik7CiAgICAgICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSosIENh
bGxGcmFtZSosIHVpbnQzMl90IGxlbmd0aCk7CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBzdGF0aWMgcHRyZGlmZl90IHN0b3JhZ2VPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXksIG1fc3RvcmFnZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHZlY3Rvckxlbmd0aE9mZnNldCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV92ZWN0b3JM
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCi0gICAgICAgIHZvaWQg
ZW50ZXJEaWN0aW9uYXJ5TW9kZShKU0dsb2JhbERhdGEmKTsKLQogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMg
c2l6ZV90IHN0b3JhZ2VTaXplKHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGJvb2wg
aXNMZW5ndGhXcml0YWJsZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFNwYXJzZUFycmF5VmFs
dWVNYXAqIG1hcCA9IG1fc3BhcnNlVmFsdWVNYXA7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2VPclplcm8oKTsKKyAgICAgICAgICAgIGlmICghc3RvcmFn
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICAgICAgICAg
IHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9ubHkoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJsZSk7
Ci0gICAgICAgIHZvaWQgcHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5
KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAg
ICBib29sIGRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgYWxs
b2NhdGVTcGFyc2VNYXAoSlNHbG9iYWxEYXRhJik7Ci0gICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNw
YXJzZU1hcCgpOwogCi0gICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERpcmVjdEluZGV4QmV5b25k
VmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0RGlyZWN0SW5kZXhNb2RlKTsKLQotICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5n
dGgodW5zaWduZWQgZGVzaXJlZExlbmd0aCk7Ci0gICAgICAgIGJvb2wgaW5jcmVhc2VWZWN0b3JM
ZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICAgICAgYm9vbCB1
bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBjb3VudCk7CiAgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBjb21wYWN0Rm9yU29ydGluZyhKU0dsb2JhbERhdGEmKTsK
KyAgICB9OwogCi0gICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3RlbmN5
Q2hlY2sgfTsKLSAgICAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tU
eXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Ci0KLSAgICAgICAgdW5zaWduZWQgbV92ZWN0
b3JMZW5ndGg7IC8vIFRoZSB2YWxpZCBsZW5ndGggb2YgbV92ZWN0b3IKLSAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleEJpYXM7IC8vIFRoZSBudW1iZXIgb2YgSlNWYWx1ZSBzaXplZCBibG9ja3MgYmVm
b3JlIEFycmF5U3RvcmFnZS4KLSAgICAgICAgQXJyYXlTdG9yYWdlICptX3N0b3JhZ2U7Ci0KLSAg
ICAgICAgLy8gRklYTUU6IE1heWJlIFNwYXJzZUFycmF5VmFsdWVNYXAgc2hvdWxkIGJlIHB1dCBp
bnRvIGl0cyBvd24gSlNDZWxsPwotICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtX3NwYXJz
ZVZhbHVlTWFwOworICAgIGlubGluZSBCdXR0ZXJmbHkqIGNyZWF0ZUFycmF5QnV0dGVyZmx5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKKyAgICB7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCisgICAgICAg
ICAgICBnbG9iYWxEYXRhLCAwLCAwLCB0cnVlLCBiYXNlSW5kZXhpbmdIZWFkZXJGb3JBcnJheShp
bml0aWFsTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKEJBU0VfVkVDVE9SX0xFTikpOwor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1f
c3BhcnNlTWFwLmNsZWFyKCk7CisgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3Ig
PSAwOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgIHN0b3JhZ2UtPm1faW5p
dGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgICAgIHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlh
bGl6YXRpb24gPSAwOworI2VuZGlmCisgICAgICAgIHJldHVybiBidXR0ZXJmbHk7CisgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3BhcnNlVmFsdWVNYXBPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwgbV9zcGFyc2VWYWx1ZU1hcCk7IH0KLSAgICAgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleEJpYXNPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheSwgbV9pbmRleEJpYXMpOyB9Ci0gICAgfTsKKyAgICBCdXR0ZXJmbHkqIGNyZWF0
ZUFycmF5QnV0dGVyZmx5SW5EaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5Pihn
bG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYnV0dGVyZmx5
KTsKKyAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICBy
ZXR1cm4gYXJyYXk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm4gYXJy
YXktPnRyeUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBpbml0aWFsTGVu
Z3RoKTsKKyAgICAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNU
T1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgaWYgKHZlY3Rvckxlbmd0aCA+IE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCAwLCB0cnVlLCBBcnJheVN0b3JhZ2U6
OnNpemVGb3IodmVjdG9yTGVuZ3RoKSksICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwg
MCwgMCk7CisgICAgICAgICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hl
YWRlckZvckFycmF5KGluaXRpYWxMZW5ndGgsIHZlY3Rvckxlbmd0aCk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHN0
b3JhZ2UtPm1faW5kZXhCaWFzID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xl
YXIoKTsKKyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IGluaXRpYWxMZW5n
dGg7CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgc3RvcmFnZS0+bV9pbml0
aWFsaXphdGlvbkluZGV4ID0gMDsKKyAgICAgICAgc3RvcmFnZS0+bV9pbkNvbXBhY3RJbml0aWFs
aXphdGlvbiA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgICAgIGFycmF5
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
IH0KIAogICAgIEpTQXJyYXkqIGFzQXJyYXkoSlNWYWx1ZSk7CkBAIC0zNTYsMzAgKzE3Myw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSBib29sIGlzSlNBcnJheShKU0NlbGwqIGNlbGwp
IHsgcmV0dXJuIGNlbGwtPmNsYXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm87IH0KICAgICBp
bmxpbmUgYm9vbCBpc0pTQXJyYXkoSlNWYWx1ZSB2KSB7IHJldHVybiB2LmlzQ2VsbCgpICYmIGlz
SlNBcnJheSh2LmFzQ2VsbCgpKTsgfQogCi0vLyBUaGUgZGVmaW5pdGlvbiBvZiBNQVhfU1RPUkFH
RV9WRUNUT1JfTEVOR1RIIGlzIGRlcGVuZGFudCBvbiB0aGUgZGVmaW5pdGlvbiBzdG9yYWdlU2l6
ZQotLy8gZnVuY3Rpb24gYmVsb3cgLSB0aGUgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCBsaW1p
dCBpcyBkZWZpbmVkIHN1Y2ggdGhhdCB0aGUgc3RvcmFnZQotLy8gc2l6ZSBjYWxjdWxhdGlvbiBj
YW5ub3Qgb3ZlcmZsb3cuICAoc2l6ZW9mKEFycmF5U3RvcmFnZSkgLSBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkgKwotLy8gKHZlY3Rvckxlbmd0aCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSBtdXN0IGJlIDw9IDB4RkZGRkZGRkZVICh3aGljaCBpcyBtYXhpbXVtIHZhbHVl
IG9mIHNpemVfdCkuCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEggc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KCgweEZGRkZGRkZGVSAtIChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSkKLQotLy8gVGhlc2UgdmFsdWVzIGhhdmUgdG8gYmUgbWFjcm9zIHRvIGJlIHVzZWQgaW4gbWF4
KCkgYW5kIG1pbigpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNo
LU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVggMTAwMDBVCi0jZGVmaW5lIE1BWF9TVE9SQUdFX1ZFQ1RPUl9JTkRF
WCAoTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCAtIDEpCi0gICAgaW5saW5lIHNpemVfdCBKU0Fy
cmF5OjpzdG9yYWdlU2l6ZSh1bnNpZ25lZCB2ZWN0b3JMZW5ndGgpCi0gICAgewotICAgICAgICBB
U1NFUlQodmVjdG9yTGVuZ3RoIDw9IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIAot
ICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIGlzIGRlZmluZWQgc3VjaCB0aGF0
IHByb3ZpZGVkICh2ZWN0b3JMZW5ndGggPD0gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAg
ICAgICAgLy8gLSBhcyBhc3NlcnRlZCBhYm92ZSAtIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24g
Y2Fubm90IG92ZXJmbG93LgotICAgICAgICBzaXplX3Qgc2l6ZSA9IChzaXplb2YoQXJyYXlTdG9y
YWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSArICh2ZWN0b3JMZW5ndGggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Ci0gICAgICAgIC8vIEFzc2VydGlvbiB0byBk
ZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBpbiBwcmV2aW91cyBjYWxjdWxhdGlvbiAoc2hvdWxkIG5v
dCBiZSBwb3NzaWJsZSwgcHJvdmlkZWQgdGhhdAotICAgICAgICAvLyBNQVhfU1RPUkFHRV9WRUNU
T1JfTEVOR1RIIGlzIGNvcnJlY3RseSBkZWZpbmVkKS4KLSAgICAgICAgQVNTRVJUKCgoc2l6ZSAt
IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSkg
LyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSB2ZWN0b3JMZW5ndGgpICYmIChzaXpl
ID49IChzaXplb2YoQXJyYXlTdG9yYWdlKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSkpOwotICAgIAotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNB
cnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3Ry
dWN0dXJlLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiAgICAgewogICAgICAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDEy
ODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBib3VuZEZ1bmN0aQogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYm91bmRBcmdzLT5sZW5ndGgoKTsgKytpKQotICAg
ICAgICBhcmdzLmFwcGVuZChib3VuZEFyZ3MtPmdldEluZGV4KGkpKTsKKyAgICAgICAgYXJncy5h
cHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleFF1aWNrbHkoaSkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkKICAgICAgICAgYXJncy5hcHBl
bmQoZXhlYy0+YXJndW1lbnQoaSkpOwogCkBAIC02NSw3ICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYm91bmRGdW5jdGkKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJvdW5kQXJncy0+bGVuZ3RoKCk7ICsr
aSkKLSAgICAgICAgYXJncy5hcHBlbmQoYm91bmRBcmdzLT5nZXRJbmRleChpKSk7CisgICAgICAg
IGFyZ3MuYXBwZW5kKGJvdW5kQXJncy0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIGFy
Z3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KGkpKTsKIApAQCAtMTEyLDggKzExMiw4IEBAIHZvaWQg
SlNCb3VuZEZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihFeGUKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiAKLSAgICBwdXREaXJlY3RBY2Nlc3NvcihleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGdsb2JhbE9iamVjdCgpLT50aHJvd1R5
cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNz
b3IpOwotICAgIHB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNhbGxlciwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgcHV0
RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgZ2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNhbGxlciwgZ2xvYmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9y
R2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9
CiAKIHZvaWQgSlNCb3VuZEZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw2ICsxNzgsMTEgQEAgdm9pZCBK
U0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplYwogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFN0cmluZyBKU0NlbGw6OmNsYXNzTmFt
ZShjb25zdCBKU09iamVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTI4MDA5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuICZtX3N0cnVjdHVyZTsKICAgICAgICAgfQotCisgICAgICAgIAogI2lmIEVOQUJMRShH
Q19WQUxJREFUSU9OKQogICAgICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkg
eyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCkBAIC0xNjAs
NiArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIER1bW15IGltcGxlbWVudGF0
aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0
IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1
ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwog
ICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0FTU0VSVCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyBT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGhh
c0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5
cGVQcm9wZXJ0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCBi
b29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU0NlCiAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JH
ZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNl
dHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwog
ICAgICAgICAgICAgfQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2UKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhlY3V0YWJsZSgp
LT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0
RGlyZWN0QWNjZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9u
dERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRl
IHwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgICAgICAgICB9CkBAIC0yODQs
NyArMjg0LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0bwogICAg
ICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7CiAg
ICAgICAgICAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nl
c3NvcihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPnRocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBBY2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51
bSB8IEFjY2Vzc29yKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKICAgICAgICAgICAgIH0KQEAgLTMw
Myw3ICszMDMsNyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5RGVzY3JpcHRvCiAg
ICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsK
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIoZXhlYyksIERvbnREZWxldGUg
fCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRE
aXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRF
bnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwogICAgICAgICAgICAgfQpAQCAt
MzE2LDcgKzMxNiw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG8K
ICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQg
SlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RGdW5jdGlv
bigpICYmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zMjgsNyAr
MzI4LDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTTwogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVyKTsKICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAg
fQotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEpTRnVuY3Rp
b246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpAQCAtMzk2LDE0
ICszOTYsMTQgQEAgYm9vbCBKU0Z1bmN0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iagogICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewog
ICAgICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpKSB7
CiAgICAgICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIHRo
aXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0
ZXIoZXhlYyksIERvbnREZWxldGUgfCBEb250RW51bSB8IEFjY2Vzc29yKTsKKyAgICAgICAgICAg
ICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVj
KSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgQWNjZXNzb3IpOwogICAgICAgICAgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgdmFsdWVDaGVjayA9
ICFkZXNjcmlwdG9yLnZhbHVlKCkgfHwgc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUo
KSwgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHNGcm9tVk1Db2RlKGV4ZWMs
IHRoaXNPYmplY3QpKTsKICAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY2FsbGVyKSB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5qc0V4ZWN1dGFi
bGUoKS0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cikpCi0gICAgICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLT50
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihleGVjKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
QWNjZXNzb3IpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdEFjY2Vzc29y
KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnRocm93VHlw
ZUVycm9yR2V0dGVyU2V0dGVyKGV4ZWMpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBBY2Nlc3Nv
cik7CiAgICAgICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAg
fQogICAgICAgICB2YWx1ZUNoZWNrID0gIWRlc2NyaXB0b3IudmFsdWUoKSB8fCBzYW1lVmFsdWUo
ZXhlYywgZGVzY3JpcHRvci52YWx1ZSgpLCBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUNh
bGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iamVjdCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hl
LmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1
ZU1hcElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBA
IC0yMTMsNiArMjE0LDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5
cAogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHNoYXJlZFN5bWJvbFRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgU2hhcmVkU3ltYm9sVGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBzdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVy
ZUNoYWluOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgc3BhcnNl
QXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIHd0ZlRocmVhZERhdGEo
KS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw2ICsyNDQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwogICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBzaGFyZWRTeW1ib2xUYWJsZVN0cnVjdHVyZTsKICAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHNwYXJzZUFycmF5VmFsdWVNYXBTdHJ1Y3R1cmU7CiAKICAgICAgICAgSWRl
bnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJz
KiBwcm9wZXJ0eU5hbWVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMsNyArMjEzLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwog
ICAgIEdldHRlclNldHRlciogcHJvdG9BY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4
ZWMpOwogICAgIHByb3RvQWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIEpT
RnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3Rv
R2V0dGVyKSk7CiAgICAgcHJvdG9BY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEo
KSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5j
UHJvdG9TZXR0ZXIpKTsKLSAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3Rv
LCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKKyAgICBtX29iamVjdFByb3Rv
dHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVy
c2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9m
dW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOwogCiAgICAg
bV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNOYW1l
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzTnVsbCgp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMSw4ICs1MjEsOCBAQCBib29sIFN0cmlu
Z2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgaWYgKG1faXNBcnJheSkgewogICAg
ICAgICAvLyBHZXQgdGhlIHZhbHVlLgogICAgICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBp
ZiAobV9pc0pTQXJyYXkgJiYgYXNBcnJheShtX29iamVjdC5nZXQoKSktPmNhbkdldEluZGV4KGlu
ZGV4KSkKLSAgICAgICAgICAgIHZhbHVlID0gYXNBcnJheShtX29iamVjdC5nZXQoKSktPmdldElu
ZGV4KGluZGV4KTsKKyAgICAgICAgaWYgKG1faXNKU0FycmF5ICYmIGFzQXJyYXkobV9vYmplY3Qu
Z2V0KCkpLT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQorICAgICAgICAgICAgdmFsdWUgPSBh
c0FycmF5KG1fb2JqZWN0LmdldCgpKS0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChtX29iamVjdC5nZXQoKSk7CiAg
ICAgICAgICAgICBpZiAoIW1fb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG1fb2JqZWN0LmdldCgpLCBleGVjLCBpbmRleCwgc2xvdCkpCkBAIC02ODcsOCAr
Njg3LDggQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAg
ICAgICAgICAgICAgICBpbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRleChpbmRleCkpCi0gICAgICAgICAgICAgICAg
ICAgIGluVmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAgICAgIGlm
IChpc0pTQXJyYXkoYXJyYXkpICYmIGFycmF5LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4UXVpY2tseShpbmRl
eCk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OwogICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXktPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoYXJyYXksIG1fZXhlYywgaW5kZXgsIHNsb3QpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNp
b24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQs
MTAgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
IAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1
ZGUgIkluZGV4aW5nSGVhZGVySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsVGhpcy5o
IgpAQCAtMzgsMTIgKzQwLDE5IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisj
aW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgi
CisjaW5jbHVkZSAiU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRl
IDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKKy8vIFdlIGtlZXAgdHJhY2sgb2YgdGhlIHNpemUgb2YgdGhlIGxhc3QgYXJyYXkgYWZ0ZXIg
aXQgd2FzIGdyb3duLiBXZSB1c2UgdGhpcworLy8gYXMgYSBzaW1wbGUgaGV1cmlzdGljIGZvciBh
cyB0aGUgdmFsdWUgdG8gZ3JvdyB0aGUgbmV4dCBhcnJheSBmcm9tIHNpemUgMC4KKy8vIFRoaXMg
dmFsdWUgaXMgY2FwcGVkIGJ5IHRoZSBjb25zdGFudCBGSVJTVF9WRUNUT1JfR1JPVyBkZWZpbmVk
IGFib3ZlLgorc3RhdGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOworCiBKU0NlbGwqIGdl
dENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqIGNlbGwpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKQEAgLTg2LDI5ICs5NSw4MSBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OnZpc2l0T3V0T2ZMaW5lU3RvcmFnZShTbG90VmlzaXRvciYgdmlzaXRv
ciwgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7Ci0gICAgQVNTRVJU
KHN0b3JhZ2UpOwotICAgIEFTU0VSVChzdG9yYWdlU2l6ZSk7CisgICAgQVNTRVJUKGJ1dHRlcmZs
eSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsK
ICAgICAKLSAgICBzaXplX3QgY2FwYWNpdHkgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKLSAgICBBU1NFUlQoY2FwYWNpdHkpOwotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMg
PSBjYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKLSAgICBQcm9w
ZXJ0eVN0b3JhZ2UgYmFzZU9mU3RvcmFnZSA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAtIDE7Ci0gICAg
aWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoYmFzZU9mU3RvcmFn
ZSwgY2FwYWNpdHlJbkJ5dGVzKSkgewotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3QmFzZU9m
U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKGNhcGFjaXR5SW5CeXRlcykpOwotICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVu
dFRhcmdldCA9IG5ld0Jhc2VPZlN0b3JhZ2UgKyBjYXBhY2l0eTsKLSAgICAgICAgUHJvcGVydHlT
dG9yYWdlIG5ld1N0b3JhZ2UgPSBjdXJyZW50VGFyZ2V0ICsgMTsKLSAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBzdG9yYWdlIC0gMTsKKyAgICBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgcHJl
Q2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIgPSBKU0M6Omhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsK
KyAgICAgICAgcHJlQ2FwYWNpdHkgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0g
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhz
dHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAg
ICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3QgY2Fw
YWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUoCisgICAgICAgIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3
aXNlKAorICAgICAgICAgICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24odmlz
aXRvciwgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIGFu
ZCBjb3B5IHRoZSBwcm9wZXJ0aWVzLgorICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFRh
cmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgIFByb3BlcnR5
U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAg
ICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQodmFsdWUpOwogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0aG91
dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9vdXRPZkxpbmVTdG9y
YWdlLnNldChuZXdTdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0g
MSwgc3RvcmFnZVNpemUpOworICAgICAgICAKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKSkgeworICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAg
ICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Cisg
ICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7
CisgICAgICAgIAorICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTEyMiw5ICsxODMsOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVT
dG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0T3V0
T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQor
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVj
dCgpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKQEAgLTE0Miw5ICsyMDMsOSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwogCi0gICAgUHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxp
bmVTdG9yYWdlKCk7Ci0gICAgaWYgKHN0b3JhZ2UpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
T3V0T2ZMaW5lU3RvcmFnZSh2aXNpdG9yLCBzdG9yYWdlLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKSk7CisgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5KQor
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgp
KTsKIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5p
bmxpbmVTaXplRm9yS25vd25GaW5hbE9iamVjdCgpOwogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwpAQCAtMTYxLDEwICsy
MjIsNTAgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogICAgIHJl
dHVybiBpbmZvLT5jbGFzc05hbWU7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
UHJvcGVydHlTbG90JiBzbG90KQogeworICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRp
cmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMg
bm90CisgICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNs
b3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZworICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoKS4KKyAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpLCBzbG90KTsKKyAgICAKKyAgICBpZiAoaSA+IE1BWF9BUlJBWV9JTkRFWCkKKyAg
ICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpLCBzbG90KTsKKyAg
ICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgIGNhc2UgTm9uQXJyYXk6CisgICAgY2FzZSBBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKGkgPj0g
c3RvcmFnZS0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkg
eworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZp
bmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7CisgICAgICAg
ICAgICAgICAgaXQtPnNlY29uZC5nZXQoc2xvdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA4
LjYuMi4yCkBAIC0xNzQsNiArMjc1LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGEKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2
YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAor
ICAgIC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4KKyAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsK
KyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBDaGVjayBpZiB0
aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCiAg
ICAgSlNWYWx1ZSBwcm90b3R5cGU7CkBAIC0yMzUsOSArMzQzLDE0NSBAQCB2b2lkIEpTT2JqZWN0
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAKIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChzaG91bGRUaHJvdyk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmpl
Y3QqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xv
dCk7CisgICAgdGhpc09iamVjdC0+Y2hlY2tJbmRleGluZ0NvbnNpc3RlbmN5KCk7CisgICAgCisg
ICAgaWYgKFVOTElLRUxZKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAg
ICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3Byb3BlcnR5TmFtZV07CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gVXBk
YXRlIGxlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IgYXMgbmVjZXNzYXJ5LgorICAgICAgICBp
ZiAocHJvcGVydHlOYW1lID49IGxlbmd0aCkgeworICAgICAgICAgICAgbGVuZ3RoID0gcHJvcGVy
dHlOYW1lICsgMTsKKyAgICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChsZW5ndGgpOworICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICB9IGVsc2Ug
aWYgKCF2YWx1ZVNsb3QpCisgICAgICAgICAgICArK3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0
b3I7CisgICAgICAgIAorICAgICAgICB2YWx1ZVNsb3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpc09iamVjdCwgdmFsdWUpOworICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0luZGV4aW5nQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHRoaXNP
YmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2hvdWxkVGhyb3cpOworICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0
ZW5jeSgpOworfQorCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEFycmF5U3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFw
KiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKTsKKworICAgIGlmICghbWFwKQorICAg
ICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGdsb2JhbERhdGEpOworCisgICAgaWYg
KG1hcC0+c3BhcnNlTW9kZSgpKQorICAgICAgICByZXR1cm4gc3RvcmFnZTsKKworICAgIG1hcC0+
c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6
bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRo
aXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBj
aGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAgIC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0
IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
IG1hcC0+YWRkKHRoaXMsIGkpLml0ZXJhdG9yLT5zZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUoKSwgMCwgQXJy
YXlTdG9yYWdlOjpzaXplRm9yKDApKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAg
Q1JBU0goKTsKKyAgICAKKyAgICBtX2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CisgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOworICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldChnbG9iYWxEYXRhLCB0aGlzLCBtYXAp
OworICAgIAorICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworfQorCit2
b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CisgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJh
eVN0b3JhZ2VBbHJlYWR5RXhpc3RzKGdsb2JhbERhdGEsIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3Rv
cmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoKQoreworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlKCkt
PmluZGV4aW5nVHlwZSgpOworICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgb2xkVHlwZSA9PSBO
b25BcnJheSB8fCBvbGRUeXBlID09IEFycmF5KTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICAgICAgZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAg
ICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZlY3Rvckxlbmd0aCkpOworICAgIGlmICghbmV3
QnV0dGVyZmx5KQorICAgICAgICBDUkFTSCgpOworICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICByZXN1bHQtPnNldExlbmd0aChsZW5n
dGgpOworICAgIHJlc3VsdC0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CisgICAgcmVz
dWx0LT5tX3NwYXJzZU1hcC5jbGVhcigpOworICAgIHJlc3VsdC0+bV9udW1WYWx1ZXNJblZlY3Rv
ciA9IDA7CisgICAgcmVzdWx0LT5tX2luZGV4QmlhcyA9IDA7CisjaWYgQ0hFQ0tfQVJSQVlfQ09O
U0lTVEVOQ1kKKyAgICByZXN1bHQtPm1faW5pdGlhbGl6YXRpb25JbmRleCA9IDA7CisgICAgcmVz
dWx0LT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gMDsKKyNlbmRpZgorICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKCksIEFsbG9jYXRlQXJyYXlTdG9yYWdlKTsKKyAgICBzZXRCdXR0ZXJm
bHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVyZmx5LCBuZXdTdHJ1Y3R1cmUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxBcnJheVN0
b3JhZ2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBjcmVhdGVBcnJh
eVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgQkFTRV9WRUNUT1JfTEVOKTsKK30KKworQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBzd2l0Y2ggKHN0
cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4g
ZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMo
Z2xvYmFsRGF0YSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgCisgICAg
Y2FzZSBBcnJheToKKyAgICBjYXNlIE5vbkFycmF5OiB7CisgICAgICAgIGNyZWF0ZUFycmF5U3Rv
cmFnZShnbG9iYWxEYXRhLCAwLCAwKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcChnbG9iYWxEYXRhKTsKKyAgICAgICAgbWFwLT5zZXRT
cGFyc2VNb2RlKCk7CisgICAgICAgIHJldHVybiBhcnJheVN0b3JhZ2UoKTsKKyAgICB9CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMjY5LDEwICs1MTMs
MTggQEAgYm9vbCBKU09iamVjdDo6YWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdAogICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmFsbG93c0FjY2Vzc0Zy
b20oZ2xvYmFsT2JqZWN0LCBleGVjKTsKIH0KIAotdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNj
ZXNzb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQordm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCh2YWx1
ZS5pc0dldHRlclNldHRlcigpICYmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKIAorICAgIHVu
c2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dERpcmVjdEluZGV4KGV4ZWMs
IGluZGV4LCB2YWx1ZSwgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKKwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4oZ2xvYmFsRGF0YSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKTsKIApAQCAtMzA0LDYgKzU1NiwxMCBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUqIGV4CiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIAorICAgIHVu
c2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKIAogICAgIGlm
ICghdGhpc09iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKQogICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKQEAgLTMzMiwxMCArNTg4
LDQ1IEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1
cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCi1ib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK2Jvb2wgSlNP
YmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOworICAgIAorICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQorICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgCisgICAgc3dpdGNoICh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFycmF5
OgorICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZTogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaSA8IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgaWYgKHZh
bHVlU2xvdCkgeworICAgICAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAg
ICAgICAgIC0tc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5nZXQoKSkgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtYXAtPmZpbmQoaSk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbWFwLT5ub3RGb3Vu
ZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRE
ZWxldGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBtYXAtPnJlbW92ZShpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHRoaXNPYmplY3QtPmNoZWNrSW5kZXhpbmdDb25zaXN0ZW5jeSgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCkBAIC00NjUsNiArNzU2LDUxIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMo
SlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVz
IGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCisgICAg
Ly8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZv
ciBldmVyeSBpbnRlZ2VyCisgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFy
Z2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAorICAgIC8vIHdoaWNoIGFs
bW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5h
bWVBcnJheS4KKyAgICBzd2l0Y2ggKG9iamVjdC0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgp
KSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OgorICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBB
cnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
b2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVj
dG9yW2ldKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAg
ICAgIFZlY3Rvcjx1bnNpZ25lZD4ga2V5czsKKyAgICAgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFj
aXR5KG1hcC0+c2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICAgICAgICAgIGZv
ciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RW51bSkp
CisgICAgICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
dC0+Zmlyc3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Rk
Ojpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CiAgICAgZ2V0Q2xhc3NQcm9w
ZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUs
IG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKICAgICBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQpAQCAtNTE1LDggKzg1MSw3IEBAIHZvaWQgSlNPYmplY3Q6
OmZyZWV6ZShKU0dsb2JhbERhdGEmIGdsb2IKIAogdm9pZCBKU09iamVjdDo6cHJldmVudEV4dGVu
c2lvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogewotICAgIGlmIChpc0pTQXJyYXkodGhp
cykpCi0gICAgICAgIGFzQXJyYXkodGhpcyktPmVudGVyRGljdGlvbmFyeU1vZGUoZ2xvYmFsRGF0
YSk7CisgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERhdGEpOwogICAgIGlm
IChpc0V4dGVuc2libGUoKSkKICAgICAgICAgc2V0U3RydWN0dXJlKGdsb2JhbERhdGEsIFN0cnVj
dHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSgp
KSk7CiB9CkBAIC01NzMsMTEgKzkwOCwxMSBAQCBib29sIEpTT2JqZWN0OjpyZW1vdmVEaXJlY3Qo
SlNHbG9iYWxEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEpT
T2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogbG9jYXRpb24pCitORVZFUl9JTkxJTkUgdm9pZCBKU09iamVj
dDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKIHsKLSAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0gYXNHZXR0
ZXJTZXR0ZXIobG9jYXRpb24tPmdldCgpKS0+Z2V0dGVyKCkpIHsKKyAgICBpZiAoSlNPYmplY3Qq
IGdldHRlckZ1bmN0aW9uID0gYXNHZXR0ZXJTZXR0ZXIoZ2V0RGlyZWN0T2Zmc2V0KG9mZnNldCkp
LT5nZXR0ZXIoKSkgewogICAgICAgICBpZiAoIXN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5j
dGlvbiwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0
Q2FjaGVhYmxlR2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jdGlvbiwgb2Zmc2V0KTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KGdldHRlckZ1bmN0aW9uKTsK
ICAgICB9IGVsc2UKQEAgLTYwMywyNiArOTM4LDUyOCBAQCBTdHJ1Y3R1cmUqIEpTT2JqZWN0Ojpj
cmVhdGVJbmhlcml0b3JJRChKCiAgICAgcmV0dXJuIGluaGVyaXRvcklEOwogfQogCi1Qcm9wZXJ0
eVN0b3JhZ2UgSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQordm9pZCBKU09iamVjdDo6
cHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBl
bnRyeUluTWFwLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3Jp
cHRvciYgb2xkRGVzY3JpcHRvcikKIHsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwor
ICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVz
Y3JpcHRvci52YWx1ZSgpKQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAob2xk
RGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgZW50cnlJbk1h
cC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNVbmRlZmluZWQoKSk7CisgICAgICAg
IGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5n
Q3VycmVudChvbGREZXNjcmlwdG9yKSAmIH5BY2Nlc3NvcjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBv
biBzdHJ1Y3R1cmUoKSwgc2luY2UKLSAgICAvLyB3ZSBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9m
IGEgdHJhbnNpdGlvbi4KKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSB7CisgICAgICAgIEpTT2JqZWN0KiBnZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRv
ci5nZXR0ZXJQcmVzZW50KCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBkZXNjcmlwdG9yLmdldHRl
ck9iamVjdCgpOworICAgICAgICBlbHNlIGlmIChvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkpCisgICAgICAgICAgICBnZXR0ZXIgPSBvbGREZXNjcmlwdG9yLmdldHRlck9iamVj
dCgpOworICAgICAgICBKU09iamVjdCogc2V0dGVyID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0
b3Iuc2V0dGVyUHJlc2VudCgpKQorICAgICAgICAgICAgc2V0dGVyID0gZGVzY3JpcHRvci5zZXR0
ZXJPYmplY3QoKTsKKyAgICAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQorICAgICAgICAgICAgc2V0dGVyID0gb2xkRGVzY3JpcHRvci5zZXR0ZXJPYmpl
Y3QoKTsKKworICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpj
cmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAgICAgICAgaWYgKHNldHRl
cikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
ZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRlc2NyaXB0
b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgflJlYWRPbmx5
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGRlc2NyaXB0b3IuaXNHZW5l
cmljRGVzY3JpcHRvcigpKTsKKyAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQob2xkRGVzY3JpcHRvcik7Cit9CisKKy8vIERl
ZmluZWQgaW4gRVM1LjEgOC4xMi45Citib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQoreworICAgIEFTU0VSVChpbmRleCAh
PSAweEZGRkZGRkZGKTsKKworICAgIGlmICghaW5TcGFyc2VJbmRleGluZ01vZGUoKSkgeworICAg
ICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEg
cmVndWxhciBhcnJheQorICAgICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxs
eSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZh
dWx0IHRvIGZhbHNlCisgICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRs
eSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJy
ZW50ICd0cnVlJworICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3Vs
ZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3Bh
cnNlTW9kZScpLgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CisgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFs
dWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0
RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgIH0KKworICAgICAgICBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoZXhlYy0+Z2xv
YmFsRGF0YSgpKTsKKyAgICB9CisKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIEFTU0VSVCht
YXApOworCisgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBu
YW1lIFAuCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+
YWRkKHRoaXMsIGluZGV4KTsKKyAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJl
c3VsdC5pdGVyYXRvci0+c2Vjb25kOworCisgICAgLy8gMi4gTGV0IGV4dGVuc2libGUgYmUgdGhl
IHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPLgorICAg
IC8vIDMuIElmIGN1cnJlbnQgaXMgdW5kZWZpbmVkIGFuZCBleHRlbnNpYmxlIGlzIGZhbHNlLCB0
aGVuIFJlamVjdC4KKyAgICAvLyA0LiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5z
aWJsZSBpcyB0cnVlLCB0aGVuCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAg
IGlmICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5p
dGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rl
c2NyaXB0b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNy
ZWF0ZSBhbiBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mIG9iamVjdCBP
IHdob3NlIFtbVmFsdWVdXSwgW1tXcml0YWJsZV1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25m
aWd1cmFibGVdXSBhdHRyaWJ1dGUgdmFsdWVzCisgICAgICAgIC8vIGFyZSBkZXNjcmliZWQgYnkg
RGVzYy4gSWYgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2Vu
dCwgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0
eSBpcyBzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVz
YyBtdXN0IGJlIGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBv
d24gYWNjZXNzb3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9z
ZSBbW0dldF1dLCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBh
dHRyaWJ1dGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhl
IHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJp
YnV0ZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8g
aXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisKKyAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlZmF1bHRzOworICAgICAgICBlbnRyeUluTWFwLT5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBlbnRyeUluTWFwLT5h
dHRyaWJ1dGVzID0gRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHk7CisgICAgICAgIGVu
dHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CisKKyAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3Io
ZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOworICAgICAgICBpZiAoaW5k
ZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIDUuIFJldHVybiB0cnVlLCBpZiBldmVy
eSBmaWVsZCBpbiBEZXNjIGlzIGFic2VudC4KKyAgICAvLyA2LiBSZXR1cm4gdHJ1ZSwgaWYgZXZl
cnkgZmllbGQgaW4gRGVzYyBhbHNvIG9jY3VycyBpbiBjdXJyZW50IGFuZCB0aGUgdmFsdWUgb2Yg
ZXZlcnkgZmllbGQgaW4gRGVzYyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgY29ycmVzcG9uZGlu
ZyBmaWVsZCBpbiBjdXJyZW50IHdoZW4gY29tcGFyZWQgdXNpbmcgdGhlIFNhbWVWYWx1ZSBhbGdv
cml0aG0gKDkuMTIpLgorICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OworICAgIGVudHJ5
SW5NYXAtPmdldChjdXJyZW50KTsKKyAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkgfHwgZGVz
Y3JpcHRvci5lcXVhbFRvKGV4ZWMsIGN1cnJlbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIDcuIElmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFs
c2UgdGhlbgorICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAvLyA3
LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgRGVzYyBpcyB0cnVl
LgorICAgICAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3Jp
cHRvci5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhy
b3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBjb25maWd1cmFibGUgYXR0cmlidXRl
IG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyA3LmIuIFJlamVjdCwg
aWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgdGhlIFtb
RW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9vbGVhbiBu
ZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxl
UHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51bWVyYWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxl
IHByb3BlcnR5LiIpOworICAgIH0KKworICAgIC8vIDguIElmIElzR2VuZXJpY0Rlc2NyaXB0b3Io
RGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisg
ICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgeworICAgICAgICAvLyA5
LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9y
KERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRoZW4KKyAgICAgICAgaWYgKGN1cnJlbnQu
aXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7Cisg
ICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQg
b2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFi
bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5jb25maWd1
cmFibGUgcHJvcGVydHkuIik7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0
b3IoY3VycmVudCkgaXMgdHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9m
IG9iamVjdCBPIGZyb20gYQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nl
c3NvciBwcm9wZXJ0eS4gUHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVy
dGVkIHByb3BlcnR5J3MKKyAgICAgICAgICAgIC8vIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51
bWVyYWJsZV1dIGF0dHJpYnV0ZXMgYW5kIHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHkncyBh
dHRyaWJ1dGVzIHRvCisgICAgICAgICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAg
ICAgICAgIC8vIDkuYy4gRWxzZSwgY29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmpl
Y3QgTyBmcm9tIGFuIGFjY2Vzc29yIHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgIC8vIFByZXNlcnZlIHRoZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBw
cm9wZXJ0eSdzIFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAg
ICAvLyBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR5J3MgYXR0cmli
dXRlcyB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
LmlzRGF0YURlc2NyaXB0b3IoKSAmJiBkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICAgICAgLy8gMTAuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgYW5k
IElzRGF0YURlc2NyaXB0b3IoRGVzYykgYXJlIGJvdGggdHJ1ZSwgdGhlbgorICAgICAgICAgICAg
Ly8gMTAuYS4gSWYgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxz
ZSwgdGhlbgorICAgICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpICYmICFjdXJy
ZW50LndyaXRhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmkuIFJlamVjdCwgaWYg
dGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIGFuZCB0aGUgW1tXcml0
YWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMs
IHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2Ugd3JpdGFibGUgYXR0cmlidXRl
IG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAgICAgICAgIC8vIDEwLmEu
aWkuIElmIHRoZSBbW1dyaXRhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSwgdGhlbgor
ICAgICAgICAgICAgICAgIC8vIDEwLmEuaWkuMS4gUmVqZWN0LCBpZiB0aGUgW1tWYWx1ZV1dIGZp
ZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tWYWx1ZV1dLCBjdXJy
ZW50LltbVmFsdWVdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
dmFsdWUoKSAmJiAhc2FtZVZhbHVlKGV4ZWMsIGRlc2NyaXB0b3IudmFsdWUoKSwgY3VycmVudC52
YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4
Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVhZG9ubHkgcHJvcGVy
dHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAxMC5iLiBlbHNlLCB0aGUgW1tD
b25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIHRydWUsIHNvIGFueSBjaGFuZ2UgaXMg
YWNjZXB0YWJsZS4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgY3VycmVudC5nZXR0ZXJQcmVzZW50KCkgJiYgY3Vy
cmVudC5zZXR0ZXJQcmVzZW50KCkpOworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNz
b3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUg
Ym90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1Nl
dF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4i
KTsKKyAgICAgICAgICAgICAgICAvLyAxMS5paS4gUmVqZWN0LCBpZiB0aGUgW1tHZXRdXSBmaWVs
ZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbR2V0XV0sIGN1cnJlbnQu
W1tHZXRdXSkgaXMgZmFsc2UuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVy
UHJlc2VudCgpICYmIGRlc2NyaXB0b3IuZ2V0dGVyKCkgIT0gY3VycmVudC5nZXR0ZXIoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0
dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAxMi4gRm9y
IGVhY2ggYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgdGhhdCBpcyBwcmVzZW50LCBzZXQgdGhlIGNv
cnJlc3BvbmRpbmdseSBuYW1lZCBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Yg
b2JqZWN0IE8gdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC4KKyAgICBwdXRJbmRleGVkRGVzY3Jp
cHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KTsKKyAgICAvLyAxMy4g
UmV0dXJuIHRydWUuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NwYXJzZUFycmF5VmFsdWVNYXAq
IEpTT2JqZWN0OjphbGxvY2F0ZVNwYXJzZUluZGV4TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3sKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiByZXN1bHQgPSBTcGFyc2VBcnJheVZhbHVl
TWFwOjpjcmVhdGUoZ2xvYmFsRGF0YSk7CisgICAgYXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
LnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmRlYWxsb2NhdGVTcGFyc2VJbmRleE1hcCgpCit7CisgICAgaWYgKEFy
cmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlID0gYXJyYXlTdG9yYWdlT3JaZXJvKCkpCisgICAgICAg
IGFycmF5U3RvcmFnZS0+bV9zcGFyc2VNYXAuY2xlYXIoKTsKK30KKwordm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+
Z2xvYmFsRGF0YSgpOworCisgICAgLy8gaSBzaG91bGQgYmUgYSB2YWxpZCBhcnJheSBpbmRleCB0
aGF0IGlzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgdmVjdG9yLgorICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgIAorICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwLmdldCgpOworICAgIAorICAgIC8vIEZpcnN0LCBoYW5kbGUgY2FzZXMgd2hlcmUgd2UgZG9u
J3QgY3VycmVudGx5IGhhdmUgYSBzcGFyc2UgbWFwLgorICAgIGlmIChMSUtFTFkoIW1hcCkpIHsK
KyAgICAgICAgLy8gSWYgdGhlIGFycmF5IGlzIG5vdCBleHRlbnNpYmxlLCB3ZSBzaG91bGQgaGF2
ZSBlbnRlcmVkIGRpY3Rpb25hcnkgbW9kZSwgYW5kIGNyZWF0ZWQgdGhlIHNwYXJlIG1hcC4KKyAg
ICAgICAgQVNTRVJUKGlzRXh0ZW5zaWJsZSgpKTsKKyAgICAKKyAgICAgICAgLy8gVXBkYXRlIG1f
bGVuZ3RoIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkp
CisgICAgICAgICAgICBzdG9yYWdlLT5zZXRMZW5ndGgoaSArIDEpOworCisgICAgICAgIC8vIENo
ZWNrIHRoYXQgaXQgaXMgc2Vuc2libGUgdG8gc3RpbGwgYmUgdXNpbmcgYSB2ZWN0b3IsIGFuZCB0
aGVuIHRyeSB0byBncm93IHRoZSB2ZWN0b3IuCisgICAgICAgIGlmIChMSUtFTFkoKGlzRGVuc2VF
bm91Z2hGb3JWZWN0b3IoaSwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcikpICYmIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAgIC8vIHN1
Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4gcmVhbGxv
Y2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFnZSA9IGFy
cmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvLCBvciBjYW4ndCB1c2UgYSB2ZWN0b3IgdG8gaG9sZCB0aGlzIHByb3BlcnR5
IC0gYWxsb2NhdGUgYSBzcGFyc2UgbWFwICYgYWRkIHRoZSB2YWx1ZS4KKyAgICAgICAgbWFwID0g
YWxsb2NhdGVTcGFyc2VJbmRleE1hcChleGVjLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBtYXAt
PnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZhbHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOworICAgIGlmIChpID49IGxlbmd0
aCkgeworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMg
bm90IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkgfHwgIWlz
RXh0ZW5zaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGgg
PSBpICsgMTsKKyAgICAgICAgc3RvcmFnZS0+c2V0TGVuZ3RoKGxlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1hcCAtIGNoZWNrIHdoZXRoZXIgd2Ugc3Rp
bGwgd2FudCB0byBiZSBkb2luZyBzby4KKyAgICAvLyBXZSB3aWxsIGNvbnRpbnVlICB0byB1c2Ug
YSBzcGFyc2UgbWFwIGlmIFNwYXJzZU1vZGUgaXMgc2V0LCBhIHZlY3RvciB3b3VsZCBiZSB0b28g
c3BhcnNlLCBvciBpZiBhbGxvY2F0aW9uIGZhaWxzLgorICAgIHVuc2lnbmVkIG51bVZhbHVlc0lu
QXJyYXkgPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yICsgbWFwLT5zaXplKCk7CisgICAg
aWYgKG1hcC0+c3BhcnNlTW9kZSgpIHx8ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGxlbmd0aCwg
bnVtVmFsdWVzSW5BcnJheSkgfHwgIWluY3JlYXNlVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbGVuZ3RoKSkgeworICAgICAgICBtYXAtPnB1dEVudHJ5KGV4ZWMsIHRoaXMsIGksIHZh
bHVlLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZXJl
YWQgbV9zdG9yYWdlIGFmdGVyIGluY3JlYXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1
ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdlID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvciA9IG51bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFs
bCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGludG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFw
LgorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKKyAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAg
ZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3Bl
cnR5IGludG8gdGhlIHZlY3Rvci4KKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xv
dCA9IHZlY3RvcltpXTsKKyAgICBpZiAoIXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5t
X251bVZhbHVlc0luVmVjdG9yOworICAgIHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
dmFsdWUpOworfQorCit2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRh
KCk7CisKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0
c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKICAgICAKLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb2xkUHJvcGVydHlTdG9yYWdlID0gbV9v
dXRPZkxpbmVTdG9yYWdlLmdldCgpOwotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdQcm9wZXJ0eVN0
b3JhZ2UgPSAwOworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFycmF5OiB7CisgICAgICAgIGlmIChpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpIHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKGdsb2JhbERh
dGEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICghaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgp
IHsKKyAgICAgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgY3JlYXRlQXJyYXlTdG9yYWdlKGdsb2Jh
bERhdGEsIDAsIDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgaSArIDEsIGdldE5ld1ZlY3Rvckxlbmd0aCgwLCAwLCBpICsgMSkpOworICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBzaG91bGRUaHJvdywgYXJyYXlTdG9yYWdlKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRl
eE1vZGUgbW9kZSwgQXJyYXlTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKIAotICAgIC8vIFdlIGhhdmUgdGhpcyBl
eHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhv
c2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgIHZvaWQqIHRlbXAg
PSBuZXdQcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5QWxsb2Nh
dGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG5ld1NpemUsICZ0
ZW1wKSkKKyAgICAvLyBpIHNob3VsZCBiZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0
c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0b3IuCisgICAgQVNTRVJUKGkgPj0gc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkgfHwgYXR0cmlidXRlcyk7CisgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lO
REVYKTsKKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNl
TWFwLmdldCgpOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBj
dXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCisgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAg
ICAgICAvLyBJZiB0aGUgYXJyYXkgaXMgbm90IGV4dGVuc2libGUsIHdlIHNob3VsZCBoYXZlIGVu
dGVyZWQgZGljdGlvbmFyeSBtb2RlLCBhbmQgY3JlYXRlZCB0aGUgc3BhcmUgbWFwLgorICAgICAg
ICBBU1NFUlQoaXNFeHRlbnNpYmxlKCkpOworICAgIAorICAgICAgICAvLyBVcGRhdGUgbV9sZW5n
dGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAg
ICAgICAgICAgIHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisKKyAgICAgICAgLy8gQ2hlY2sg
dGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2luZyBhIHZlY3RvciwgYW5kIHRoZW4g
dHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KKyAgICAgICAgaWYgKExJS0VMWSgKKyAgICAgICAgICAg
ICAgICAhYXR0cmlidXRlcworICAgICAgICAgICAgICAgICYmIChpc0RlbnNlRW5vdWdoRm9yVmVj
dG9yKGksIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpKQorICAgICAgICAgICAgICAgICYm
IGluY3JlYXNlVmVjdG9yTGVuZ3RoKGdsb2JhbERhdGEsIGkgKyAxKSkpIHsKKyAgICAgICAgICAg
IC8vIHN1Y2Nlc3MhIC0gcmVyZWFkIG1fc3RvcmFnZSBzaW5jZSBpdCBoYXMgbGlrZWx5IGJlZW4g
cmVhbGxvY2F0ZWQsIGFuZCBzdG9yZSB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgc3RvcmFn
ZSA9IGFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgICsrc3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRo
aXMgcHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgorICAg
ICAgICBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKGV4ZWMtPmdsb2JhbERhdGEoKSk7Cisg
ICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSk7CisgICAgfQorCisgICAgLy8gVXBkYXRlIG1fbGVuZ3RoIGlmIG5lY2Vzc2Fy
eS4KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBpZiAoaSA+
PSBsZW5ndGgpIHsKKyAgICAgICAgaWYgKG1vZGUgIT0gUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGly
ZWN0KSB7CisgICAgICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5n
dGggaXMgbm90IHdyaXRhYmxlLgorICAgICAgICAgICAgaWYgKG1hcC0+bGVuZ3RoSXNSZWFkT25s
eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgbW9kZSA9PSBQdXREaXJl
Y3RJbmRleFNob3VsZFRocm93LCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
OworICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIG1vZGUgPT0gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHByb3BlcnR5IG9uIG9iamVjdCB0aGF0IGlzIG5vdCBleHRlbnNpYmxl
LiIpOworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IGkgKyAxOworICAgICAgICBzdG9yYWdl
LT5zZXRMZW5ndGgobGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSBhcmUgY3VycmVudGx5IHVz
aW5nIGEgbWFwIC0gY2hlY2sgd2hldGhlciB3ZSBzdGlsbCB3YW50IHRvIGJlIGRvaW5nIHNvLgor
ICAgIC8vIFdlIHdpbGwgY29udGludWUgIHRvIHVzZSBhIHNwYXJzZSBtYXAgaWYgU3BhcnNlTW9k
ZSBpcyBzZXQsIGEgdmVjdG9yIHdvdWxkIGJlIHRvbyBzcGFyc2UsIG9yIGlmIGFsbG9jYXRpb24g
ZmFpbHMuCisgICAgdW5zaWduZWQgbnVtVmFsdWVzSW5BcnJheSA9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgKyBtYXAtPnNpemUoKTsKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkgfHwg
YXR0cmlidXRlcyB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0lu
QXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChleGVjLT5nbG9iYWxEYXRhKCksIGxlbmd0
aCkpCisgICAgICAgIHJldHVybiBtYXAtPnB1dERpcmVjdChleGVjLCB0aGlzLCBpLCB2YWx1ZSwg
YXR0cmlidXRlcywgbW9kZSk7CisKKyAgICAvLyBSZXJlYWQgbV9zdG9yYWdlIGFmdGVyIGluY3Jl
YXNlVmVjdG9yTGVuZ3RoLCB1cGRhdGUgbV9udW1WYWx1ZXNJblZlY3Rvci4KKyAgICBzdG9yYWdl
ID0gYXJyYXlTdG9yYWdlKCk7CisgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG51
bVZhbHVlc0luQXJyYXk7CisKKyAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWFwIGlu
dG8gdGhlIHZlY3RvciwgYW5kIGRlbGV0ZSB0aGUgbWFwLgorICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKKyAgICBmb3IgKFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBpdC0+
c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKSk7CisgICAgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KCk7CisKKyAgICAvLyBTdG9yZSB0aGUgbmV3IHByb3BlcnR5IGludG8gdGhlIHZlY3Rvci4KKyAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHZlY3RvcltpXTsKKyAgICBpZiAo
IXZhbHVlU2xvdCkKKyAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAg
IHZhbHVlU2xvdC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKworICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFs
aWQgYXJyYXkgaW5kZXggdGhhdCBpcyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAg
ICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgpOworICAgIAorICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBOb25BcnJheToKKyAgICBjYXNlIEFy
cmF5OiB7CisgICAgICAgIGlmIChpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkgfHwgYXR0cmlidXRl
cykKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdp
dGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShnbG9iYWxEYXRh
KSk7CisgICAgICAgIGlmICghaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCAwKSB8fCBpID49IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBjcmVhdGVBcnJheVN0b3JhZ2UoZ2xvYmFsRGF0YSwgMCwgMCkpOworICAg
ICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY3JlYXRlQXJyYXlTdG9yYWdl
KGdsb2JhbERhdGEsIGkgKyAxLCBnZXROZXdWZWN0b3JMZW5ndGgoMCwgMCwgaSArIDEpKTsKKyAg
ICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
KyAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IDE7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5n
dGgodW5zaWduZWQgY3VycmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwg
dW5zaWduZWQgZGVzaXJlZExlbmd0aCkKK3sKKyAgICBBU1NFUlQoZGVzaXJlZExlbmd0aCA8PSBN
QVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKTsKKworICAgIHVuc2lnbmVkIGluY3JlYXNlZExlbmd0
aDsKKyAgICB1bnNpZ25lZCBtYXhJbml0TGVuZ3RoID0gc3RkOjptaW4oY3VycmVudExlbmd0aCwg
MTAwMDAwVSk7CisKKyAgICBpZiAoZGVzaXJlZExlbmd0aCA8IG1heEluaXRMZW5ndGgpCisgICAg
ICAgIGluY3JlYXNlZExlbmd0aCA9IG1heEluaXRMZW5ndGg7CisgICAgZWxzZSBpZiAoIWN1cnJl
bnRWZWN0b3JMZW5ndGgpCisgICAgICAgIGluY3JlYXNlZExlbmd0aCA9IHN0ZDo6bWF4KGRlc2ly
ZWRMZW5ndGgsIGxhc3RBcnJheVNpemUpOworICAgIGVsc2UgeworICAgICAgICAvLyBNYXRoZW1h
dGljYWxseSBlcXVpdmFsZW50IHRvOgorICAgICAgICAvLyAgIGluY3JlYXNlZExlbmd0aCA9IChu
ZXdMZW5ndGggKiAzICsgMSkgLyAyOworICAgICAgICAvLyBvcjoKKyAgICAgICAgLy8gICBpbmNy
ZWFzZWRMZW5ndGggPSAodW5zaWduZWQpY2VpbChuZXdMZW5ndGggKiAxLjUpKTsKKyAgICAgICAg
Ly8gVGhpcyBmb3JtIGlzIG5vdCBwcm9uZSB0byBpbnRlcm5hbCBvdmVyZmxvdy4KKyAgICAgICAg
aW5jcmVhc2VkTGVuZ3RoID0gZGVzaXJlZExlbmd0aCArIChkZXNpcmVkTGVuZ3RoID4+IDEpICsg
KGRlc2lyZWRMZW5ndGggJiAxKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaW5jcmVhc2VkTGVuZ3Ro
ID49IGRlc2lyZWRMZW5ndGgpOworCisgICAgbGFzdEFycmF5U2l6ZSA9IHN0ZDo6bWluKGluY3Jl
YXNlZExlbmd0aCwgRklSU1RfVkVDVE9SX0dST1cpOworCisgICAgcmV0dXJuIHN0ZDo6bWluKGlu
Y3JlYXNlZExlbmd0aCwgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNp
cmVkTGVuZ3RoKQoreworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aDsKKyAgICB1bnNpZ25lZCBs
ZW5ndGg7CisgICAgCisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHZlY3Rvckxlbmd0
aCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgor
ICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgp
OwotICAgIG5ld1Byb3BlcnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4o
dGVtcCkgKyBuZXdTaXplICsgMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVy
biBnZXROZXdWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoLCBsZW5ndGgsIGRlc2lyZWRMZW5ndGgp
OworfQorCitib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGxlYXZlcyB0aGUgYXJyYXkgaW4gYW4gaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgc3RhdGUsIGJl
Y2F1c2UgaXQgZG9lcyBub3QgbW92ZSBhbnkgdmFsdWVzIGZyb20gc3BhcnNlIHZhbHVlIG1hcAor
ICAgIC8vIHRvIHRoZSB2ZWN0b3IuIENhbGxlcnMgaGF2ZSB0byBhY2NvdW50IGZvciB0aGF0LCBi
ZWNhdXNlIHRoZXkgY2FuIGRvIGl0IG1vcmUgZWZmaWNpZW50bHkuCisgICAgaWYgKG5ld0xlbmd0
aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZSgpOworCisgICAgdW5zaWdu
ZWQgaW5kZXhCaWFzID0gc3RvcmFnZS0+bV9pbmRleEJpYXM7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgQVNTRVJUKG5ld0xlbmd0aCA+
IHZlY3Rvckxlbmd0aCk7CisgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gZ2V0TmV3VmVj
dG9yTGVuZ3RoKG5ld0xlbmd0aCk7CisKKyAgICAvLyBGYXN0IGNhc2UgLSB0aGVyZSBpcyBubyBw
cmVjYXBhY2l0eS4gSW4gdGhlc2UgY2FzZXMgYSByZWFsbG9jIG1ha2VzIHNlbnNlLgorICAgIGlm
IChMSUtFTFkoIWluZGV4QmlhcykpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+Z3Jvd0FycmF5UmlnaHQoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKG5ld1ZlY3Rv
ckxlbmd0aCkpOworICAgICAgICBpZiAoIW5ld0J1dHRlcmZseSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5n
dGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gUmVtb3ZlIHNv
bWUsIGJ1dCBub3QgYWxsIG9mIHRoZSBwcmVjYXBhY2l0eS4gQXRvbWljIGRlY2F5LCAmIGNhcHBl
ZCB0byBub3Qgb3ZlcmZsb3cgYXJyYXkgbGVuZ3RoLgorICAgIHVuc2lnbmVkIG5ld0luZGV4Qmlh
cyA9IHN0ZDo6bWluKGluZGV4QmlhcyA+PiAxLCBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIIC0g
bmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT5yZXNpemVBcnJheSgKKyAgICAgICAgZ2xvYmFsRGF0YSwKKyAgICAgICAg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpLAorICAgICAgICBuZXdJbmRleEJpYXMsIHRydWUsIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcihuZXdWZWN0b3JMZW5ndGgpKTsKKyAgICBpZiAoIW5ld0J1dHRlcmZseSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIG1lbWNweShuZXdQcm9wZXJ0eVN0b3Jh
Z2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVv
ZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAgIG1fYnV0dGVyZmx5
ID0gbmV3QnV0dGVyZmx5OworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOworICAgIHJldHVybiB0cnVlOworfQor
CisjaWYgQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKK3ZvaWQgSlNPYmplY3Q6OmNoZWNrSW5kZXhp
bmdDb25zaXN0ZW5jeShDb25zaXN0ZW5jeUNoZWNrVHlwZSB0eXBlKQoreworICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yWmVybygpOworICAgIGlmICghc3RvcmFnZSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7Ci0gICAg
cmV0dXJuIG5ld1Byb3BlcnR5U3RvcmFnZTsKKyAgICBBU1NFUlQoIXN0b3JhZ2UtPm1faW5Db21w
YWN0SW5pdGlhbGl6YXRpb24pOworCisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICh0eXBl
ID09IFNvcnRDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICBBU1NFUlQoIXN0b3JhZ2UtPm1fc3Bh
cnNlTWFwKTsKKworICAgIHVuc2lnbmVkIG51bVZhbHVlc0luVmVjdG9yID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlm
ICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAgICAgICAgICAgIHZh
bHVlLmlzVW5kZWZpbmVkKCk7IC8vIExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBk
ZWFsbG9jYXRlZC4KKyAgICAgICAgICAgICsrbnVtVmFsdWVzSW5WZWN0b3I7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBTb3J0Q29uc2lzdGVuY3lDaGVjaykKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaSA+PSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQobnVtVmFsdWVzSW5WZWN0b3IgPT0gc3RvcmFn
ZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAgQVNTRVJUKG51bVZhbHVlc0luVmVjdG9yIDw9
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKworICAgIGlmIChtX3NwYXJzZVZhbHVlTWFwKSB7CisgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fc3BhcnNlVmFs
dWVNYXAtPmVuZCgpOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zcGFyc2VWYWx1ZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIEFT
U0VSVChpbmRleCA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRl
eCA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXgg
PD0gTUFYX0FSUkFZX0lOREVYKTsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+c2Vjb25kKTsKKyAg
ICAgICAgICAgIGlmICh0eXBlICE9IERlc3RydWN0b3JDb25zaXN0ZW5jeUNoZWNrKQorICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpLmlzVW5kZWZpbmVkKCk7IC8v
IExpa2VseSB0byBjcmFzaCBpZiB0aGUgb2JqZWN0IHdhcyBkZWFsbG9jYXRlZC4KKyAgICAgICAg
fQorICAgIH0KK30KKyNlbmRpZiAvLyBDSEVDS19BUlJBWV9DT05TSVNURU5DWQorCitCdXR0ZXJm
bHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOworCisgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9u
IG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CisgICAgLy8gY2FwYWNp
dHksIHNpbmNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4t
cGxhY2UuCisgICAgCisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5ncm93UHJvcGVydHlTdG9yYWdl
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSgpLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQpAQCAtNjMwLDEwICsxNDY3LDQ2IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMDsKICAgICBK
U0NlbGwqIGNlbGwgPSAwOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iamVjdC0+c3Ry
dWN0dXJlKCktPmdldChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgY2VsbCk7Ci0gICAgaWYgKG9mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KQorICAgIGlmIChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9i
amVjdC0+Z2V0RGlyZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7CisgICAgaWYgKGkgPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKG9iamVjdC0+Z2V0RGly
ZWN0T2Zmc2V0KG9mZnNldCksIGF0dHJpYnV0ZXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIHN3aXRjaCAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBj
YXNlIE5vbkFycmF5OgorICAgIGNhc2UgQXJyYXk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3Jh
Z2UtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaSA8
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcih2YWx1ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3Rv
cmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKKyAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOworICAgICAgICAgICAgaWYgKGl0ID09IG1h
cC0+bm90Rm91bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogfQogCiBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eURlc2NyaXB0b3IoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCkBAIC02NTgsNyArMTUzMSw3IEBAIHN0YXRpYyBib29sIHB1dERlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVy
KGV4ZWMtPmdsb2JhbERhdGEoKSwgb2xkRGVzY3JpcHRvci5nZXR0ZXJPYmplY3QoKSk7CiAgICAg
ICAgICAgICBpZiAob2xkRGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkpCiAgICAgICAgICAgICAg
ICAgYWNjZXNzb3ItPnNldFNldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIG9sZERlc2NyaXB0b3Iu
c2V0dGVyT2JqZWN0KCkpOwotICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RBY2Nlc3Nvcihl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBB
Y2Nlc3Nvcik7CisgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgYWNjZXNzb3IsIGF0dHJpYnV0ZXMgfCBBY2Nlc3Nvcik7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIG5ld1ZhbHVlID0ganNV
bmRlZmluZWQoKTsKQEAgLTY4MywxMCArMTU1NiwxOSBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgZWxzZSBpZiAob2xkRGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkpCiAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBv
bGREZXNjcmlwdG9yLnNldHRlck9iamVjdCgpKTsKIAotICAgIHRhcmdldC0+cHV0RGlyZWN0QWNj
ZXNzb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGFjY2Vzc29yLCBhdHRyaWJ1
dGVzIHwgQWNjZXNzb3IpOworICAgIHRhcmdldC0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJv
cGVydHlOYW1lLCBhY2Nlc3NvciwgYXR0cmlidXRlcyB8IEFjY2Vzc29yKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBKU09iamVjdDo6cHV0RGlyZWN0TWF5QmVJbmRleChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
dW5zaWduZWQgYXNJbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGFzSW5k
ZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICBwdXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgIHB1
dERpcmVjdEluZGV4KGV4ZWMsIGFzSW5kZXgsIHZhbHVlKTsKK30KKwogY2xhc3MgRGVmaW5lT3du
UHJvcGVydHlTY29wZSB7CiBwdWJsaWM6CiAgICAgRGVmaW5lT3duUHJvcGVydHlTY29wZShFeGVj
U3RhdGUqIGV4ZWMpCkBAIC03MDQsMjYgKzE1ODYsMjYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2Jh
bERhdGEmIG1fZ2xvYmFsRGF0YTsKIH07CiAKLWJvb2wgSlNPYmplY3Q6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhjZXB0
aW9uKQorYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xv
YmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkg
RGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0
aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2lu
ZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJs
ZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9y
IG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCiAgICAgRGVmaW5l
T3duUHJvcGVydHlTY29wZSBzY29wZShleGVjKTsKLQorICAgIAogICAgIC8vIElmIHdlIGhhdmUg
YSBuZXcgcHJvcGVydHkgd2UgY2FuIGp1c3QgcHV0IGl0IG9uIG5vcm1hbGx5CiAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIGN1cnJlbnQ7Ci0gICAgaWYgKCFvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgY3VycmVu
dCkpIHsKKyAgICBpZiAoIW1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpKSB7CiAgICAgICAgIC8vIHVubGVzcyBl
eHRlbnNpb25zIGFyZSBwcmV2ZW50ZWQhCi0gICAgICAgIGlmICghb2JqZWN0LT5pc0V4dGVuc2li
bGUoKSkgeworICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAo
dGhyb3dFeGNlcHRpb24pCiAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0
eSBvbiBvYmplY3QgdGhhdCBpcyBub3QgZXh0ZW5zaWJsZS4iKSkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBvbGREZXNj
cmlwdG9yOwogICAgICAgICBvbGREZXNjcmlwdG9yLnNldFZhbHVlKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIG9sZERlc2NyaXB0b3IpOworICAg
ICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IsIGRlc2NyaXB0b3IuYXR0cmlidXRlcygpLCBvbGREZXNjcmlwdG9yKTsKICAgICB9CiAK
ICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCkBAIC03NDksOCArMTYzMSw4IEBAIGJvb2wg
SlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAvLyBBIGdlbmVyaWMgZGVz
Y3JpcHRvciBpcyBzaW1wbHkgY2hhbmdpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gZXhpc3Rpbmcg
cHJvcGVydHkKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpIHsKICAg
ICAgICAgaWYgKCFjdXJyZW50LmF0dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkgewotICAgICAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBv
YmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1cnJlbnQpOworICAgICAgICAgICAgbWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBwdXREZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY3VycmVudCksIGN1
cnJlbnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTc2Miw4
ICsxNjQ0LDggQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdGluZyB0byBjaGFuZ2UgYWNjZXNzIG1lY2hhbmlzbSBmb3IgYW4gdW5j
b25maWd1cmFibGUgcHJvcGVydHkuIikpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3Io
ZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlc2NyaXB0b3IuYXR0cmli
dXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50KTsKKyAgICAgICAgbWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjdXJyZW50KSwgY3Vy
cmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHZhbHVlIGFuZCBhdHRyaWJ1dGVz
IG9mIGFuIGV4aXN0aW5nIHByb3BlcnR5CkBAIC03ODQsOCArMTY2Niw4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWMKICAgICAgICAgfQogICAgICAgICBpZiAoY3Vy
cmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikgJiYgIWRlc2NyaXB0b3IudmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgcmV0
dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpLCBjdXJyZW50
KTsKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHB1dERlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudChjdXJyZW50KSwgY3VycmVudCk7CiAgICAgfQogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIGFj
Y2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nlc3NvciBwcm9wZXJ0eQpAQCAtODAy
LDcgKzE2ODQsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgSlNWYWx1ZSBh
Y2Nlc3NvciA9IG9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlO
YW1lKTsKKyAgICBKU1ZhbHVlIGFjY2Vzc29yID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWFjY2Vzc29yKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nl
c3Nvcik7CkBAIC04MTIsMTIgKzE2OTQsMzcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplYwogICAgICAgICBnZXR0ZXJTZXR0ZXItPnNldEdldHRlcihleGVjLT5nbG9i
YWxEYXRhKCksIGRlc2NyaXB0b3IuZ2V0dGVyT2JqZWN0KCkpOwogICAgIGlmIChjdXJyZW50LmF0
dHJpYnV0ZXNFcXVhbChkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgbWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpcywgZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICB1bnNpZ25lZCBhdHRycyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092
ZXJyaWRpbmdDdXJyZW50KGN1cnJlbnQpOwotICAgIG9iamVjdC0+cHV0RGlyZWN0QWNjZXNzb3Io
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cnMgfCBB
Y2Nlc3Nvcik7CisgICAgcHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0
ZXJTZXR0ZXIsIGF0dHJzIHwgQWNjZXNzb3IpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICAvLyBJZiBpdCdzIGFuIGFycmF5
IGluZGV4LCB0aGVuIHVzZSB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIC8vIGMuIExldCBzdWNjZWVkZWQgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBp
bnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nIFAsIERlc2MsIGFuZCBmYWxzZSBh
cyBhcmd1bWVudHMuCisgICAgICAgIC8vIGQuIFJlamVjdCBpZiBzdWNjZWVkZWQgaXMgZmFsc2Uu
CisgICAgICAgIC8vIGUuIElmIGluZGV4ID49IG9sZExlbgorICAgICAgICAvLyBlLmkuIFNldCBv
bGRMZW5EZXNjLltbVmFsdWVdXSB0byBpbmRleCArIDEuCisgICAgICAgIC8vIGUuaWkuIENhbGwg
dGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45
KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG9sZExlbkRlc2MsIGFuZCBmYWxzZSBhcyBhcmd1bWVu
dHMuIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZS4KKyAgICAgICAgLy8gZi4gUmV0
dXJuIHRydWUuCisgICAgICAgIHJldHVybiBvYmplY3QtPmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0
eShleGVjLCBpbmRleCwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gb2JqZWN0LT5kZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCitib29sIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3RTbG93KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKKyAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpcywgZXhlYywg
aSwgc2xvdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBKU09iamVjdCogdGhyb3dUeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTI4MDA5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAjZGVmaW5lIEpTT2JqZWN0X2gKIAogI2luY2x1ZGUg
IkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJBcnJheUNvbnZlbnRpb25zLmgiCisjaW5jbHVkZSAiQXJy
YXlTdG9yYWdlLmgiCisjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZv
LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUu
aCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKKyNpbmNs
dWRlICJQcm9wZXJ0eVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJQdXREaXJlY3RJbmRleE1vZGUuaCIK
ICNpbmNsdWRlICJQdXRQcm9wZXJ0eVNsb3QuaCIKIAotI2luY2x1ZGUgIlN0b3JhZ2VCYXJyaWVy
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAj
aW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDYg
Kzg0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBY2Nlc3NvciAgICAgPSAxIDw8IDUs
ICAvLyBwcm9wZXJ0eSBpcyBhIGdldHRlci9zZXR0ZXIKICAgICB9OwogCisgICAgQ09NUElMRV9B
U1NFUlQoTm9uZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIE5vbmVfaXNfYmVsb3dfRmlyc3RJ
bnRlcm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoUmVhZE9ubHkgPCBGaXJzdElu
dGVybmFsQXR0cmlidXRlLCBSZWFkT25seV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRl
KTsKKyAgICBDT01QSUxFX0FTU0VSVChEb250RW51bSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUs
IERvbnRFbnVtX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVf
QVNTRVJUKERvbnREZWxldGUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RGVsZXRlX2lz
X2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOworICAgIENPTVBJTEVfQVNTRVJUKEZ1bmN0
aW9uIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRnVuY3Rpb25faXNfYmVsb3dfRmlyc3RJbnRl
cm5hbEF0dHJpYnV0ZSk7CisgICAgQ09NUElMRV9BU1NFUlQoQWNjZXNzb3IgPCBGaXJzdEludGVy
bmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsK
KwogICAgIGNsYXNzIEpTRmluYWxPYmplY3Q7CiAKICAgICBjbGFzcyBKU09iamVjdCA6IHB1Ymxp
YyBKU0NlbGwgewpAQCAtOTYsNyArMTA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJs
aWM6CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0KKyAgICAgICAgCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNz
TmFtZShjb25zdCBKU09iamVjdCopOwpAQCAtMTIwLDE4ICsxMzIsMTk2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbShFeGVjU3RhdGUqKTsKIAorICAg
ICAgICB1bnNpZ25lZCBnZXRBcnJheUxlbmd0aCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIE5vbkFycmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCk7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBnZXRWZWN0b3JMZW5ndGgoKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBO
b25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHV0RGlyZWN0KiBtZXRo
b2RzOgorICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQK
KyAgICAgICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAvLyAgLSBp
dCB3aWxsIGlnbm9yZSBleHRlbnNpYmlsaXR5IGFuZCByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBQ
dXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgaXMgcGFzc2VkIGFzIHRoZSBtb2RlICh0aGUgZGVm
YXVsdCkuCisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBwcm9wZXJ0eSB3aXRoIGF0
dHJpYnV0ZXMgd3JpdGFibGUsIGVudW1lcmFibGUgYW5kIGNvbmZpZ3VyYWJsZSBhbGwgc2V0IHRv
IHRydWUuCisgICAgICAgIGJvb2wgcHV0RGlyZWN0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1
dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWF0dHJp
YnV0ZXMgJiYgY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAg
ICAgICBzZXRJbmRleFF1aWNrbHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIHB1dERpcmVjdEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0
SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0
RGlyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEgbm9uLXRocm93aW5nIHZlcnNpb24g
b2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4KKyAgICAgICAgdm9pZCBwdXREaXJlY3RN
YXlCZUluZGV4KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CisgICAgICAgIAor
ICAgICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkgJiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgeCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07
CisgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgKytzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UtPnNldExlbmd0aChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHguc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7
CisgICAgICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworI2lmIENIRUNLX0FSUkFZX0NPTlNJU1RFTkNZCisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5Db21wYWN0SW5pdGlhbGl6YXRpb24pOworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgYXJlIGluaXRpYWxpemluZyB0aGUgbmV4dCBpbmRleCBp
biBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBzdG9yYWdlLT5tX2luaXRp
YWxpemF0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQgc2V0IG1fbnVtVmFsdWVzSW5WZWN0b3IgdG8gdGhlIGluaXRpYWxMZW5ndGgsCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgd2UgZG8gbm90IHRyeSB0byBpbml0aWFsaXplIG1vcmUgdGhhbiB0
aGlzIG51bWJlciBvZiBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgICAgIEFTU0VSVChzdG9yYWdl
LT5tX2luaXRpYWxpemF0aW9uSW5kZXggPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsK
KyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX2luaXRpYWxpemF0aW9uSW5kZXgrKzsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CisgICAg
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHYp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb21wbGV0ZUluaXRpYWxpemF0
aW9uKHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChz
dHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIGlu
aXRpYWxpemVkIGFzIG1lbnkgcHJvcGVydGllcyBhcyB3ZSB0aGluayB3ZSBoYXZlLgorICAgICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG5ld0xlbmd0aCwgbmV3TGVuZ3RoID09IHN0b3JhZ2UtPmxlbmd0aCgpKTsKKyNpZiBD
SEVDS19BUlJBWV9DT05TSVNURU5DWQorICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhl
IG51bWJlciBvZiBwcm9wcmV0aWVzIGluaXRpYWxpemVkIG1hdGNoZXMgdGhlIGluaXRpYWxMZW5n
dGguCisgICAgICAgICAgICAgICAgQVNTRVJUKHN0b3JhZ2UtPm1faW5pdGlhbGl6YXRpb25JbmRl
eCA9PSBtX3N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOworICAgICAgICAgICAgICAgIEFT
U0VSVChzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX2luQ29tcGFjdEluaXRpYWxpemF0aW9uID0gZmFsc2U7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaW5TcGFyc2VJbmRleGluZ01vZGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBOb25BcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICAvLyBwdXREaXJlY3QgaXMg
ZWZmZWN0aXZlbHkgYW4gdW5jaGVja2VkIHZlc2lvbiBvZiAnZGVmaW5lT3duUHJvcGVydHknOgog
ICAgICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKICAgICAg
ICAgLy8gIC0gYWNjZXNzb3JzIGFyZSBub3QgY2FsbGVkLgogICAgICAgICAvLyAgLSBhdHRyaWJ1
dGVzIHdpbGwgYmUgcmVzcGVjdGVkIChhZnRlciB0aGUgY2FsbCB0aGUgcHJvcGVydHkgd2lsbCBl
eGlzdCB3aXRoIHRoZSBnaXZlbiBhdHRyaWJ1dGVzKQorICAgICAgICAvLyAgLSB0aGUgcHJvcGVy
dHkgbmFtZSBpcyBhc3N1bWVkIHRvIG5vdCBiZSBhbiBpbmRleC4KICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAg
IHZvaWQgcHV0RGlyZWN0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgICAgICB2b2lkIHB1dERpcmVjdChKU0dsb2JhbERh
dGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2
b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwotICAgICAgICB2b2lkIHB1dERp
cmVjdEFjY2Vzc29yKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CisgICAgICAgIHZvaWQgcHV0RGlyZWN0QWNjZXNzb3IoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKIAogICAgICAg
ICBib29sIHByb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKQEAgLTE0Nyw2ICszMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgaGFzSW5zdGFuY2UoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsK
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsK
QEAgLTIwMyw4ICszOTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4g
aW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBDb25z
dFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9vdXRP
ZkxpbmVTdG9yYWdlLmdldCgpOyB9Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVT
dG9yYWdlKCkgeyByZXR1cm4gbV9vdXRPZkxpbmVTdG9yYWdlLmdldCgpOyB9CisgICAgICAgIGNv
bnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0K
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseTsgfQor
ICAgICAgICAKKyAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgICAg
ICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgY29uc3QK
ICAgICAgICAgewpAQCAtMjI3LDcgKzQyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5l
U3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGlu
ZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0
T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24gKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMik7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3V0T2ZMaW5lU3RvcmFnZSgpIC0gbG9jYXRpb24g
KyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMSk7CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNl
dChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkBAIC0yNjUsMjEgKzQ1OSwyMiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBpc1NlYWxlZChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpIHsg
cmV0dXJuIHN0cnVjdHVyZSgpLT5pc1NlYWxlZChnbG9iYWxEYXRhKTsgfQogICAgICAgICBib29s
IGlzRnJvemVuKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkgeyByZXR1cm4gc3RydWN0dXJlKCkt
PmlzRnJvemVuKGdsb2JhbERhdGEpOyB9CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPmlzRXh0ZW5zaWJsZSgpOyB9CisgICAgICAgIGJvb2wgaW5kZXhp
bmdTaG91bGRCZVNwYXJzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNFeHRl
bnNpYmxlKCkKKyAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7
CisgICAgICAgIH0KIAogICAgICAgICBib29sIHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB7IHJl
dHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpOyB9CiAgICAgICAgIHZv
aWQgcmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxldGUoRXhlY1N0YXRlKiBleGVjKTsKIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVN0b3JhZ2UgZ3Jvd091dE9mTGluZVN0b3Jh
Z2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICAg
ICAgdm9pZCBzZXRPdXRPZkxpbmVTdG9yYWdlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5U3RvcmFn
ZSwgU3RydWN0dXJlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jv
d091dE9mTGluZVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplKTsKKyAgICAgICAgdm9pZCBzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiwgQnV0dGVy
Zmx5KiwgU3RydWN0dXJlKik7CisgICAgICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5n
aW5nU3RydWN0dXJlKEJ1dHRlcmZseSopOyAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBj
YWxsIHRoaXMuCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgb2xkQ2FwYWNpdHks
IFN0cnVjdHVyZSopOwogICAgICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9y
YWdlSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKLSAgICAgICAgdm9p
ZCogYWRkcmVzc09mT3V0T2ZMaW5lU3RvcmFnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiAmbV9vdXRPZkxpbmVTdG9yYWdlOwotICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBmbGF0
dGVuRGljdGlvbmFyeU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShnbG9i
YWxEYXRhLCB0aGlzKTsKQEAgLTI5Myw3ICs0ODgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCk7Ci0gICAgICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCk7
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGJ1dHRlcmZseU9mZnNldCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1f
YnV0dGVyZmx5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCogYnV0dGVyZmx5
QWRkcmVzcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9idXR0ZXJmbHk7Cisg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCkBAIC0zMTYsMTQgKzUyMCw3OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICAvLyBUbyBpbnN0YW50aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0
LCBiZWxvdy4KICAgICAgICAgLy8gVG8gY3JlYXRlIGRlcml2ZWQgdHlwZXMgeW91IGxpa2VseSB3
YW50IEpTTm9uRmluYWxPYmplY3QsIGJlbG93LgotICAgICAgICBKU09iamVjdChKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgSlNPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKiwgQnV0dGVyZmx5KiA9IDApOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldEluaGVy
aXRvcklEKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAg
cmVtb3ZlRGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEubV9pbmhlcml0b3JJREtleSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdmlzaXRPdXRPZkxpbmVTdG9yYWdlKFNs
b3RWaXNpdG9yJiwgUHJvcGVydHlTdG9yYWdlLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAg
ICB2b2lkIHZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0
b3JhZ2VTaXplKTsKKworICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0aGUg
b2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKKyAgICAgICAgLy8gc3RvcmFn
ZS4gVGhpcyB3aWxsIGFzc2VydCBvdGhlcndpc2UuCisgICAgICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSB8IEhhc0FycmF5U3RvcmFnZSk7CisgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0
aGVyIG9yIG5vdCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBo
YXMgYXJyYXkgc3RvcmFnZS4KKyAgICAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2VPclpl
cm8oKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT5pbmRleGlu
Z1R5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAg
ICAgICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvYmplY3QgaXMgaW4g
YSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLiBVc2UKKyAgICAgICAgLy8gdGhpcyBp
ZiB5b3UncmUgYWJvdXQgdG8gcGVyZm9ybSBhY3Rpb25zIHRoYXQgd291bGQgaGF2ZSByZXF1aXJl
ZCB0aGUKKyAgICAgICAgLy8gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0
b3JhZ2UsIGlmIGl0IGRpZG4ndCBoYXZlIGl0CisgICAgICAgIC8vIGFscmVhZHkuCisgICAgICAg
IEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+aW5kZXhpbmdU
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgTm9uQXJyYXk6CisgICAgICAgICAgICBjYXNlIEFycmF5OgorICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsQXJyYXlTdG9yYWdlKGdsb2JhbERhdGEpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBjcmVhdGVBcnJh
eVN0b3JhZ2UoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIGNyZWF0ZUluaXRpYWxBcnJheVN0b3JhZ2Uo
SlNHbG9iYWxEYXRhJik7CisgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZShKU0dsb2JhbERh
dGEmKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgZGVmaW5lT3duTm9uSW5kZXhQcm9wZXJ0eShF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dF
eGNlcHRpb24pOworCisgICAgICAgIGVudW0gQ29uc2lzdGVuY3lDaGVja1R5cGUgeyBOb3JtYWxD
b25zaXN0ZW5jeUNoZWNrLCBEZXN0cnVjdG9yQ29uc2lzdGVuY3lDaGVjaywgU29ydENvbnNpc3Rl
bmN5Q2hlY2sgfTsKKyNpZiAhQ0hFQ0tfQVJSQVlfQ09OU0lTVEVOQ1kKKyAgICAgICAgdm9pZCBj
aGVja0luZGV4aW5nQ29uc2lzdGVuY3koQ29uc2lzdGVuY3lDaGVja1R5cGUgPSBOb3JtYWxDb25z
aXN0ZW5jeUNoZWNrKSB7IH0KKyNlbHNlCisgICAgICAgIHZvaWQgY2hlY2tJbmRleGluZ0NvbnNp
c3RlbmN5KENvbnNpc3RlbmN5Q2hlY2tUeXBlID0gTm9ybWFsQ29uc2lzdGVuY3lDaGVjayk7Cisj
ZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqKTsKKworICAgICAgICBib29sIGlu
Y3JlYXNlVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIG5ld0xlbmd0aCk7Cisg
ICAgICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CisgICAgICAgIGJvb2wgZGVm
aW5lT3duSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogYWxsb2NhdGVTcGFyc2VJbmRleE1hcChKU0dsb2JhbERhdGEmKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0zMzYsMTcg
KzYwNCwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBpc09iamVjdCgpOwogICAg
ICAgICB2b2lkIGlzU3RyaW5nKCk7CiAgICAgICAgIAorICAgICAgICBBcnJheVN0b3JhZ2UqIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKEpT
R2xvYmFsRGF0YSYsIEFycmF5U3RvcmFnZSopOworICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8
UHV0TW9kZT4KICAgICAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChKU0dsb2JhbERhdGEmLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpT
Q2VsbCopOwogCiAgICAgICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBQcm9wZXJ0eU9mZnNldCk7
CiAKICAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBmaW5kUHJvcGVydHlIYXNoRW50cnkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlKiBjcmVhdGVJbmhl
cml0b3JJRChKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHV0SW5kZXhl
ZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIFByb3BlcnR5RGVzY3Jp
cHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgICAgICBib29sIHB1dERpcmVj
dEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVj
dEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRl
eE1vZGUpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVu
c2lnbmVkIGN1cnJlbnRWZWN0b3JMZW5ndGgsIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgsIHVuc2ln
bmVkIGRlc2lyZWRMZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgo
dW5zaWduZWQgZGVzaXJlZExlbmd0aCk7CiAKLSAgICAgICAgU3RvcmFnZUJhcnJpZXIgbV9vdXRP
ZkxpbmVTdG9yYWdlOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blByb3Bl
cnR5U2xvdFNsb3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5Owor
ICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHByaXZhdGU6CiAgICAgICAgIHZv
aWQqIG1fcGFkZGluZzsKICNlbmRpZgogICAgIH07CkBAIC0zNzIsOCArNjU2LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
SlNOb25GaW5hbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgICAgICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisg
ICAgICAgIGV4cGxpY2l0IEpTTm9uRmluYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSAwKQorICAgICAg
ICAgICAgOiBKU09iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICAg
ICAgewogICAgICAgICB9CiAKQEAgLTQ1NiwxMSArNzQwLDYgQEAgaW5saW5lIHNpemVfdCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdAogICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGaW5h
bE9iamVjdCwgbV9pbmxpbmVTdG9yYWdlKTsKIH0KIAotaW5saW5lIHNpemVfdCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTT2JqZWN0LCBtX291dE9mTGluZVN0b3JhZ2UpOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVj
dDo6aXNHbG9iYWxPYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gR2xvYmFsT2JqZWN0VHlwZTsKQEAgLTQ5MSwxOCArNzcwLDE3IEBA
IGlubGluZSBib29sIEpTT2JqZWN0Ojppc0dsb2JhbFRoaXMoKSBjb24KICAgICByZXR1cm4gc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IEdsb2JhbFRoaXNUeXBlOwogfQogCi1pbmxp
bmUgdm9pZCBKU09iamVjdDo6c2V0T3V0T2ZMaW5lU3RvcmFnZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKCFzdG9yYWdlKSB7Ci0gICAgICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZVNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZVNpemUoKSk7Ci0gICAgfQorICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkpOwogICAgIHNldFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OwotICAgIG1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgc3RvcmFnZSk7
CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7Cit9CisKK2lubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCit7CisgICAgbV9idXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiB9CiAKIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTU0MCw5ICs4MTgsOSBAQCBpbmxpbmUgSlNPYmplY3QqIGFzT2JqZWN0KEpTVmFs
dWUgdmFsdWUpCiAgICAgcmV0dXJuIGFzT2JqZWN0KHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAotaW5s
aW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoraW5saW5lIEpTT2JqZWN0OjpKU09iamVjdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX291dE9mTGluZVN0b3Jh
Z2UoZ2xvYmFsRGF0YSwgdGhpcywgMCkKKyAgICAsIG1fYnV0dGVyZmx5KGJ1dHRlcmZseSkKIHsK
IH0KIApAQCAtNTkwLDE1ICs4NjgsMTcgQEAgaW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1Ro
aXNPYmplY3QoRQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBpZiAoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
bG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgJiYgbG9jYXRpb24tPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
KyAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkpIHsKKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGdldERpcmVjdE9mZnNldChvZmZzZXQpOworICAgICAgICBpZiAoc3RydWN0dXJl
KCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigp
KQorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCBvZmZzZXQpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGxvY2F0aW9uLT5nZXQo
KSwgb2Zmc2V0Rm9yTG9jYXRpb24obG9jYXRpb24pKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpcywgdmFsdWUsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlTbG90U2xvdyhleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiAvLyBJdCBtYXkgc2VlbSBjcmF6eSB0byBpbmxp
bmUgYSBmdW5jdGlvbiB0aGlzIGxhcmdlLCBlc3BlY2lhbGx5IGEgdmlydHVhbCBmdW5jdGlvbiwK
QEAgLTY4NCw2ICs5NjQsNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFT
U0VSVChwcm9wZXJ0eU5hbWUuYXNJbmRleCgpID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7
CiAKICAgICBpZiAoc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwpAQCAtNzEyLDExICs5OTMsMTEgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9k
ZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gb3V0T2ZMaW5lU3RvcmFnZSgpOwor
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5OwogICAgICAgICBp
ZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAg
ICAgbmV3U3RvcmFnZSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CiAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlv
bik7Ci0gICAgICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwg
c3RydWN0dXJlKCkpOworICAgICAgICBzZXRCdXR0ZXJmbHkoZ2xvYmFsRGF0YSwgbmV3QnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUoKSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwpAQCAtNzMw
LDEzICsxMDExLDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y0Z1bmN0aW9uLCBvZmZzZXQpKSB7Ci0gICAgICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdl
ID0gb3V0T2ZMaW5lU3RvcmFnZSgpOyAKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBtX2J1dHRlcmZseTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICBuZXdTdG9yYWdlID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGlu
ZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgY3VycmVudENhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldE91
dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgc2V0QnV0dGVyZmx5KGdsb2JhbERhdGEsIG5ld0J1dHRlcmZseSwgc3RydWN0dXJlKTsKICAg
ICAgICAgcHV0RGlyZWN0T2Zmc2V0KGdsb2JhbERhdGEsIG9mZnNldCwgdmFsdWUpOwogICAgICAg
ICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZh
bHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKICAgICAgICAgLy8gc28gbGVhdmUgdGhl
IHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KQEAgLTgwMyw5ICsxMDg0LDkgQEAgaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZFJlYQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIFByb3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlID0gZ3Jvd091dE9mTGluZVN0
b3JhZ2UoCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSgKICAgICAgICAgZ2xvYmFsRGF0YSwgb2xkQ2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgc2V0T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBuZXdT
dG9yYWdlLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxEYXRhLCBuZXdC
dXR0ZXJmbHksIG5ld1N0cnVjdHVyZSk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCkBAIC04MzksMTEgKzExMjAsMTEgQEAg
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChKU0dsb2JhbAogaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSA9IG91
dE9mTGluZVN0b3JhZ2UoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkp
Ci0gICAgICAgIG5ld1N0b3JhZ2UgPSBncm93T3V0T2ZMaW5lU3RvcmFnZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBn
ZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwotICAgIHNldE91dE9mTGluZVN0b3JhZ2UoZ2xvYmFs
RGF0YSwgbmV3U3RvcmFnZSwgc3RydWN0dXJlKCkpOworICAgIHNldEJ1dHRlcmZseShnbG9iYWxE
YXRhLCBuZXdCdXR0ZXJmbHksIHN0cnVjdHVyZSgpKTsKICAgICBwdXREaXJlY3RPZmZzZXQoZ2xv
YmFsRGF0YSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKQEAgLTkzNSw2ICsxMjE2LDExIEBAIEFMV0FZ
U19JTkxJTkUgUmVnaXN0ZXIgUmVnaXN0ZXI6OndpdGhDYWwKICAgICByZXR1cm4gcjsKIH0KIAor
aW5saW5lIHNpemVfdCBvZmZzZXRJbkJ1dHRlcmZseShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7
CisgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICsgQnV0dGVyZmx5
OjppbmRleE9mUHJvcGVydHlTdG9yYWdlKCk7Cit9CisKIC8vIFRoaXMgaXMgYSBoZWxwZXIgZm9y
IHBhdGNoaW5nIGNvZGUgd2hlcmUgeW91IHdhbnQgdG8gZW1pdCBhIGxvYWQgb3Igc3RvcmUgYW5k
CiAvLyB0aGUgYmFzZSBpczoKIC8vIEZvciBpbmxpbmUgb2Zmc2V0czogYSBwb2ludGVyIHRvIHRo
ZSBvdXQtb2YtbGluZSBzdG9yYWdlIHBvaW50ZXIuCkBAIC05NDIsMTQgKzEyMjgsMTQgQEAgQUxX
QVlTX0lOTElORSBSZWdpc3RlciBSZWdpc3Rlcjo6d2l0aENhbAogaW5saW5lIHNpemVfdCBvZmZz
ZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAg
IGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSAqIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOwotICAgIHJl
dHVybiBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSBKU09iamVjdDo6b2Zmc2V0
T2ZPdXRPZkxpbmVTdG9yYWdlKCkgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogb2Zmc2V0SW5J
bmxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KTsKKyAgICByZXR1cm4gSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpIC0gSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpICsgc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogfQog
CiBpbmxpbmUgaW50IGluZGV4UmVsYXRpdmVUb0Jhc2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmIChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKG9mZnNldCk7CisgICAgICAgIHJldHVybiBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KSArIEJ1dHRlcmZseTo6aW5kZXhPZlByb3BlcnR5U3RvcmFn
ZSgpOwogICAgIEFTU0VSVCghKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAlIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpIC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9mZnNldEluSW5saW5lU3Rv
cmFnZShvZmZzZXQpOwogfQpAQCAtOTU3LDcgKzEyNDMsNyBAQCBpbmxpbmUgaW50IGluZGV4UmVs
YXRpdmVUb0Jhc2UoUHJvcGVydHlPCiBpbmxpbmUgaW50IG9mZnNldFJlbGF0aXZlVG9CYXNlKFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZShvZmZzZXQpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI4MDA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDkgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciogSlNQcm9wZXJ0eU5hbWVJdAogICAgIGlmIChvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5v
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOwogICAgIAorICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcihvLT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRv
cjsKKyAgICAKICAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVj
LCBvKTsKICAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBvLT5zdHJ1Y3R1cmUo
KS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNp
b24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBKU1N5bWJv
bFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eQogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4ob2JqZWN0KTsKICAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09i
amVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKCk7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSlNTeW1i
b2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHkKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CiAgICAgfQogICAgIAotICAg
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgSlNTeW1i
b2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMjgw
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwog
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgCiBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZp
cm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDkgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlID0gMSA8PCAzOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBJc0Vudmlyb25tZW50UmVjb3JkID0gMSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgPSAxIDw8IDU7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gPSAxIDw8IDY7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyA9IDEgPDwg
ODsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyA9IDEgPDwgNjsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiA9IDEgPDwgNzsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgODsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCA5Owog
CiAgICAgY2xhc3MgVHlwZUluZm8gewogICAgIHB1YmxpYzoKQEAgLTc1LDggKzc2LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgb3ZlcnJpZGVzSGFzSW5zdGFuY2UoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0hhc0luc3RhbmNlKTsgfQogICAgICAgICBi
b29sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MxKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpOyB9CiAgICAgICAgIGJvb2wgb3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QpOyB9CisgICAgICAgIGJvb2wgaW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczEoSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyk7IH0KICAgICAgICAgYm9vbCBvdmVycmlkZXNWaXNpdENo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMShPdmVycmlkZXNWaXNpdENoaWxk
cmVuKTsgfQotICAgICAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MxKE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpOyB9CisgICAg
ICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
T25GbGFnczIoT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyk7IH0KICAgICAgICAgYm9vbCBwcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyKFByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZyk7IH0KIAogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGZsYWdz
T2Zmc2V0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxpdGVyYWxQYXJzZXIuaCIKIAorI2lu
Y2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAtNjQwLDcgKzY0MiwxMyBAQCBKU1ZhbHVlIExpdGVy
YWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIERvUGFyc2VPYmplY3RFbmRFeHByZXNzaW9uOgogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGFzT2JqZWN0KG9iamVjdFN0YWNrLmxhc3QoKSktPnB1dERpcmVjdChtX2V4ZWMtPmds
b2JhbERhdGEoKSwgaWRlbnRpZmllclN0YWNrLmxhc3QoKSwgbGFzdFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsK
KyAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFz
dCgpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBpZGVudC5hc0luZGV4KCk7CisgICAg
ICAgICAgICAgICAgaWYgKGkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICAg
ICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KG1fZXhlYywgaSwgbGFzdFZhbHVlKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGly
ZWN0KG1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAg
ICAgICBpZGVudGlmaWVyU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGlmICht
X2xleGVyLmN1cnJlbnRUb2tlbigpLnR5cGUgPT0gVG9rQ29tbWEpCiAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gZG9QYXJzZU9iamVjdFN0YXJ0RXhwcmVzc2lvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDEyODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKKyNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAj
aW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw2IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoT2JqZWN0UHJv
dG90eXAKIAogT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0dWN0dXJlKQogICAgIDogSlNOb25GaW5hbE9iamVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHN0dWN0dXJlKQotICAgICwgbV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFt
ZXModHJ1ZSkKIHsKIH0KIApAQCAtNzcsMzQgKzc2LDYgQEAgdm9pZCBPYmplY3RQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKEpTRwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAK
LXZvaWQgT2JqZWN0UHJvdG90eXBlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBPYmplY3RQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8T2Jq
ZWN0UHJvdG90eXBlKj4oY2VsbCk7Ci0gICAgQmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0
aWVzV2l0aFVJbnQzMk5hbWVzICYmIHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dp
dGhVSW50MzJOYW1lcyA9IGZhbHNlOwotfQotCi1ib29sIE9iamVjdFByb3RvdHlwZTo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hv
dWxkVGhyb3cpCi17Ci0gICAgT2JqZWN0UHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE9i
amVjdFByb3RvdHlwZSo+KG9iamVjdCk7Ci0gICAgYm9vbCByZXN1bHQgPSBCYXNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1faGFzTm9Qcm9wZXJ0aWVzV2l0aFVJbnQz
Mk5hbWVzICYmIHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQotICAgICAgICB0aGlzT2JqZWN0LT5tX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1l
cyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBPYmplY3RQcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIE9i
amVjdFByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxPYmplY3RQcm90b3R5cGUqPihjZWxs
KTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9oYXNOb1Byb3BlcnRpZXNXaXRoVUludDMyTmFtZXMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCiBi
b29sIE9iamVjdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QgJnNs
b3QpCiB7CiAgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU05vbkZpbmFsT2JqZWN0
PihleGVjLCBFeGVjU3RhdGU6Om9iamVjdFByb3RvdHlwZVRhYmxlKGV4ZWMpLCBqc0Nhc3Q8T2Jq
ZWN0UHJvdG90eXBlKj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24g
MTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE0ICs1MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSopOwotICAgICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwotCiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
Ci0KLSAgICAgICAgYm9vbCBtX2hhc05vUHJvcGVydGllc1dpdGhVSW50MzJOYW1lczsKICAgICB9
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2aXNpb24gMTI4MDA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxp
bmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChp
c091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMjsKKyAgICByZXR1cm4gLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQpIC0gMTsK
IH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U3RvcmFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb3BlcnR5U3RvcmFnZV9oCisjZGVmaW5lIFByb3Bl
cnR5U3RvcmFnZV9oCisKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogUHJvcGVydHlTdG9yYWdl
OwordHlwZWRlZiBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBDb25zdFByb3BlcnR5
U3RvcmFnZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcm9wZXJ0eVN0b3Jh
Z2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXREaXJlY3RJbmRl
eE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRE
aXJlY3RJbmRleE1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B1dERpcmVjdEluZGV4TW9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgUHV0RGlyZWN0SW5kZXhNb2RlX2gKKyNkZWZpbmUgUHV0RGlyZWN0SW5kZXhNb2RlX2gK
KworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gUHV0RGlyZWN0SW5kZXhNb2RlIHsgUHV0RGlyZWN0
SW5kZXhMaWtlUHV0RGlyZWN0LCBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93LCBQdXREaXJl
Y3RJbmRleFNob3VsZFRocm93IH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
UHV0RGlyZWN0SW5kZXhNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMzcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kcy5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChSZWdFeHBN
YXRjaGVzQXJyYXkpOwogCiBjb25zdCBDbGFzc0luZm8gUmVnRXhwTWF0Y2hlc0FycmF5OjpzX2lu
Zm8gPSB7IkFycmF5IiwgJkpTQXJyYXk6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShSZWdFeHBNYXRjaGVzQXJyYXkpfTsKIAorUmVnRXhwTWF0Y2hlc0FycmF5OjpSZWdFeHBNYXRj
aGVzQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJl
Z0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQorICAgIDogSlNBcnJheShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpLCBidXR0ZXJmbHkpCisgICAg
LCBtX3Jlc3VsdChyZXN1bHQpCisgICAgLCBtX3N0YXRlKFJlaWZpZWROb25lKQoreworICAgIG1f
aW5wdXQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIGlucHV0KTsKKyAgICBtX3JlZ0V4cC5zZXQoZ2xv
YmFsRGF0YSwgdGhpcywgcmVnRXhwKTsKK30KKworUmVnRXhwTWF0Y2hlc0FycmF5KiBSZWdFeHBN
YXRjaGVzQXJyYXk6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVn
RXhwKiByZWdFeHAsIE1hdGNoUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0KTsK
KyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBjcmVhdGVBcnJheUJ1dHRlcmZseShnbG9iYWxEYXRhLCBy
ZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxKTsKKyAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFy
cmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9i
YWxEYXRhLmhlYXApKSBSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgYnV0dGVyZmx5LCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGlucHV0LCByZWdFeHAsIHJlc3VsdCk7CisgICAg
YXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiBhcnJheTsKK30K
Kwogdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBtX3Jl
Z0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOwogfQogCiB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDEy
ODAwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBSZWdFeHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7CiAgICAgcHJp
dmF0ZToKLSAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAq
IHJlZ0V4cCwgTWF0Y2hSZXN1bHQgcmVzdWx0KQotICAgICAgICAgICAgOiBKU0FycmF5KGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkpCi0gICAg
ICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICAgICAgICAgICwgbV9zdGF0ZShSZWlmaWVk
Tm9uZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9pbnB1dC5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgaW5wdXQpOwotICAgICAgICAgICAgbV9yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJl
Z0V4cCk7Ci0gICAgICAgIH0KKyAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KEpTR2xvYmFsRGF0
YSYsIEJ1dHRlcmZseSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCBNYXRj
aFJlc3VsdCk7CiAKICAgICAgICAgZW51bSBSZWlmaWVkU3RhdGUgeyBSZWlmaWVkTm9uZSwgUmVp
ZmllZE1hdGNoLCBSZWlmaWVkQWxsIH07CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYg
SlNBcnJheSBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsIE1hdGNo
UmVzdWx0IHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7Ci0g
ICAgICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBN
YXRjaGVzQXJyYXkoZ2xvYmFsRGF0YSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbnB1
dCwgcmVnRXhwLCByZXN1bHQpOwotICAgICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU1N0cmluZyos
IFJlZ0V4cCosIE1hdGNoUmVzdWx0KTsKIAogICAgICAgICBKU1N0cmluZyogbGVmdENvbnRleHQo
RXhlY1N0YXRlKik7CiAgICAgICAgIEpTU3RyaW5nKiByaWdodENvbnRleHQoRXhlY1N0YXRlKik7
CkBAIC01OCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2
aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKQEAgLTExMywxMSArMTE1LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMp
CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5k
ZXgpOwotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNp
b24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVq
ZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWpl
Y3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlamVjdF9oCisjZGVmaW5lIFJlamVj
dF9oCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0
aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNl
cHRpb24pCisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWplY3RfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwLmgiCisK
KyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVlTWFwSW5s
aW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OnNfaW5mbyA9IHsgIlNwYXJzZUFycmF5VmFsdWVNYXAiLCAwLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNwYXJzZUFycmF5VmFsdWVNYXApIH07CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFNwYXJzZUFycmF5VmFsdWVNYXBfaAorI2RlZmluZSBTcGFyc2VBcnJh
eVZhbHVlTWFwX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTVHlwZUluZm8u
aCIKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJQdXREaXJlY3RJ
bmRleE1vZGUuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
c3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsK
KyAgICB0eXBlZGVmIFdyaXRlQmFycmllcjxVbmtub3duPiBCYXNlOworCisgICAgU3BhcnNlQXJy
YXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7IH0KKworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KikgY29uc3Q7CisgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7
CisgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9yJikgY29uc3Q7CisgICAgSlNWYWx1ZSBn
ZXROb25TcGFyc2VNb2RlKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworfTsK
KworY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50NjRfdCwgU3BhcnNlQXJyYXlFbnRyeSwgV1RGOjpJbnRIYXNoPHVpbnQ2NF90Piwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4gPiBNYXA7CisKKyAg
ICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9ybWFsID0gMCwKKyAgICAgICAgU3BhcnNlTW9kZSA9
IDEsCisgICAgICAgIExlbmd0aElzUmVhZE9ubHkgPSAyLAorICAgIH07CisKKyAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKEpTR2xvYmFsRGF0YSYpOworICAgIH5TcGFyc2VBcnJheVZhbHVlTWFwKCk7
CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTX0VY
UE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICB0eXBlZGVmIE1hcDo6
aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTWFwOjpBZGRSZXN1bHQgQWRkUmVzdWx0OworCisgICAg
c3RhdGljIFNwYXJzZUFycmF5VmFsdWVNYXAqIGNyZWF0ZShKU0dsb2JhbERhdGEmKTsKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIGJvb2wgc3BhcnNlTW9kZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9mbGFncyAmIFNwYXJzZU1vZGU7CisgICAgfQorCisgICAgdm9pZCBzZXRTcGFy
c2VNb2RlKCkKKyAgICB7CisgICAgICAgIG1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9m
bGFncyB8IFNwYXJzZU1vZGUpOworICAgIH0KKworICAgIGJvb2wgbGVuZ3RoSXNSZWFkT25seSgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7CisgICAg
fQorCisgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICB7CisgICAgICAgIG1fZmxh
Z3MgPSBzdGF0aWNfY2FzdDxGbGFncz4obV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOworICAg
IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgbWF5IG11dGF0ZSB0aGUgY29udGVudHMgb2YgdGhl
IG1hcAorICAgIHZvaWQgcHV0RW50cnkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgYm9vbCBwdXREaXJlY3QoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0
RGlyZWN0SW5kZXhNb2RlKTsKKyAgICBBZGRSZXN1bHQgYWRkKEpTT2JqZWN0KiwgdW5zaWduZWQp
OworICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmluZChpKTsg
fQorICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3ZlIGlzIHZhbGlkIChjaGVjayB0
aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KKyAgICB2b2lkIHJlbW92ZShpdGVyYXRvciBpdCkgeyBt
X21hcC5yZW1vdmUoaXQpOyB9CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaSkgeyBtX21hcC5y
ZW1vdmUoaSk7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90IG11dGF0ZSB0aGUgY29u
dGVudHMgb2YgdGhlIG1hcC4KKyAgICBpdGVyYXRvciBub3RGb3VuZCgpIHsgcmV0dXJuIG1fbWFw
LmVuZCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX21h
cC5jb250YWlucyhpKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAu
c2l6ZSgpOyB9CisgICAgLy8gT25seSBhbGxvdyBjb25zdCBiZWdpbi9lbmQgaXRlcmF0aW9uLgor
ICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsg
fQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9
CisKK3ByaXZhdGU6CisgICAgTWFwIG1fbWFwOworICAgIEZsYWdzIG1fZmxhZ3M7CisgICAgc2l6
ZV90IG1fcmVwb3J0ZWRDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gU3BhcnNlQXJyYXlWYWx1ZU1hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcElubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXBJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU3BhcnNlQXJyYXlWYWx1ZU1hcElubGluZU1ldGhvZHNfaAorI2RlZmlu
ZSBTcGFyc2VBcnJheVZhbHVlTWFwSW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJTcGFyc2VBcnJheVZhbHVl
TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
U3BhcnNlQXJyYXlWYWx1ZU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgOiBCYXNl
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3BhcnNlQXJyYXlWYWx1ZU1hcFN0cnVjdHVyZS5nZXQo
KSkKKyAgICAsIG1fZmxhZ3MoTm9ybWFsKQorICAgICwgbV9yZXBvcnRlZENhcGFjaXR5KDApCit7
Cit9CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFwOjp+U3BhcnNlQXJyYXlWYWx1ZU1hcCgp
Cit7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OmZpbmlzaENyZWF0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKK30KKworaW5saW5lIFNwYXJzZUFycmF5VmFsdWVNYXAqIFNwYXJzZUFycmF5
VmFsdWVNYXA6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcCogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3BhcnNl
QXJyYXlWYWx1ZU1hcD4oZ2xvYmFsRGF0YS5oZWFwKSkgU3BhcnNlQXJyYXlWYWx1ZU1hcChnbG9i
YWxEYXRhKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PFNwYXJzZUFycmF5VmFsdWVNYXAq
PihjZWxsKS0+U3BhcnNlQXJyYXlWYWx1ZU1hcDo6flNwYXJzZUFycmF5VmFsdWVNYXAoKTsKK30K
KworaW5saW5lIFN0cnVjdHVyZSogU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK2lubGluZSBTcGFyc2VBcnJheVZhbHVlTWFw
OjpBZGRSZXN1bHQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTT2JqZWN0KiBhcnJheSwgdW5z
aWduZWQgaSkKK3sKKyAgICBTcGFyc2VBcnJheUVudHJ5IGVudHJ5OworICAgIGVudHJ5LnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisKKyAgICBBZGRSZXN1bHQgcmVzdWx0
ID0gbV9tYXAuYWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBh
Y2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAg
ICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBt
X3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6cHV0RW50cnkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgQWRkUmVzdWx0
IHJlc3VsdCA9IGFkZChhcnJheSwgaSk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkgPSBy
ZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIC8vIFRvIHNhdmUgYSBzZXBhcmF0ZSBmaW5k
ICYgYWRkLCB3ZSBmaXJzdCBhbHdheXMgYWRkIHRvIHRoZSBzcGFyc2UgbWFwLgorICAgIC8vIElu
IHRoZSB1bmNvbW1vbiBjYXNlIHRoYXQgdGhpcyBpcyBhIG5ldyBwcm9wZXJ0eSwgYW5kIHRoZSBh
cnJheSBpcyBub3QKKyAgICAvLyBleHRlbnNpYmxlLCB0aGlzIGlzIG5vdCB0aGUgcmlnaHQgdGhp
bmcgdG8gaGF2ZSBkb25lIC0gc28gcmVtb3ZlIGFnYWluLgorICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSAmJiAhYXJyYXktPmlzRXh0ZW5zaWJsZSgpKSB7CisgICAgICAgIHJlbW92ZShyZXN1bHQu
aXRlcmF0b3IpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSkgeworICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxEYXRh
KCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVl
IGFjY2Vzc29yID0gZW50cnkuU3BhcnNlQXJyYXlFbnRyeTo6QmFzZTo6Z2V0KCk7CisgICAgQVNT
RVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVyKCkpOworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBh
c0dldHRlclNldHRlcihhY2Nlc3NvciktPnNldHRlcigpOworICAgIAorICAgIGlmICghc2V0dGVy
KSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IHNldHRlci0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0
YSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1
ZSk7CisgICAgY2FsbChleGVjLCBzZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFy
Z3MpOworfQorCitpbmxpbmUgYm9vbCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXREaXJlY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQoreworICAgIEFk
ZFJlc3VsdCByZXN1bHQgPSBhZGQoYXJyYXksIGkpOworICAgIFNwYXJzZUFycmF5RW50cnkmIGVu
dHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICAvLyBUbyBzYXZlIGEgc2VwYXJh
dGUgZmluZCAmIGFkZCwgd2UgZmlyc3QgYWx3YXlzIGFkZCB0byB0aGUgc3BhcnNlIG1hcC4KKyAg
ICAvLyBJbiB0aGUgdW5jb21tb24gY2FzZSB0aGF0IHRoaXMgaXMgYSBuZXcgcHJvcGVydHksIGFu
ZCB0aGUgYXJyYXkgaXMgbm90CisgICAgLy8gZXh0ZW5zaWJsZSwgdGhpcyBpcyBub3QgdGhlIHJp
Z2h0IHRoaW5nIHRvIGhhdmUgZG9uZSAtIHNvIHJlbW92ZSBhZ2Fpbi4KKyAgICBpZiAobW9kZSAh
PSBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3QgJiYgcmVzdWx0LmlzTmV3RW50cnkgJiYgIWFy
cmF5LT5pc0V4dGVuc2libGUoKSkgeworICAgICAgICByZW1vdmUocmVzdWx0Lml0ZXJhdG9yKTsK
KyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBtb2RlID09IFB1dERpcmVjdEluZGV4U2hvdWxk
VGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBwcm9wZXJ0eSBvbiBvYmplY3QgdGhhdCBpcyBu
b3QgZXh0ZW5zaWJsZS4iKTsKKyAgICB9CisKKyAgICBlbnRyeS5hdHRyaWJ1dGVzID0gYXR0cmli
dXRlczsKKyAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhcnJheSwgdmFsdWUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQo
UHJvcGVydHlTbG90JiBzbG90KSBjb25zdAoreworICAgIEpTVmFsdWUgdmFsdWUgPSBCYXNlOjpn
ZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOworCisgICAgaWYgKExJS0VMWSghdmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIodmFs
dWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikgeworICAgICAgICBzbG90LnNldFVuZGVm
aW5lZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2xvdC5zZXRHZXR0ZXJTbG90
KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6OmdldChQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Cit7CisgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKEJhc2U6OmdldCgpLCBhdHRyaWJ1dGVzKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3Bh
cnNlQXJyYXlFbnRyeTo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGFycmF5KSBjb25z
dAoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gQmFzZTo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3Vs
dCk7CisKKyAgICBpZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIo
cmVzdWx0KS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OworICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJh
eSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVu
dHJ5OjpnZXROb25TcGFyc2VNb2RlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMp
OworICAgIHJldHVybiBCYXNlOjpnZXQoKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNPYmplY3QsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIHRoaXNNYXAgPSBqc0Nhc3Q8U3Bh
cnNlQXJyYXlWYWx1ZU1hcCo+KHRoaXNPYmplY3QpOworICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXNN
YXAtPm1fbWFwLmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXQgPSB0aGlzTWFwLT5tX21hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpdC0+c2Vj
b25kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTcGFyc2VBcnJheVZh
bHVlTWFwSW5saW5lTWV0aG9kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0b3JhZ2VCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RvcmFnZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTdG9yYWdlQmFycmllcl9oCi0jZGVm
aW5lIFN0b3JhZ2VCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgotI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdHlwZWRlZiBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBQcm9wZXJ0eVN0b3JhZ2U7Ci10eXBlZGVmIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIENvbnN0UHJvcGVydHlTdG9yYWdlOwotCi1jbGFzcyBTdG9y
YWdlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBVbmNoZWNrZWRUYWcgeyBVbmNoZWNrZWQg
fTsKLSAgICBTdG9yYWdlQmFycmllcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlKQotICAgIHsKLSAgICAgICAgc2V0KGdsb2Jh
bERhdGEsIG93bmVyLCBzdG9yYWdlKTsKLSAgICB9Ci0gICAgCi0gICAgU3RvcmFnZUJhcnJpZXIo
UHJvcGVydHlTdG9yYWdlIHN0b3JhZ2UsIFVuY2hlY2tlZFRhZykKLSAgICB7Ci0gICAgICAgIHNl
dChzdG9yYWdlLCBVbmNoZWNrZWQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmLCBKU0NlbGwqLCBQcm9wZXJ0eVN0b3JhZ2UgbmV3U3RvcmFnZSkKLSAgICB7Ci0gICAg
ICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0KFBy
b3BlcnR5U3RvcmFnZSBuZXdTdG9yYWdlLCBVbmNoZWNrZWRUYWcpCi0gICAgewotICAgICAgICBt
X3N0b3JhZ2UgPSBuZXdTdG9yYWdlOwotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlOyB9Ci0gICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogb3BlcmF0b3ItPigpIHsgcmV0dXJuIG1fc3RvcmFn
ZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gb3BlcmF0
b3IqKCkgeyByZXR1cm4gKm1fc3RvcmFnZTsgfQotICAgIGNvbnN0IFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZVtp
XTsgfQotICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIG1fc3RvcmFnZVtpXTsgfQotICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZTsgfQotICAgIFByb3BlcnR5U3RvcmFnZSBn
ZXQoKSB7IHJldHVybiBtX3N0b3JhZ2U7IH0KLQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1
cm4gIW1fc3RvcmFnZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQcm9wZXJ0eVN0b3JhZ2UgbV9z
dG9yYWdlOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNiArNzgsMTcgQEAgdm9pZCBTdHJpbmdPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZQogICAgIEpTT2JqZWN0OjpwdXQoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiB9CiAKK3ZvaWQgU3RyaW5nT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0
cmluZ09iamVjdCo+KGNlbGwpOworICAgIGlmICh0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCkt
PmNhbkdldEluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBKU09iamVjdDo6cHV0
QnlJbmRleChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9
CisKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICBTdHJpbmdP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKQEAgLTEz
Myw2ICsxNDQsMTQgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAog
ICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAorYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKK3sKKyAgICBTdHJp
bmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4oY2VsbCk7CisgICAg
aWYgKHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+Y2FuR2V0SW5kZXgoaSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpKTsKK30KKwogdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgU3Ry
aW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2
aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIApAQCAt
NjYsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmLCBKU1N0
cmluZyopOwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNXcmFwcGVyT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU1dyYXBwZXJPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmdPYmplY3QoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw3ICsyMiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U3RyaW5nUHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkQ2FsbC5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OSw5ICsxNDksMTAgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRp
ZgogfQogCi1TdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZS5nZXQoKSkK
ICAgICAsIG1fdHlwZUluZm8odHlwZUluZm8pCisgICAgLCBtX2luZGV4aW5nVHlwZShpbmRleGlu
Z1R5cGUpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmpl
Y3QsIFdyaXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD46Ok1heUJlTnVsbCkKICAgICAsIG1fcHJv
dG90eXBlKGdsb2JhbERhdGEsIHRoaXMsIHByb3RvdHlwZSkKICAgICAsIG1fY2xhc3NJbmZvKGNs
YXNzSW5mbykKQEAgLTE3Niw2ICsxNzcsNyBAQCBjb25zdCBDbGFzc0luZm8gU3RydWN0dXJlOjpz
X2luZm8gPSB7ICJTCiBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCiAgICAgOiBKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGwpCiAgICAgLCBtX3R5cGVJbmZvKENv
bXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbikKKyAgICAsIG1faW5kZXhpbmdUeXBl
KDApCiAgICAgLCBtX3Byb3RvdHlwZShnbG9iYWxEYXRhLCB0aGlzLCBqc051bGwoKSkKICAgICAs
IG1fY2xhc3NJbmZvKCZzX2luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0KElu
aXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0xOTcsNiArMTk5LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogU3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKGds
b2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV90
eXBlSW5mbyhwcmV2aW91cy0+dHlwZUluZm8oKSkKKyAgICAsIG1faW5kZXhpbmdUeXBlKHByZXZp
b3VzLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3Byb3RvdHlwZShn
bG9iYWxEYXRhLCB0aGlzLCBwcmV2aW91cy0+c3RvcmVkUHJvdG90eXBlKCkpCiAgICAgLCBtX2Ns
YXNzSW5mbyhwcmV2aW91cy0+bV9jbGFzc0luZm8pCiAgICAgLCBtX3RyYW5zaXRpb25XYXRjaHBv
aW50U2V0KEluaXRpYWxpemVkV2F0Y2hpbmcpCkBAIC0yNTEsNiArMjU0LDggQEAgdm9pZCBTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSgogCiAgICAgZm9yIChwdHJkaWZmX3QgaSA9
IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgc3RydWN0dXJl
ID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlv
dXMpCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRy
eShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0
cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cywgc3Ry
dWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKICAgICAgICAgbV9wcm9w
ZXJ0eVRhYmxlLT5hZGQoZW50cnkpOwogICAgIH0KQEAgLTUwMiw2ICs1MDcsMzggQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJldHVybiB0cmFuc2l0aW9u
OwogfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK3sKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9B
dHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdU
cmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRl
cykpIHsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5Q
cmV2aW91cyA9PSBhdHRyaWJ1dGVzKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlv
bi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAg
ICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAgfQorICAgIAorICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgIHRyYW5z
aXRpb24tPm1fcHJldmlvdXMuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7
CisgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9IGF0dHJpYnV0ZXM7Cisg
ICAgdHJhbnNpdGlvbi0+bV9pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgCisgICAg
aWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQorICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1
Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+bV9wcmV2aW91cykKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1hdGVy
aWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKCk7CisgICAgfQorICAgIAorICAgIHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAg
IHJldHVybiB0cmFuc2l0aW9uOworfQorCiAvLyBJbiBmdXR1cmUgd2UgbWF5IHdhbnQgdG8gY2Fj
aGUgdGhpcyBwcm9wZXJ0eS4KIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTI4MDA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUg
U3RydWN0dXJlX2gKIAogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkluZGV4aW5n
VHlwZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1
ZGUgIkpTVmFsdWUuaCIKQEAgLTY4LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qKTsKKyAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlID0gMCk7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQpAQCAtMTAwLDYgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBzZWFsVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVu
dEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKIAogICAgICAgICBib29sIGlzU2Vh
bGVkKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0YSYp
OwpAQCAtMTQwLDYgKzE0Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkg
PT0gJnNfaW5mbyk7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAgICAgICAgIGJvb2wgaXNPYmplY3Qo
KSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAorICAgICAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGUgJiBB
bGxBcnJheVR5cGVzOyB9CisgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ1R5cGU7IH0KIAogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmpl
Y3QuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpOyB9CkBAIC0zMzQsNiArMzM4LDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2luZGV4aW5n
VHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIApAQCAtMzYzLDcgKzM3Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIGNvbnN0IFR5cGVJ
bmZvJiwgY29uc3QgQ2xhc3NJbmZvKik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVj
dHVyZShKU0dsb2JhbERhdGEmLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBj
b25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSA9IDApOwogICAg
ICAgICBTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIFN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKIApAQCAtNDE2LDYgKzQyNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50ID0gMzsKIAogICAgICAgICBUeXBlSW5mbyBtX3R5cGVJbmZvOworICAgICAg
ICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CiAgICAgICAgIAogICAgICAgICBXcml0ZUJh
cnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gbV9wcm90b3R5cGU7CkBAIC00NDcsNyArNDU3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsKICAgICAg
ICAgYm9vbCBtX2hhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8gOiAxOwogICAgICAgICBib29sIG1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMgOiAxOwot
ICAgICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzIDogNzsKKyAgICAgICAgdW5z
aWduZWQgbV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA6IDIyOwogICAgICAgICB1bnNpZ25lZCBtX3Nw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA6IDI7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmVu
dEV4dGVuc2lvbnMgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwpA
QCAtNDY1LDExICs0NzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbykKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNyZWF0ZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKGNsYXNz
SW5mbyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8pOworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0cnVj
dHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUpOwogICAgICAg
ICBzdHJ1Y3R1cmUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICByZXR1cm4g
c3RydWN0dXJlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCShyZXZpc2lvbiAxMjgwMDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGVfaAogI2RlZmluZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVfaAogCisj
aW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zNyw2
ICszOCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIFN0cnVjdHVy
ZTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUgPSAxIDw8
IDY7IC8vIFVzZSBmb3IgdHJhbnNpdGlvbnMgdGhhdCBkb24ndCBoYXZlIHRvIGRvIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLgorCisvLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5k
aWNhdGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKy8vIElmIGFueSBv
ZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJl
IDAuCitlbnVtIE5vblByb3BlcnR5VHJhbnNpdGlvbiB7CisgICAgQWxsb2NhdGVBcnJheVN0b3Jh
Z2UKK307CisKK2lubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFuc2l0
aW9uIHRyYW5zaXRpb24pCit7CisgICAgcmV0dXJuIHRyYW5zaXRpb24gKyBGaXJzdEludGVybmFs
QXR0cmlidXRlOworfQorCitpbmxpbmUgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZShJbmRl
eGluZ1R5cGUgb2xkVHlwZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCit7Cisg
ICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBBbGxvY2F0ZUFycmF5U3RvcmFnZToK
KyAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBIYXNBcnJheVN0b3JhZ2U7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBvbGRUeXBlOwor
ICAgIH0KK30KKwogY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKICAgICBzdGF0aWMg
Y29uc3QgaW50cHRyX3QgVXNpbmdTaW5nbGVTbG90RmxhZyA9IDE7CiAKQEAgLTQ0LDcgKzY5LDEw
IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgIHR5cGVkZWYgc3Rk
OjpwYWlyPFJlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQ+IEtleTsKICAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gcC5maXJzdC0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQg
PSBwLnNlY29uZDsKKyAgICAgICAgICAgIGlmIChwLmZpcnN0KQorICAgICAgICAgICAgICAgIHJl
c3VsdCArPSBwLmZpcnN0LT5leGlzdGluZ0hhc2goKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEs
IGNvbnN0IEtleSYgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxh
L2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9tb3ppbGxhL2pzMV82L0FycmF5L3JlZ3Jlc3MtMzA0ODI4LmpzCShy
ZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvbW96aWxsYS9q
czFfNi9BcnJheS9yZWdyZXNzLTMwNDgyOC5qcwkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCByZXBvcnRDb21wYXJlKGV4cGVjdCwgYWN0dWFsLCBzdW1tYXJ5ICsgCiAKIC8vIHJldmVy
c2UKIHZhbHVlICA9ICcxMjMnOwotZXhwZWN0ID0gJzEyMyc7CitleHBlY3QgPSAnVHlwZUVycm9y
OiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAg
YWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2UuY2FsbCh2YWx1ZSkgKyAnJzsKQEAgLTcz
LDcgKzczLDcgQEAgcmVwb3J0Q29tcGFyZShleHBlY3QsIGFjdHVhbCwgc3VtbWFyeSArIAogCiAv
LyBzb3J0CiB2YWx1ZSAgPSAnY2JhJzsKLWV4cGVjdCA9ICdjYmEnOworZXhwZWN0ID0gJ1R5cGVF
cnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4nOwogdHJ5CiB7
CiAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5zb3J0LmNhbGwodmFsdWUpICsgJyc7CkBAIC0x
MTQsNyArMTE0LDcgQEAgcmVwb3J0Q29tcGFyZSgnYWJjJywgdmFsdWUsIHN1bW1hcnkgKyAnOgog
CiAvLyB1bnNoaWZ0CiB2YWx1ZSAgPSAnZGVmJzsKLWV4cGVjdCA9IDY7CitleHBlY3QgPSAiVHlw
ZUVycm9yOiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7CiB0cnkK
IHsKICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh2YWx1ZSwgJ2EnLCAn
YicsICdjJyk7CkBAIC0xMjgsNyArMTI4LDcgQEAgcmVwb3J0Q29tcGFyZSgnZGVmJywgdmFsdWUs
IHN1bW1hcnkgKyAnOgogCiAvLyBzaGlmdAogdmFsdWUgID0gJ2FiYyc7Ci1leHBlY3QgPSAnVHlw
ZUVycm9yOiBVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5Lic7CitleHBlY3QgPSAnVHlwZUVycm9y
OiBBdHRlbXB0ZWQgdG8gYXNzaWduIHRvIHJlYWRvbmx5IHByb3BlcnR5Lic7CiB0cnkKIHsKICAg
YWN0dWFsID0gQXJyYXkucHJvdG90eXBlLnNoaWZ0LmNhbGwodmFsdWUpOwpAQCAtMTQyLDcgKzE0
Miw3IEBAIHJlcG9ydENvbXBhcmUoJ2FiYycsIHZhbHVlLCBzdW1tYXJ5ICsgJzoKIAogLy8gc3Bs
aWNlCiB2YWx1ZSAgPSAnYWJjJzsKLWV4cGVjdCA9ICdUeXBlRXJyb3I6IFVuYWJsZSB0byBkZWxl
dGUgcHJvcGVydHkuJzsKK2V4cGVjdCA9ICdUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24g
dG8gcmVhZG9ubHkgcHJvcGVydHkuJzsKIHRyeQogewogICBhY3R1YWwgPSBBcnJheS5wcm90b3R5
cGUuc3BsaWNlLmNhbGwodmFsdWUsIDEsIDEpICsgJyc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMjgwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw2NyBAQAorMjAxMi0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBwcm9wZXJ0eSBidXR0ZXJmbGllcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MzMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaCB0aGUgRE9NIHRo
YXQgdG8gaW50ZXJjZXB0IGdldC9wdXQgb24gaW5kZXhlZCBwcm9wZXJ0aWVzLCB5b3Ugbm93IGhh
dmUKKyAgICAgICAgdG8gb3ZlcnJpZGUgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCBhbmQgcHV0
QnlJbmRleC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgYmVoYXZpb3Iu
IE9uZSB0ZXN0IHdhcyByZWJhc2VkIGJlY2F1c2UgaW5kZXhlZAorICAgICAgICBwcm9wZXJ0eSBp
dGVyYXRpb24gb3JkZXIgbm93IG1hdGNoZXMgb3RoZXIgZW5naW5lcyAoaW5kZXhlZCBwcm9wZXJ0
aWVzIGFsd2F5cworICAgICAgICBjb21lIGZpcnN0KS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0FycmF5VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlWYWx1ZTo6Z2V0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNCbG9iQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQmxvYik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFdlYmtpdExpbmVEYXNoKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dG9ET01TdHJpbmdMaXN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVN0cmlu
Z01hcEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVN0cmluZ01hcDo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RPTVdpbmRvdzo6cHV0QnlJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpwdXRCeUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAoSlNET01XaW5kb3dTaGVs
bCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSGlzdG9yeTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvcHVsYXRlQ29udGV4dE1lbnVJdGVtcyk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3RvcmFnZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTV2ViU29j
a2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChK
U0M6OlJ1bnRpbWVBcnJheTo6UnVudGltZUFycmF5KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9hcnJheS5oOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChSdW50aW1lQXJyYXkpOgorCiAyMDEyLTA5LTA5ICBEYW4gQmVybnN0ZWluICA8
bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgYnVpbGQgYWZ0ZXIgcjEy
ODAwNi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCShy
ZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDExIEBAIGJvb2wgQXJyYXlWYWx1ZTo6
Z2V0KHNpemVfdCBpbmRleCwgRGljdGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNB
cnJheSogYXJyYXkgPSBhc0FycmF5KG1fdmFsdWUpOwotICAgIGlmICghYXJyYXktPmNhbkdldElu
ZGV4KGluZGV4KSkKKyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNl
IG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAg
IGlmICghYXJyYXktPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEpTVmFsdWUgaW5kZXhlZFZhbHVlID0gYXJyYXktPmdldEluZGV4KGluZGV4
KTsKKyAgICBKU1ZhbHVlIGluZGV4ZWRWYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaW5k
ZXgpOwogICAgIGlmIChpbmRleGVkVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSB8fCAhaW5kZXhl
ZFZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxMjgwMDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNyArMTE4LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U0Jsb2JDb25zdAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVl
IGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoaSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRo
ZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1NjEwCisgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleFF1
aWNrbHkoaSk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIGlmIChpdGVtLmluaGVyaXRzKCZK
U0FycmF5QnVmZmVyOjpzX2luZm8pKQogICAgICAgICAgICAgYmxvYkJ1aWxkZXItPmFwcGVuZChj
b250ZXh0LCB0b0FycmF5QnVmZmVyKGl0ZW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEwLDggKzExMCw5IEBAIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFdlYmsK
IAogICAgIERhc2hBcnJheSBkYXNoOwogICAgIEpTQXJyYXkqIHZhbHVlQXJyYXkgPSBhc0FycmF5
KHZhbHVlKTsKKyAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1v
ZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIGZsb2F0IGVsZW0gPSB2YWx1ZUFycmF5LT5nZXRJbmRleChpKS50b0Zsb2F0KGV4ZWMpOwor
ICAgICAgICBmbG9hdCBlbGVtID0gdmFsdWVBcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRvRmxv
YXQoZXhlYyk7CiAgICAgICAgIGlmIChlbGVtIDw9IDAgfHwgIWlzZmluaXRlKGVsZW0pKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVN0cmluZ0xpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDggKzMzLDkgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0b0RP
TVN0cmluZ0xpcwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKICAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gc3RyaW5nTGlzdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgp
OworICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NjEwCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKQotICAgICAgICBzdHJpbmdMaXN0
LT5hcHBlbmQoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7
CisgICAgICAgIHN0cmluZ0xpc3QtPmFwcGVuZChhcnJheS0+Z2V0SW5kZXhRdWlja2x5KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAKICAgICByZXR1cm4gc3RyaW5nTGlzdC5yZWxl
YXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01h
cEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDExIEBAIGJvb2wgSlNET01TdHJpbmdNYXA6OmRlbGV0ZVByb3BlcnR5KEpTQ2UK
ICAgICByZXR1cm4gIWVjOwogfQogCitib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQor
eworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIGluZGV4KSk7Cit9CisKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JikKIHsKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAxMjgwMDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MCwxMiArMTYwLDEyIEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5
U2xvdChKU0MKICAgICAvLyBpcyBhbGxvd2VkLgogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CiAg
ICAgYm9vbCBhbGxvd3NBY2Nlc3MgPSBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMs
IHRoaXNPYmplY3QtPmltcGwoKSwgZXJyb3JNZXNzYWdlKTsKLQorICAgIAogICAgIC8vIExvb2sg
Zm9yIG92ZXJyaWRlcyBiZWZvcmUgbG9va2luZyBhdCBhbnkgb2Ygb3VyIG93biBwcm9wZXJ0aWVz
LCBidXQgaWdub3JlIG92ZXJyaWRlcyBjb21wbGV0ZWx5CiAgICAgLy8gaWYgdGhpcyBpcyBjcm9z
cy1kb21haW4gYWNjZXNzLgogICAgIGlmIChhbGxvd3NBY2Nlc3MgJiYgSlNHbG9iYWxPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQorICAgIAogICAgIC8vIFdlIG5lZWQgdGhpcyBjb2Rl
IGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgSlNET01XaW5kb3dCYXNlIHdpbGwgc3RvcCB0aGUgc2Vh
cmNoIGJlZm9yZSB3ZSBldmVuIGdldCB0byB0aGUKICAgICAvLyBwcm90b3R5cGUgZHVlIHRvIHRo
ZSBibGFua2V0IHNhbWUgb3JpZ2luIChzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KSBjaGVj
ayBhdCB0aGUgZW5kIG9mIGdldE93blByb3BlcnR5U2xvdC4KICAgICAvLyBBbHNvLCBpdCdzIGlt
cG9ydGFudCB0byBnZXQgdGhlIGltcGxlbWVudGF0aW9uIHN0cmFpZ2h0IG91dCBvZiB0aGUgRE9N
V2luZG93IHByb3RvdHlwZSByZWdhcmRsZXNzIG9mCkBAIC0yNjksNiArMjY5LDgyIEBAIGJvb2wg
SlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdChKU0MKICAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKK2Jvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihj
ZWxsKTsKKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkgeworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBtZXNzYWdlIGhlcmUgdGhhdCBleHBsYWlu
cyB3aHkgdGhlIHByb3BlcnR5IGFjY2Vzcy9mdW5jdGlvbiBjYWxsIHdhcworICAgICAgICAvLyBu
b3QgYWxsb3dlZC4gCisgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGNyb3NzLWRvbWFp
biBhY2Nlc3MgaGVyZSB3aXRob3V0IHByaW50aW5nIHRoZSBnZW5lcmljIHdhcm5pbmcgbWVzc2Fn
ZQorICAgIC8vIGJlY2F1c2Ugd2UgYWx3YXlzIGFsbG93IGFjY2VzcyB0byBzb21lIGZ1bmN0aW9u
LCBqdXN0IGRpZmZlcmVudCBvbmVzIGRlcGVuZGluZyB3aGV0aGVyIGFjY2VzcworICAgIC8vIGlz
IGFsbG93ZWQuCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBib29sIGFsbG93c0FjY2Vz
cyA9IHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgp
LCBlcnJvck1lc3NhZ2UpOworCisgICAgLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGJlZm9yZSBsb29r
aW5nIGF0IGFueSBvZiBvdXIgb3duIHByb3BlcnRpZXMsIGJ1dCBpZ25vcmUgb3ZlcnJpZGVzIGNv
bXBsZXRlbHkKKyAgICAvLyBpZiB0aGlzIGlzIGNyb3NzLWRvbWFpbiBhY2Nlc3MuCisgICAgaWYg
KGFsbG93c0FjY2VzcyAmJiBKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGluZGV4KTsKKyAgICAKKyAgICAvLyBDaGVjayBmb3IgY2hpbGQgZnJhbWVzIGJ5IG5hbWUg
YmVmb3JlIGJ1aWx0LWluIHByb3BlcnRpZXMgdG8KKyAgICAvLyBtYXRjaCBNb3ppbGxhLiBUaGlz
IGRvZXMgbm90IG1hdGNoIElFLCBidXQgc29tZSBzaXRlcyBlbmQgdXAKKyAgICAvLyBuYW1pbmcg
ZnJhbWVzIHRoaW5ncyB0aGF0IGNvbmZsaWN0IHdpdGggd2luZG93IHByb3BlcnRpZXMgdGhhdAor
ICAgIC8vIGFyZSBpbiBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21lIG9mIHRoZXNl
LCB3ZSBoYXZlIHRvIGRvCisgICAgLy8gaXQgdGhlIE1veiB3YXkuCisgICAgaWYgKHRoaXNPYmpl
Y3QtPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5zY29wZWRDaGlsZChwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSkgeworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlz
T2JqZWN0LCBjaGlsZEZyYW1lR2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIC8vIERvIHByb3RvdHlwZSBsb29rdXAgZWFybHkgc28gdGhhdCBmdW5jdGlvbnMg
YW5kIGF0dHJpYnV0ZXMgaW4gdGhlIHByb3RvdHlwZSBjYW4gaGF2ZQorICAgIC8vIHByZWNlZGVu
Y2Ugb3ZlciB0aGUgaW5kZXggYW5kIG5hbWUgZ2V0dGVycy4gIAorICAgIEpTVmFsdWUgcHJvdG8g
PSB0aGlzT2JqZWN0LT5wcm90b3R5cGUoKTsKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSkgewor
ICAgICAgICBpZiAoYXNPYmplY3QocHJvdG8pLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgs
IHNsb3QpKSB7CisgICAgICAgICAgICBpZiAoIWFsbG93c0FjY2VzcykgeworICAgICAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CisgICAgICAg
ICAgICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IFNlYXJjaCB0
aGUgd2hvbGUgZnJhbWUgaGllcmFyY2h5IHNvbWV3aGVyZSBhcm91bmQgaGVyZS4KKyAgICAvLyBX
ZSBuZWVkIHRvIHRlc3QgdGhlIGNvcnJlY3QgcHJpb3JpdHkgb3JkZXIuCisKKyAgICAvLyBhbGxv
dyB3aW5kb3dbMV0gb3IgcGFyZW50WzFdIGV0Yy4gKCM1Njk4MykKKyAgICBpZiAoaW5kZXggPCB0
aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+c2NvcGVkQ2hpbGRDb3VudCgpKSB7
CisgICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpOworICAg
ICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGluZGV4LCBpbmRleEdldHRlcik7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghYWxsb3dzQWNjZXNzKSB7
CisgICAgICAgIHRoaXNPYmplY3QtPnByaW50RXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7Cisg
ICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1l
bnQuaW1hZ2VzLkltYWdlMQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXNPYmplY3QtPmlt
cGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0g
ZmluZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoYXRvbWljUHJvcGVy
dHlOYW1lICYmIChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCktPmhhc05hbWVk
SXRlbShhdG9taWNQcm9wZXJ0eU5hbWUpIHx8IGRvY3VtZW50LT5oYXNFbGVtZW50V2l0aElkKGF0
b21pY1Byb3BlcnR5TmFtZSkpKSB7CisgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2Jq
ZWN0LCBuYW1lZEl0ZW1HZXR0ZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7Cit9CisKIGJvb2wgSlNET01XaW5kb3c6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+
KG9iamVjdCk7CkBAIC0zNjIsNiArNDM4LDI1IEBAIHZvaWQgSlNET01XaW5kb3c6OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWMKICAgICAgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit2b2lkIEpTRE9NV2luZG93OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KGNlbGwpOworICAgIGlmICghdGhpc09iamVjdC0+aW1wbCgp
LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpOworCisgICAgLy8gT3B0aW1p
emF0aW9uOiBhY2Nlc3MgSmF2YVNjcmlwdCBnbG9iYWwgdmFyaWFibGVzIGRpcmVjdGx5IGJlZm9y
ZSBpbnZvbHZpbmcgdGhlIERPTS4KKyAgICBpZiAodGhpc09iamVjdC0+SlNHbG9iYWxPYmplY3Q6
Omhhc093blByb3BlcnR5Rm9yV3JpdGUoZXhlYywgcHJvcGVydHlOYW1lKSkgeworICAgICAgICBp
ZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRo
aXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdDo6cHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIEJh
c2U6OnB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJv
dyk7Cit9CisKIGJvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEpTRE9N
V2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4oY2VsbCk7CkBAIC0zNzEs
NiArNDY2LDE1IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCoKICAg
ICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKIH0KIAorYm9vbCBKU0RPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAg
SlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxsKTsKKyAg
ICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIHByb3BlcnRpZXMgYnkgZnJhbWVzIGluIHRoZSBzYW1l
IG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworfQorCiB2b2lkIEpTRE9NV2luZG93OjpnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAx
MjgwMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTIgQEAgYm9vbCBKU0RPTVdpbmRvd1NoZWxs
OjpnZXRPd25Qcm9wZXJ0eVNsbwogICAgIHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCitib29sIEpTRE9NV2luZG93U2hlbGw6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRE9NV2luZG93
U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKwogYm9vbCBKU0RPTVdpbmRvd1NoZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNET01XaW5k
b3dTaGVsbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsK
QEAgLTEwOSw2ICsxMTUsMTIgQEAgdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpwdXQoSlNDZWxsKiBj
ZWxsLAogICAgIHRoaXNPYmplY3QtPndpbmRvdygpLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09i
amVjdC0+d2luZG93KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit2
b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRU
aHJvdykKK3sKKyAgICBKU0RPTVdpbmRvd1NoZWxsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9N
V2luZG93U2hlbGwqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleCh0aGlzT2JqZWN0LT53aW5kb3coKSwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OnB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewog
ICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3dTaGVs
bCo+KG9iamVjdCk7CkBAIC0xMjcsNiArMTM5LDEyIEBAIGJvb2wgSlNET01XaW5kb3dTaGVsbDo6
ZGVsZXRlUHJvcGVydHkoSlMKICAgICByZXR1cm4gdGhpc09iamVjdC0+d2luZG93KCktPm1ldGhv
ZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOwogfQogCitib29sIEpTRE9NV2luZG93U2hlbGw6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KQoreworICAgIEpTRE9NV2luZG93U2hlbGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5k
b3dTaGVsbCo+KGNlbGwpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT53aW5kb3coKS0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QtPndpbmRvdygpLCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworfQorCiB2b2lkIEpTRE9NV2luZG93U2hlbGw6OmdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5k
b3dTaGVsbCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4ob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJ
KHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU0M6OkpT
T2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7CisgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6
SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7CisgICAgICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQpOwogICAgICAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTUgQEAgYm9vbCBKU0hpc3Rv
cnk6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogYwogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCitib29sIEpTSGlzdG9y
eTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNIaXN0b3J5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTSGlzdG9yeSo+KGNlbGwpOworICAgIC8vIE9ubHkgYWxsb3cgZGVsZXRpbmcgYnkgZnJh
bWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCktPmZyYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCiB2b2lkIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0hpc3Rvcnkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNIaXN0b3J5Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5k
SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNyArODksOCBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpwb3J0KEV4
CiBzdGF0aWMgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51SXRlbXMoRXhlY1N0YXRlKiBleGVjLCBK
U0FycmF5KiBhcnJheSwgQ29udGV4dE1lbnUmIG1lbnUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBKU09iamVjdCogaXRlbSA9
IGFzT2JqZWN0KGFycmF5LT5nZXRJbmRleChpKSk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlm
IHRoZSBhcnJheSBpcyBpbiBzcGFyc2UgbW9kZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1NjEwCisgICAgICAgIEpTT2JqZWN0KiBpdGVtID0gYXNPYmplY3QoYXJy
YXktPmdldEluZGV4UXVpY2tseShpKSk7CiAgICAgICAgIEpTVmFsdWUgbGFiZWwgPSBpdGVtLT5n
ZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGFiZWwiKSk7CiAgICAgICAgIEpTVmFsdWUgdHlw
ZSA9IGl0ZW0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJ0eXBlIikpOwogICAgICAgICBK
U1ZhbHVlIGlkID0gaXRlbS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImlkIikpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDE1IEBAIGJvb2wgSlNM
b2NhdGlvbjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiAKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAorYm9vbCBKU0xv
Y2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTG9jYXRpb24qPihjZWxsKTsKKyAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5n
IGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoZXhlYywgdGhpc09iamVjdC0+aW1wbCgpLT5mcmFtZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwogdm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpT
TG9jYXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9iamVjdCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDExIEBAIGJvb2wgSlNTdG9yYWdl
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBK
U1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0
eShjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworfQor
CiB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
dG9yYWdlKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
U29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViU29ja2V0CiAg
ICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcm90b2NvbHM7CiAgICAgICAgICAgICBKU0FycmF5
KiBwcm90b2NvbHNBcnJheSA9IGFzQXJyYXkocHJvdG9jb2xzVmFsdWUpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3RvY29sc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByb3RvY29sID0gcHJvdG9jb2xzQXJyYXktPmdldElu
ZGV4KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIFN0cmluZyBw
cm90b2NvbCA9IHByb3RvY29sc0FycmF5LT5nZXRJbmRleFF1aWNrbHkoaSkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgICAgICAgICAgICAgIHByb3RvY29scy5hcHBlbmQocHJvdG9jb2wpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTI4MDA5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNyArMTQ0LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGpzVG9JbgogICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHZhbHVlKTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMgaW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTYxMAorICAgICAgICAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBlbGVtZW50VmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFs
dWUoc2NyaXB0U3RhdGUsIGVsZW1lbnQsIG1heERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAo
IWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4OTQsOSBAQCBT
ZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5k
ZXgoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gYXJyYXktPmdldEluZGV4
KGluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgYXJyYXkgaXMg
aW4gc3BhcnNlIG1vZGU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NTYxMAorICAgICAgICAgICAgICAgIGlmIChhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGFycmF5LT5nZXRJbmRleFF1aWNrbHko
aW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBib29s
IGhhc0luZGV4ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBnZXRTcGFy
c2VJbmRleChhcnJheSwgaW5kZXgsIGhhc0luZGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjgw
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtNzc3LDIzICs3NzcsMjUgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAKICAgICAkaW1wbEluY2x1ZGVzeyIke2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAhJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDdXN0b21IZWFkZXIifSAmJiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tUHV0RnVuY3Rpb24ifSB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9KTsKIAotICAgIG15
ICRoYXNHZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAKLSAgICAgICAgICAgICAgICAgfHwgISRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9Ci0gICAgICAg
ICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0
ZXIifQotICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9Ci0gICAgICAg
ICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAg
ICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIi
fTsKKyAgICBteSAkaGFzQ29tcGxleEdldHRlciA9CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkluZGV4ZWRHZXR0ZXIifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOdW1lcmljSW5kZXhlZEdldHRlciJ9CisgICAgICAgIHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9
CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KKyAgICAgICAgfHwgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKKyAgICAKKyAgICBteSAk
aGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSB8fCAkaGFzQ29tcGxleEdldHRlcjsKIAogICAg
ICMgR2V0dGVycwogICAgIGlmICgkaGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
biIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifSkgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpO1xuIikgaWYgKCRoYXNDb21wbGV4R2V0dGVyKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBib29sIGdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERl
c2NyaXB0b3IifTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvckRlbGVnYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3Ii
fTsKICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCJ9ID0gMTsKKyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9IDE7CiAgICAg
fQogCiAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJsZSBwcm9wZXJ0aWVzCkBAIC04
MDQsMTUgKzgwNiwxNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG15ICRoYXNTZXR0ZXIgPSAkaGFzUmVhZFdyaXRlUHJvcGVydGllcwotICAgICAgICAgICAg
ICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlv
biJ9Ci0gICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbU5hbWVkU2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9OworICAgIG15ICRoYXNDb21w
bGV4U2V0dGVyID0KKyAgICAgICAgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tUHV0RnVuY3Rpb24ifQorICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21OYW1lZFNldHRlciJ9CisgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifTsKKyAgICAgICAgCisgICAgbXkgJGhh
c1NldHRlciA9ICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzIHx8ICRoYXNDb21wbGV4U2V0dGVyOwog
CiAgICAgIyBHZXR0ZXJzCiAgICAgaWYgKCRoYXNTZXR0ZXIpIHsKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9p
ZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKSBpZiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn07CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgKCRoYXNDb21wbGV4U2V0dGVyKTsKICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIHB1dERlbGVnYXRlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVk
U2V0dGVyIn07CiAgICAgfQogCkBAIC04NDgsNiArODUyLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAKICAgICAjIEN1c3RvbSBkZWxldGVQcm9wZXJ0eSBmdW5jdGlvbgogICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbURlbGV0ZVByb3BlcnR5In07CiAKICAgICAjIEN1c3Rv
bSBnZXRQcm9wZXJ0eU5hbWVzIGZ1bmN0aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKICAgICBpZiAo
JGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTE3NDEsMjEgKzE3NDYsNzkgQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuXG4iKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik51bWVyaWNJbmRleGVkR2V0dGVyIn0pCi0gICAgICAgICAgICAgICAgJiYgISRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifQorICAgICAgICAg
ICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0g
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifQor
ICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciJ9KSB7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlz
T2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0
LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0luZGV4ZWRHZXR0ZXIifSkgewotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XG4iKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2JqZWN0LT5pbmRl
eEdldHRlcik7XG4iKTsKKworICAgICAgICAgICAgIyBUaGlzIGF0dGVtcHRzIHRvIHNpbmsgdGhl
IHNvbWV3aGF0IGV4cGVuc2l2ZSBpbnQtdG8tc3RyaW5nIGNvbnZlcnNpb24gdGhhdCBoYXBwZW5z
IHdoZW4gd2UgY3JlYXRlIFByb3BlcnR5TmFtZQorICAgICAgICAgICAgIyB0byB0aGUgcG9pbnQg
d2hlcmUgd2UgYWN0dWFsbHkgbmVlZCBpdC4gSW4gcGFydGljdWxhciwgd2hlbiB3ZSBnZW5lcmF0
ZSB0aGlzIG1ldGhvZCBmb3IgY2xhc3NlcyB0aGF0IGNhbgorICAgICAgICAgICAgIyBhdHRlbXB0
IHRoZWlyIGluZGV4ZWQgZ2V0dGVyIGZpcnN0LCB3ZSB0cnkgdG8gZW5zdXJlIHRoYXQgaWYgdGhh
dCBnZXR0ZXIgc3VjY2VlZHMgdGhlbiB3ZSBkb24ndCBwYXkgZm9yIHRoZQorICAgICAgICAgICAg
IyBjcmVhdGlvbiBvZiB0aGUgUHJvcGVydHlOYW1lLgorICAgICAgICAgICAgbXkgJGdlbmVyYXRl
ZFByb3BlcnR5TmFtZSA9IDA7CisgICAgICAgICAgICBteSAkcHJvcGVydHlOYW1lR2VuZXJhdGlv
biA9IHN1YiB7CisgICAgICAgICAgICAgICAgaWYgKCRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAk
Z2VuZXJhdGVkUHJvcGVydHlOYW1lID0gMTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG15ICRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uID0gc3ViIHsKKyAg
ICAgICAgICAgICAgICBteSAkcmVxdWlyZXNNYW51YWxMb29rdXAgPSAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifTsKKyAgICAgICAgICAgICAgICBpZiAoJHJlcXVpcmVz
TWFudWFsTG9va3VwKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSAke2NsYXNzTmFtZX1UYWJsZS5lbnRyeShleGVj
LCBwcm9wZXJ0eU5hbWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmIChlbnRyeSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBlbnRyeS0+cHJv
cGVydHlHZXR0ZXIoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9ICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgJiRwcm9wZXJ0eU5h
bWVHZW5lcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5l
cmF0aW9uKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpO1xuIik7
CisKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRl
eGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTnVtZXJpY0lu
ZGV4ZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgIGlmIChJbmRleEdldHRlclJldHVybnNT
dHJpbmdzKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSB7XG4iKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmpl
Y3QtPmltcGwoKSktPmxlbmd0aCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik51bWVyaWNJbmRl
eGVkR2V0dGVyIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkp
O1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwg
aW5kZXgsIHRoaXNPYmplY3QtPmluZGV4R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgeworICAgICAgICAgICAgICAgICYkcHJv
cGVydHlOYW1lR2VuZXJhdGlvbigpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFz
c05hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
c09iamVjdCwgdGhpc09iamVjdC0+bmFtZUdldHRlcik7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9ID0gMTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgJiRwcm9w
ZXJ0eU5hbWVHZW5lcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgJiRtYW51YWxMb29rdXBHZXR0
ZXJHZW5lcmF0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdEFuZERlc2NyaXB0b3IifSkgeworICAgICAgICAgICAgICAgICYkcHJvcGVydHlOYW1l
R2VuZXJhdGlvbigpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9CiAKQEAgLTE5NDYsMTYgKzIwMDksMzAg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0
ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNz
TmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1l
fSo+KGNlbGwpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPmluZGV4U2V0
dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVy
In0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRTZXR0ZXIi
fSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFz
c05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW5kZXggPD0gTUFYX0FSUkFZX0lO
REVYKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBVTlVTRURfUEFSQU0oc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0
ZXIoZXhlYywgaW5kZXgsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZFNldHRlciJ9KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCk7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6
cHV0QnlJbmRleChjZWxsLCBleGVjLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGhhc1JlYWRXcml0
ZVByb3BlcnRpZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5j
cHAJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJheSIs
ICZKU0FycmF5OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5
KSB9OwogCiBSdW50aW1lQXJyYXk6OlJ1bnRpbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIDogSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVj
dHVyZSkKKyAgICA6IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIDApCiAg
ICAgLCBtX2FycmF5KDApCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9hcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmgJKHJldmlzaW9uIDEyODAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDEzICs3MywxMyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8sIEFycmF5KTsKICAgICB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYsIEJpbmRpbmdzOjpBcnJheSopOwogCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQXJyYXk6OlN0cnVjdHVyZUZsYWdz
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNBcnJh
eTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CiAgICAgUnVudGltZUFycmF5KEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSopOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MDA5KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMDkg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhh
dmUgcHJvcGVydHkgYnV0dGVyZmxpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkxOTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW9kaWZ5IHRoZSB0ZXN0IHRvIGluZGljYXRlIHRoYXQgaXRlcmF0aW5n
IG92ZXIgcHJvcGVydGllcyBub3cgcmV0dXJucworICAgICAgICBpbmRleGVkIHByb3BlcnRpZXMg
Zmlyc3QuIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UgdGhhdCBtYWtlcyB1cyBtb3JlCisgICAg
ICAgIGNvbXBsaWFudCB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAqIGZh
c3QvanMvcmVzb3VyY2VzL0pTT04tc3RyaW5naWZ5LmpzOgorCiAyMDEyLTA5LTA5ICBKYW1lcyBS
b2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmViYXNlbGluZSBtZWRp
YS92aWRlby16b29tLWNvbnRyb2xzIG9uIGNocm9taXVtLW1hYyBmb3Igc3VicGl4ZWwgY2hhbmdl
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdpZnkuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvSlNPTi1zdHJpbmdp
ZnkuanMJKHJldmlzaW9uIDEyODAwOSkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2Vz
L0pTT04tc3RyaW5naWZ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgZnVu
Y3Rpb24gY3JlYXRlVGVzdHMoKSB7CiAgICAgICAgIGpzb25PYmplY3Quc3RyaW5naWZ5KHthOiJh
IiwgYjoiYiIsIGM6ImMiLCAzOiAiZCIsIDI6ICJlIiwgMTogImYifSwgcmVwbGFjZUZ1bmMpOwog
ICAgICAgICByZXR1cm4gcmVwbGFjZVRyYWNrZXI7CiAgICAgfSk7Ci0gICAgcmVzdWx0W3Jlc3Vs
dC5sZW5ndGggLSAxXS5leHBlY3RlZCA9ICcoc3RyaW5nKXsiYSI6ImEiLCJiIjoiYiIsImMiOiJj
IiwiMyI6ImQiLCIyIjoiZSIsIjEiOiJmIn07YShzdHJpbmcpImEiO2Ioc3RyaW5nKSJiIjtjKHN0
cmluZykiYyI7MyhzdHJpbmcpImQiOzIoc3RyaW5nKSJlIjsxKHN0cmluZykiZiI7JzsKKyAgICBy
ZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLmV4cGVjdGVkID0gJyhzdHJpbmcpeyIxIjoiZiIsIjIi
OiJlIiwiMyI6ImQiLCJhIjoiYSIsImIiOiJiIiwiYyI6ImMifTsxKHN0cmluZykiZiI7MihzdHJp
bmcpImUiOzMoc3RyaW5nKSJkIjthKHN0cmluZykiYSI7YihzdHJpbmcpImIiO2Moc3RyaW5nKSJj
IjsnOwogICAgIHJlc3VsdC5wdXNoKGZ1bmN0aW9uKGpzb25PYmplY3QpewogICAgICAgICB2YXIg
Y291bnQgPSAwOwogICAgICAgICB2YXIgYXJyYXkgPSBbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7Y291
bnQrKzsgYXJyYXlbMF09J2EnOyBhcnJheVsxXT0nYyc7IGFycmF5WzJdPSdiJzsgcmV0dXJuICdh
J319XTsK
</data>
<flag name="review"
          id="174322"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>